Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переписать функцию в ES6 (https://javascript.ru/forum/misc/77772-perepisat-funkciyu-v-es6.html)

DarkPhoenix 18.06.2019 19:47

Переписать функцию в ES6
 
const timeEveryOneMinute = () => {
	let Data = new Date();
	let Hour = Data.getHours();
	let Minutes = Data.getMinutes();
		console.log("Текущее время: " + Hour + ":" + Minutes + " ");
		setTimeout(timeEveryOneMinute, 1000 * 60);
}
timeEveryOneMinute();


На курсах просят переписать в стиле ES6.
Прошу Гуру форума помочь.
Спасибо!

рони 18.06.2019 20:01

DarkPhoenix,
вы спросите, чего в супе коде не хватает?

рони 18.06.2019 20:32

DateTimeFormat
 
DarkPhoenix,
const timeEveryOneMinute = () => {
	const data = new Date(),
	time = new Intl.DateTimeFormat("ru", {
        hour: "2-digit",
        minute: "2-digit"
    }).format(data);
		console.log(`Текущее время: ${time}`);
		setTimeout(timeEveryOneMinute, 1000 * 60);
}
timeEveryOneMinute();

Aetae 18.06.2019 23:11

Оно и так стиле es6.

А в современном стиле оно как-то так:
import moment from 'moment'
import timer from 'some-super-timer'
import logger from 'some-super-logger'

timer.every(60).run(step => logger.log(
    moment().format("Текущее время: HH:mm")
));
(*код вымышлен, все совпадения случайны:) )

Malleys 19.06.2019 01:08

https://github.com/airbnb/javascript...ng-conventions

рони 19.06.2019 10:28

Malleys,
а можно словами или примером, для наглядности, что не так с кодом?

Dilettante_Pro 19.06.2019 11:09

рони,
Можно предположить, что let Data и let Time противоречат этому:
Цитата:

Use PascalCase only when naming constructors or classes

рони 19.06.2019 11:29

Dilettante_Pro,
поправил #3

Malleys 19.06.2019 11:50

Цитата:

Сообщение от рони
а можно словами или примером, для наглядности, что не так с кодом?

Обычно в JavaScript имена даются также, как в Java, но поскольку автор может не знать Java, или не понять, почему был упомянут Java, то я привёл руководство от Airbnb.

Я думаю, автору интересна последняя версия JavaScript, описанная в EcmaScript2019...

Конкретно пример автора может быть записан так...
(function timeEveryOneMinute() {
	const date = new Date();
	const hours = String(date.getHours()).padStart(2, "0");
	const minutes = String(date.getMinutes()).padStart(2, "0");

	console.log(`Текущее время: ${hours}:${minutes}`);
	setTimeout(timeEveryOneMinute, 1000 * 60);
})();


Пример рони так...
(function timeEveryOneMinute() {
	const date = new Date();
	const timeOptions = {
		hour: "2-digit",
		minute: "2-digit"
	};
	const time = date.toLocaleTimeString("ru", timeOptions);
	
	console.log(`Текущее время: ${time}`);
	setTimeout(timeEveryOneMinute, 1000 * 60);
})();


Пример Aetae возможен, но требует инструментов трансформации кода, сборки, наличие node.js (использование проприетарных импортов)

Malleys 19.06.2019 14:41

Цитата:

Сообщение от Poznakomlus
зачем здесь мусор для работы с датами,
неужели replace недостаточно?

console.log(String(new Date()).replace(/^.*?(\d+:\d+).*$/, `Текущее время: $1`));

Poznakomlus, 🙈🙉🙊

Aetae 19.06.2019 22:35

Poznakomlus,
Цитата:

Until ECMAScript 2018 (edition 9), the format of the string returned by Date.prototype.toString was implementation dependent. Therefore it should not be relied upon to be in the specified format.
На практике конечно проверять лень, в чём там разница.)

Malleys 21.06.2019 00:56

Цитата:

Сообщение от Poznakomlus
зачем здесь мусор для работы с датами,
неужели replace недостаточно?

console.log(String(new Date()).replace(/^.*?(\d+:\d+).*$/, `Текущее время: $1`));



Это означало, что у меня просто слов нет насчёт того, что вы написали в теме, где обсуждался стиль кода! Я не знаю, почему вы решили, что я негативно отношусь к вам, хотя я и не разделяю вашу точку зрения ни относительно кода, который вы написали, ни относительно того, что нужно не использовать представляемые методы для работы с датой, а лучше написать костыль вместо использования существующего метода, который позволяет получить строковое представление времени из даты без лишних усилии.

Посмотрите на алгоритм...
  • Получить текущее время (1)
  • Преобразовать его к строковому представлению (2)
  • Напечатать на экран (3)

Ни автор, ни я, ни вы не написали чего-то сверх этого...

Метод toLocaleTimeString делает именно то, как он назван... преобразует дату к строковому представлению, содержащему показание времени в каком-либо формате.

(function timeEveryOneMinute() {
	const date = new Date(); // (1)
	const timeOptions = {
		hour: "2-digit",
		minute: "2-digit"
	};
	const time = date.toLocaleTimeString("ru", timeOptions); // (2)
	
	console.log(`Текущее время: ${time}`); // (3)
	setTimeout(timeEveryOneMinute, 1000 * 60);
})();


По сравнению с этим кодом, совершенно не уместен ваш код, поскольку в нём весьма не очевидно происходящее... хотя он и выполняет в целом ту же самую работу...

Ваш код вызывает намного больше вопросов... Например...
  • Почему нужно искать в строковом представлении даты текущее время, а не использовать готовое решение, которое учитывает некоторые детали относительно региона, в котором показывают время? (Поддерживается ядром языка)
  • Учитывая, что такие методы существуют, не хотели ли вы показать якобы ущербность JS? Не хотели вы продвигать другой язык программирования, и специально подготовили почву для того, чтобы на примере другого языка программирования показать, что там это решается очевидно и код читаемый, а вот в JS это совершенно нечитаемо?
  • Почему вы решили, что ваш код понятен и читаем и стилистически лучше того, что уже было написано в теме?

Цитата:

Сообщение от Poznakomlus
зачем здесь мусор для работы с датами,

Существуют методы для работы с датой... почему вы называете их мусором, совершенно не понятно! Мусором выглядит именно ваш способ, поскольку в нём принимаются не очевидные решения!

console.log(String(new Date()).replace(/^.*?(\d+:\d+).*$/, `Текущее время: $1`));


Зачем вам создавать объект даты, если вы его не используете его методы, а только хотите получить строковое представление от toString()? Почему нельзя было возпользоваться для этой цели функцией Date?
console.log(Date().replace(/^.*?(\d+:\d+).*$/, `Текущее время: $1`));


А имеет ли какое-то значение то, что вы использовали шаблонную строку (``), а не обычную ("" или '')?

Учитывая формат строки, возвращаемой функцией Date...
console.log(Date().replace(/.*?(\d+:\d+).*/, "Текущее время: $1"));


А нужно ли регулярное выражение? Замена?
console.log("Текущее время: " + Date().slice(16,21));


Цитата:

я считаю ваш код говнокодом, когда решается проще
Проще насколько?

Часть кода на JavaScript
const date = new Date();
const timeOptions = {
	hour: "2-digit",
	minute: "2-digit"
};
const time = date.toLocaleTimeString("ru", timeOptions);
console.log(`Текущее время: ${time}`);


Часть кода на С#
DateTime date = DateTime.Now;
String time = date.ToString("HH:mm");
Console.WriteLine($"Текущее время: {time}");


Часть кода на Java (нужны import java.text.SimpleDateFormat; и import java.util.Date; )
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
String time = formatter.format(date);
System.out.println("Текущее время: " + time);


Простите, но ваша идея на других языках, также костыльна (если вообще возможна), плохо поддерживаема и не очевидна! Код же который я привёл, в принципе переводим на другие языки, переводим с других языков и понимаем и читаем!

То, что вы предложили, роднится по синтаксису с языком J. Я ещё удивляюсь, что вы не предложили перейти на него с слоганами, типа, какая краткость, какая лаконичность... И почему их так бомбит, когда им указывают, что они пишут write-only код?

Учитывая такое количество вопросов, не учтённых деталей, уничижительное высказывание и поощрение к написанию плохо поддерживаемого кода, а также ваши усилия, чтобы я заметил ваши высказывания, я посчитал необходимым оставить негативный отзыв к вашему ответу!

В чём смысл поощрения того, что в конечном счёте порождает вообще не понимаемое, не читаемое и невозможное поддерживать.

В современных языках как раз избегают писать длинные выражения в одну строку. Гораздо понятнее и удобнее разбивать сложный алгоритм на несколько более простых, которые затем комбинируются понятными операторами.

Код, который я привёл (который аж в пять раз больше, какой ужас!) может понять практически любой программист, имеющий минимальные навыки хотя бы в одном современном языке, не обязательно в JS. Программист, начинающий изучать JS, но без знании других языков, это тоже, скорее всего, поймёт, причём очень быстро.

А код, который вы показали, непонятен не только непосвящённым (вот откуда можно понять, что replace от строки даты, содержит то, что описывает регулярное выражение, да ещё происходит полная замена строки, а?), но я боюсь, и начинающим изучать JS тоже!

Alexandroppolus 21.06.2019 04:54

Цитата:

Сообщение от Malleys
Учитывая, что такие методы существуют, не хотели ли вы показать якобы ущербность JS? Не хотели вы продвигать другой язык программирования, и специально подготовили почву для того, чтобы на примере другого языка программирования показать, что там это решается очевидно и код читаемый, а вот в JS это совершенно нечитаемо?

:D
Вычислил диверсанта)

Malleys 21.06.2019 16:36

Цитата:

Сообщение от Poznakomlus
Именно так. Вы пишите код ради кода. В пять раз больше, имея стандартно получить строку и отдать на выходе строку, вы используете преобразование. при этом кода становится больше.

Вы хоть сами понимаете, что вы пишите? А вы что, не используете преобразование?

Вы совершенно не поняли, почему вас минусуют!

Вы представляете, как будто у вас там какие-то магические вычисления... А если ваш способ представить через переменные, то видно, что вы делаете тоже самое...

var date = new Date();
var timeExtractor = /^.*?(\d+:\d+).*$/;
var time = String(date).replace(timeExtractor, "$1");

console.log(`Текущее время: ${time}`);


Я удивлен, насколько плохо у вас развито воображение, что вы не смогли в моём коде увидеть строчку в своём стиле...
console.log(`Текущее время: ${new Date().toLocaleTimeString("ru", {hour:"2-digit",minute:"2-digit"})}`);


Цитата:

Сообщение от Poznakomlus
Вы берёте число и преобразовываете в строку, при этом вы легко можете получить строку одним из методов

Какое число? Может вам стоит почитать учебник Ильи Кантора... https://learn.javascript.ru/datetime...ie-i-vyvod-dat

UPD Ели под числом вы имели в ввиду дату, то мне не понятны ваши претензии к преобразованию её к строке, ведь вы делаете тоже самое... Вы преобразуете дату к строке и затем ту строку ещё преобразуете, чтобы из неё извлечь время... Я же преобразую дату сразу к строке с нужным временем...

UPD2
Цитата:

Сообщение от Poznakomlus
перестаньте медитировать. откройте глаза, форум js

какой бы там язык не был, ваш код похож на вывод от Google Closure Compiler

Malleys 21.06.2019 21:52

Цитата:

Сообщение от Poznakomlus
у меня нет времени тратить свое время на подобных идиотов🌚 объясняя что одна строка не 5😳

Я для этого использую Babel🚀 или Google Closure Compiler🚀... 😎😎😎 А по сути у вас тоже 5, просто вы 🚫не🚫 написали комментарии🏷, что делает ваш код! 😜😊😁😃😜😂😉😜

Цитата:

Сообщение от Poznakomlus
одна строка не 5

А модульность не 300 символов шириной в 2350 строк... Видел я эти проекты на PHP в вашем стиле... 😉 Хотя те скудные файлы на github с вашим кодом на php показывают, что вы так не пишите! 😉 А зачем тут пропагандировать😕? 😜 😅😅😅

Цитата:

Сообщение от Poznakomlus
Предлагаю вам сходить🕳

😱😵😖😖😶😶
Федя😜, а у вас жизнь сплошной переход по ссылкам?
🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳🕳
😈😇😈😇😈😇😈😇😈😇😈😇😈😇😈 😜 🌚🌚🌚 😅😅😅

Цитата:

Вы утомили собеседника глупыми вопросами, просьбами или советами.
Poznakomlus, вы писали 🚨🚨🚨«обоснуй свой -10»🌚 👎🔟👎и 🚨🚨🚨«какого Malleys, минусует где обоснования📝📢📝📣📝📒📣📓📔📗📚📚📚, слился?»🌚 Вы сами просили🙏, чтобы я написал вам ответ, а теперь возмущаетесь, что он есть!🌚 Три обезьянки 🙈🙉🙊 были реакцией на ваше «зачем здесь мусор🗑 для работы с датами». Почему вы решили, что это негативный комментарии, я не знаю! 😅😅😅

Цитата:

Вы обидели собеседника неосторожным высказыванием: задели его религиозные, политические, музыкальные и прочие взгляды и вкусы, либо иным образом вторглись в его внутренний мир и подвергли критике то, чем он дорожит.
Простите, я не знал, что для вас философия написания кода в одну строчку так дорога!🛐 Хотя стоит отметить что именно за ваши цитаты вида 🌚«я считаю ваш код говнокодом», 🌚«зачем здесь мусор🗑 для работы с датами», 🌚«учить других говнокодить💩📜» вам самим следовало бы перейти по ссылке🕳... 💩📜💩📜💩📜 Обычно «говнокод💩📜» решает только видимую часть проблемы. И проблема проявляется, когда его нужно дописать!👻🕳 😅😅😅

Цитата:

Вам намекают о том, что не вернут долг, не заплатят за работу, отказывают в сексуальной близости.
Цитата:

С вами просто не хотят общаться. Такое тоже бывает.
Зачем эти намёки🍆, переходы?😷 😅😅😅

Привет!👋👋👋 Привет, Федя! Ты там не горюй, тебя любят и обожают! 👑😻👑😻👑 Всё-таки вашими умениями являются JavaScript👍, Joomla!, MySQL👍, Node.js👍, PHP👍, PostgreSQL, не говоря уже о раннем увлечении Basic и VB! 🔥👌😎 😅😅😅

Ох, Федя, Федя... 😜 ну ты и даёшь! 🙈🙉🙊 😅😅😅


Часовой пояс GMT +3, время: 23:56.