Показать сообщение отдельно
  #12 (permalink)  
Старый 21.06.2019, 00:56
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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 тоже!
Ответить с цитированием