Проверка длинны 'a.length < b', намного быстрей чем 'a.length' + 'Math.max' + 'Array.join'
function pading(a, b, с) {
return (b+=1,a.length < b ? (Array(b).join(c) + a).substr(-1*b): a);
}
Но в целом, для решении любой задачи существует два варианта, либо что-то делать для ее решения либо нет.
А программист добавит, пока все работает, ничего не меняй ;)
function pading(a, b, с) {
return a.length < b ? (Array(b).join(c) + a).substr(-1*b): a;
}
Я наверное не правильно, выражаюсь, все мои примеры только импровизация на коленке, для подтверждения возможностей JavaScript.
И любую задачу при желании можно описать одной строкой — если понимаю как, когда не понимаю ищу пример модуль или функцию изучаю, и если целесообразно добавляю фрагмент или вызов.
function pading(a, b, с) {
return (Array(b).join(c) + a).substr(-1*b);
}
Написание модуля — функции, дает понимание законченности.
Дробление своей задачи на модули — функции, общее представление алгоритма.
Модули удобно использовать для демонстраций и изучения.
Но когда доходит до оптимизации ...;)
Это как в жизни, чем меньше зависимостей, тем легче дышится.
И т.д и т.п.
зачем писать обертку для того, что есть и/или пишется одной строкой.
function pading(a, b, c) {
return Array(b).join(c) + a;
}
Но это не принципиально, здесь пишу, как функцию только для понимания,
хота сам использую только
var str+=Array(2).join("0");
или
var str=Array(2).join("0") + str;
Модули и лоадеры удобно использовать только на этапе наброска.
А на этапе тестирования, отладки и оптимизации обычно стараюсь избавиться от зависимостей.
Но это не означает, что я их не использую.
Извините, наверное мы говорим о разном, в стандартных ситуациях хватает и запроса к свойству 'constructor'
В не стандартных ситуациях, для получения значения 'class' тоже использую '{}.toString.call()':
function getTypeOf(a) {
return (void 0 === a || null === a ? String(a) : {}.toString.call(a).replace(/\[.+?(\w+)\]/, '$1').toLowerCase()) || '';
}
Но сути дела это не меняет:
зачем писать обертку для того, что есть и/или пишется одной строкой.
Доброго времени суток
Некогда не понимал зачем писать обертку для того, что есть и/или пишется одной строкой.
На мой взгляд подобный код не имеет смысла оборачивать в функции.
function isArray(a){
return a && a.constructor === Array;
}
function pading(a, b) {
return Array(b).join(" ") + a;
}
Спасибо за ваше мнение.
Посмотрел я как на сайтах после расчетов проверяют номиналы.
А насчет известных таблиц, собственно… ;)
Кто-то же мне за скрипт заплатил?
Я тоже инженер, если что =)
Ну, а в скрипт весь гост добавлять, было как-то не рационально.
Keyten
Если не секрет, зачем всё сообщение писать в спойлере?
В спойлере, чтоб не захламлять топик, и ответы были за вопросами.
var first = 0; // Предположим, что эта переменная действительно 'first'
// со значением типа Number
// ... // здесь что-то происходит возможно, что с 'first'
first = 'abc'; // Меняем тип переменной, и она уже не может быть 'first' скорее 'tmp'
// Это и есть разрыв логической привязки.
alert(first); // Я бы сразу написал alert('abc');
// Не удачный пример, я бы выбрал, что то об обмене значений переменных, и описал бы классический стек.
//
// В моем понимании оптимизация это разумное соотношение размера кода к количеству
// выполненных операций для получения определенной цели. Я стараюсь не использовать
// переменных, которые использоваться однократно, проще интегрировать эти значения в код.
// После того как понимаешь что все переменные на своих местах, начинаю разбираться, а все
// ли переменные и операции мне нужны - это как упростить уравнение, если упрощать нечего,
// начинаю сортировать переменные в порядке использования, а последним шагом сокращаю имена
// переменных и функций.
//
// Постарался полно ответить на ваши вопросы.
Согласен с вами.
Не привязывал переменные логически к названию, чтоб не терять возможности повторного использования.
К именованию переменных у меня БЫЛО два подхода.
При изучения чужого кода и отладке собственного — использую маркеры из "$", "_" и буквы верхнего регистра.
var $A="Marker'$A'";
var _A="Marker'_A'";
var _$A="Marker'_$A'";
При оптимизации кода — минимальное имя переменной и отсутствие логической привязки названия к значению для временных %TMP% переменных, и их логическая последовательность
== > Начните отсюда:
Как раз сейчас пытаюсь осмыслить.
== > (вопросы сюда в лс)
Я так понимаю
package.json:
{
«name»: «translit»,
«version»: «0.0.4»,
«description»: «Forward and reverse transliteration according to ISO 9 or ISO 9: 1995 or GOST 7.79-2000 system of A and B»,
«main»: «translit.js»,
«scripts»: {
«test»: "??? — пока не понимаю что туда"
},
«author»: «xguest <xguest@list.ru>»,
«license»: «GPL»
}
1) Ну тогда, стоит начать сначала, JavaScript считаю наименее мной изученным языком, да и себя не позиционирую как программиста скорей как сисадмина, но просмотрев избранное своего браузера оказалось, что по MASM, C++, C#, JS, VBS, VB, Linux, железу и т.д. и т.п больше всего ссылок на Хабрахабр.
Почитав хабр и учитывая свои возможности, решил быть хоть чем то полезным, это и была задача.
2) C npm столкнулся только в Node и то для изучения чужого кода. Придется почитать.
Ощущение как у школьника, но буду стараться.
Спасибо, за советы это уже похоже на дискуссию.
Меня на такой, комментарий не хватило бы.
Постараюсь, сначала аргументировать ваши замечания, а потом займусь кодом.
1) Насчет проголосовавших, я хотел сказать, что не зависимо от голосования, кто то посчитал его для себя полезным.
2) О простоте кода — это уже философия, считаю в лесу проще заблудится, чем в трех деревьях. Сложный? чем — повторным использованием переменных, отсутствием лишних
проверок, но согласен кое что в коде проработать можно. Мой папа тоже всегда упоминал о своем возрасте и опыте, а когда мне исполнилось примерно столько же, понял, что тогда нужно было согласится независимо от того прав он был или нет. Говорят, это наживное, возможно кому-то и лога отладчика хватает и я им завидую.
3) Насчет вкусов вы по моему передёрнули, или не поняли я имел ввиду, что говорю о функции, а не о том где ее использовать.
4) Насчет, зачем выкладывал, искал более простой вариант, наверное хотел выслушать чье то мнение, я уже пообещал прокомментировать. Может укажите стандарт?
5) Об оптимизации и минимизации, для этого и писал искал более оптимальный вариант, о чем и написано в шапке.
6) ==> Но у вас дело даже не в алгоритме \n RegExp(e.join("|")
А что вас здесь смущает, преобразовать массив в строку с разделителем "|", что в свою очередь для RegExp является символом или. Кстати вы писали почему не выровнены имена переменных по алфавиту, и как раз про 'e' она там внешняя, и при совмещении двух рядов с учетом видимости и алфавита она вышла буквой 'e'.
7) ==> Все пред-созданные регулярки браузер компилит заранее и потом просто переиспользует.
Насколько я помню добиться увеличения скорости можно кэшируя большие данные, мой же код имея в ГОСТ восемь полей и 14 вариантов таблиц не кэширует ничего просто проверяет направление и создает таблицу и RegExp. И это как раз то что хотелось оптимизировать но там только одна проверка, сомневаюсь но думаю что заранее создавать все регулярки уже будет накладно.
8) ==> Почему a — символ,…
а — потому что это единственная локальная переменная в этой функции.
все остальные переменные для нее внешние.
9) ==> А то, что код не пишется в одну строчку.
Тут мой косяк, уже сказал исправлюсь, эти функции пощипал не интересными, и свернул но в принципе то там ни чего и нет.
Еще раз спасибо.
Насчет оформления исправлюсь.
Задача и была написать оптимизированный по времени и размеру код для транслитерации по стандарту.
Можно положить и на Git но я предполагал что код и его оптимизация и есть тема обсуждения.
Насчет NPM, я не использовал в функции сторонний код поэтому так и оставил, код под ECMA 3,
а если писать под 'нод' или что то еще можно было бы использовать 'Object.keys' и тому подобное я же старался придерживаться ECMA, да и еще, а как быть Googl и mozilla SDK.
+) Чтоб хранить в базе данных весь код.
+)
Если взять в пример какой-нибудь numeral, вполне можно выделить таблицы локализации в отдельный файл. (что приведет к большей поддерживаемости и возможности заюзать, например, по выбору ГОСТ или ISO)
Удалите и не используйте македонский (поддержка стандарта) и код это не затронет, таблица кодов в одной переменной используйте хоть с другого сервера и кстати код уже поддерживает выбору ГОСТ и ISO
Но в целом, для решении любой задачи существует два варианта, либо что-то делать для ее решения либо нет.
А программист добавит, пока все работает, ничего не меняй ;)
Я наверное не правильно, выражаюсь, все мои примеры только импровизация на коленке, для подтверждения возможностей JavaScript.
И любую задачу при желании можно описать одной строкой — если понимаю как, когда не понимаю ищу пример модуль или функцию изучаю, и если целесообразно добавляю фрагмент или вызов.
Хотя, так можно оборачивать и команду print.
P.S. Когда то увидел, как на asm двумя байтами перезагрузить комп. не поленился сохранил как инклюд, чтоб не забыть, хотя и глупо это выглядело.
Написание модуля — функции, дает понимание законченности.
Дробление своей задачи на модули — функции, общее представление алгоритма.
Модули удобно использовать для демонстраций и изучения.
Но когда доходит до оптимизации ...;)
Это как в жизни, чем меньше зависимостей, тем легче дышится.
И т.д и т.п.
где и что вы предлагаете дописать,
и что делать регуляркой, возможно вы не мне.
Но это не принципиально, здесь пишу, как функцию только для понимания,
хота сам использую только
или
Модули и лоадеры удобно использовать только на этапе наброска.
А на этапе тестирования, отладки и оптимизации обычно стараюсь избавиться от зависимостей.
Но это не означает, что я их не использую.
В не стандартных ситуациях, для получения значения 'class' тоже использую '{}.toString.call()':
Но сути дела это не меняет:
==> 5 // Небольшой факт: Array.prototype сам является массивом:
А если нужно boolean, хотя это и не имеет смысла, допишите:
Некогда не понимал зачем писать обертку для того, что есть и/или пишется одной строкой.
На мой взгляд подобный код не имеет смысла оборачивать в функции.
Посмотрел я как на сайтах после расчетов проверяют номиналы.
А насчет известных таблиц, собственно… ;)
Кто-то же мне за скрипт заплатил?
Я тоже инженер, если что =)
Ну, а в скрипт весь гост добавлять, было как-то не рационально.
В спойлере, чтоб не захламлять топик, и ответы были за вопросами.
Не привязывал переменные логически к названию, чтоб не терять возможности повторного использования.
К именованию переменных у меня БЫЛО два подхода.
Как раз сейчас пытаюсь осмыслить.
== > (вопросы сюда в лс)
Я так понимаю
package.json:
{
«name»: «translit»,
«version»: «0.0.4»,
«description»: «Forward and reverse transliteration according to ISO 9 or ISO 9: 1995 or GOST 7.79-2000 system of A and B»,
«main»: «translit.js»,
«scripts»: {
«test»: "??? — пока не понимаю что туда"
},
«author»: «xguest <xguest@list.ru>»,
«license»: «GPL»
}
Завтра переименую переменные.
Почитав хабр и учитывая свои возможности, решил быть хоть чем то полезным, это и была задача.
2) C npm столкнулся только в Node и то для изучения чужого кода. Придется почитать.
Ощущение как у школьника, но буду стараться.
Спасибо, за советы это уже похоже на дискуссию.
Прокомментировал код, как смог.
Прошу сильно не пинать, это моя первая публикация, и я стараюсь.
Хочу переименовать переменные.
Не привязывал их логически к названию, чтоб не терять возможности повторного использования.
У меня вопрос, а если вы в середине кода понимаете, что переменная больше не нужна, разве ее нельзя использовать повторно?
Постараюсь, сначала аргументировать ваши замечания, а потом займусь кодом.
1) Насчет проголосовавших, я хотел сказать, что не зависимо от голосования, кто то посчитал его для себя полезным.
2) О простоте кода — это уже философия, считаю в лесу проще заблудится, чем в трех деревьях. Сложный? чем — повторным использованием переменных, отсутствием лишних
проверок, но согласен кое что в коде проработать можно. Мой папа тоже всегда упоминал о своем возрасте и опыте, а когда мне исполнилось примерно столько же, понял, что тогда нужно было согласится независимо от того прав он был или нет. Говорят, это наживное, возможно кому-то и лога отладчика хватает и я им завидую.
3) Насчет вкусов вы по моему передёрнули, или не поняли я имел ввиду, что говорю о функции, а не о том где ее использовать.
4) Насчет, зачем выкладывал, искал более простой вариант, наверное хотел выслушать чье то мнение, я уже пообещал прокомментировать. Может укажите стандарт?
5) Об оптимизации и минимизации, для этого и писал искал более оптимальный вариант, о чем и написано в шапке.
6) ==> Но у вас дело даже не в алгоритме \n RegExp(e.join("|")
А что вас здесь смущает, преобразовать массив в строку с разделителем "|", что в свою очередь для RegExp является символом или. Кстати вы писали почему не выровнены имена переменных по алфавиту, и как раз про 'e' она там внешняя, и при совмещении двух рядов с учетом видимости и алфавита она вышла буквой 'e'.
7) ==> Все пред-созданные регулярки браузер компилит заранее и потом просто переиспользует.
Насколько я помню добиться увеличения скорости можно кэшируя большие данные, мой же код имея в ГОСТ восемь полей и 14 вариантов таблиц не кэширует ничего просто проверяет направление и создает таблицу и RegExp. И это как раз то что хотелось оптимизировать но там только одна проверка, сомневаюсь но думаю что заранее создавать все регулярки уже будет накладно.
8) ==> Почему a — символ,…
а — потому что это единственная локальная переменная в этой функции.
все остальные переменные для нее внешние.
9) ==> А то, что код не пишется в одну строчку.
Тут мой косяк, уже сказал исправлюсь, эти функции пощипал не интересными, и свернул но в принципе то там ни чего и нет.
Еще раз спасибо.
Задача и была написать оптимизированный по времени и размеру код для транслитерации по стандарту.
Можно положить и на Git но я предполагал что код и его оптимизация и есть тема обсуждения.
Насчет NPM, я не использовал в функции сторонний код поэтому так и оставил, код под ECMA 3,
а если писать под 'нод' или что то еще можно было бы использовать 'Object.keys' и тому подобное я же старался придерживаться ECMA, да и еще, а как быть Googl и mozilla SDK.
+)
Если взять в пример какой-нибудь numeral, вполне можно выделить таблицы локализации в отдельный файл. (что приведет к большей поддерживаемости и возможности заюзать, например, по выбору ГОСТ или ISO)
Удалите и не используйте македонский (поддержка стандарта) и код это не затронет, таблица кодов в одной переменной используйте хоть с другого сервера и кстати код уже поддерживает выбору ГОСТ и ISO