- 1
- 2
while (st.indexOf(" ") != -1)
st = st.replace(" ", " ");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+4
while (st.indexOf(" ") != -1)
st = st.replace(" ", " ");
kerman 15.05.2016 23:32 # 0
Dummy00001 17.05.2016 11:34 # 0
но я не раз писал подобный код для чистки е-буков: замена nbsp (0xA0) на обычный пробел (0x20). но на самом деле там все еще хуже: https://www.cs.tut.fi/~jkorpela/chars/spaces.html
FrontlineReporter 17.05.2016 11:55 # 0
guesto 17.05.2016 12:55 # 0
предлагаю запилить модуль для нода: 2SpacesToOneSpace
1024-- 16.05.2016 05:31 # 0
Регулярки с g - интересно, но (1) их надо учить ради этого и (2) как быть с произвольными строками?
ih8e 16.05.2016 11:28 # 0
Допустим, мы хотим убрать все пробелы в строке тремя различными способами, можно сравнить их быстродействие:
st=st2=st3=document.body.innerHTML
//вариант выше
console.time('test1');
while(st.indexOf(" ")!=-1) st=st.replace(" ","");
console.timeEnd('test1');
//split + join
console.time('test2');
st2=st2.split(' ').join('');
console.timeEnd('test2');
//используем регулярные выражения
console.time('test3');
st3=st3.replace(/ /g,'');
console.timeEnd('test3');
1024-- 16.05.2016 15:20 # 0
Либо быстро и для конкретных строк, либо медленно. Нехорошо это.
Dummy00001 17.05.2016 11:38 # 0
мне казалось что они PCRE? или нет? в PCRE можно \Q & \E пользоваться - в пользовательском вводе надо только `\` эскэйпить.
1024-- 17.05.2016 16:16 # 0
Но я такого в JS не видел, в популярных реализациях тоже не наблюдается.
guesto 16.05.2016 12:48 # +2
полезных модулей та мнет
inkanus-gray 16.05.2016 13:06 # 0
https://www.npmjs.com/search?q=useable
guesto 16.05.2016 13:28 # 0
>>Parser for HTTP status codes, turning them into something more useable.
какие-то распятые мальчики же
dxd 16.05.2016 13:09 # 0
guesto 16.05.2016 13:27 # +2
JS настолько хуевый язык, что в нем реально нужен IsNumber
3.14159265 16.05.2016 14:36 # 0
А как же любимый фсеми функцианальный подход:? foreach по строке как-никак.
Или как это в терминах хацкиля: map filter fold
с ecma6 питушнёй => даже писать немного.
3.14159265 16.05.2016 14:43 # +1
Можно было б даже пойти на радикальные меры и выпилить классическую императивную часть if/for/while, заменив функциями IF(condition() , then(), else()), WHILE (cond,body)
Тогда сахарок => обоснован.
1024-- 16.05.2016 15:17 # 0
Решение! Только хотелось бы чего-то стандартного, оптимизированного какими-нибудь экмацарями.
> Прототипы наверное тоже
Полезная штука, только для Object сделать методы has, hasnot, get, set, чтоб операции над объектами работали для хэшей. Ну и функцию наследования полей добавить. Если не фичами и сахарком, то хоть функциями у Object это осуществить. Ещё хорошо бы иметь Object.proto(obj) и Object.this(obj), которые возвращают прототип и сам объект без прототипа соответственно.
> (_)=>
Эти скобки даже опустить можно было. Любопытное решение получается.
Правда, для функции с несколькими выражениями придётся {} добавить, в конце будет знаменитое });
Вообще, что на жс ни пиши, в конце всегда к }); приходишь.
3.14159265 16.05.2016 15:48 # 0
Её использование навязывает убогие т.н. js-классы => ООП.
Язык и без этого очень функциональный и тьюринг полный.
>Ну и функцию наследования полей добавить.
Меня уже тошнит при слове "наследование". Реально ведь херовый способ повторного использования.
И чего все всё норовят в js жабу притащить.
Плюс эти блядские вечно торчащие поля valueOf и toString. Не раздражают, не?
JSON.stringify(obj) нормально ведь работает. Без всяких прототипов. Но нет, блядь хочу методы через точку вызывать.
inkanus-gray 16.05.2016 15:52 # +1
А расскажите-ка про хорошие способы повторного использования.
3.14159265 16.05.2016 16:00 # +1
Анонимные поля в go, трейты/миксины.
ropuJIJIa 31.08.2023 02:14 # 0
guesto 17.05.2016 12:57 # 0
наследовать хорошо интерфейсы (или протоколы или абстрактные классы)
А когда у тебя 5 уровней наследования то ОЧЕНЬ СЛОЖНО сделать ВНЯТНЫЙ интерфейс и понять что где кого переопределило, особенно когда у тебя жаба и все оверрайдится по умолчанию
А уж если у тебя есть виртуальные и невиртуальные методы (разные языки со словом Си) то еще круче
Vasiliy 17.05.2016 14:38 # 0
Есть класс Man у которого есть метод go есть класс Woman которому нужно сделать метод goBarbershop
Давай делегируй
guesto 17.05.2016 15:12 # +1
Оба наследуют интерфейс HumanWithLegs и передают туда вызовы.
Гугли "замена делегирования наследованием".
roman-kashitsyn 17.05.2016 15:16 # +2
guest 17.05.2016 15:19 # +1
entity Abstract
а потом сверху обмазывать декораторами с готовой реализацией
guesto 17.05.2016 15:26 # 0
guest 17.05.2016 15:29 # 0
guest6 31.08.2023 02:19 # 0
wvxvw 17.05.2016 15:44 # +1
Пару недель назад меня озадачили приделыванием gometalinter к нашему проекту. В его состав входит линтер который ищет явно скопипащеный код. Я запустил и заплакал. Потом подумал, и решил ему скормить несколько относительно больших сторонних проектов, и тут я понял, что жопа она универсальная. Хваленое отсутствие наследования в Го не оставит копипастеров без работы. Я даже удалил парочку интерфейсов, и заменил их копипастой: всего-то нужно было скопировать раза три или пять - подумаешь, мелочи.
bormand 17.05.2016 19:07 # 0
И ругается на остальной?
wvxvw 18.05.2016 09:15 # 0
bormand 18.05.2016 21:15 # +3
А линтер ругается на оставшийся код, чтобы не выябывались, а копипастили, как нормальные люди.
dxd 19.05.2016 11:04 # +1
3.14159265 17.05.2016 21:11 # 0
Одинаковые куски кода выносятся в функцию, везде торчит ссылка и вуаля!
guest6 31.08.2023 02:19 # 0
Да и вообще копировать код гораздо проще, чем писать универсальный. Даже сопровождение копипасты не такое трудное, как сопровождение кода использующего наследование
[/quote]
Сивокобыл конечо запредельный питух, просто шоколадные треды говнокода
guest6 31.08.2023 02:17 # 0
3_dar 16.05.2016 18:03 # 0
3.14159265 16.05.2016 20:15 # 0
Тела функций ведь не инфиксные.
roman-kashitsyn 16.05.2016 13:04 # +2
Если и вам мешают пробелы, попробуйте найти свой способ самой быстрой замены. Предположим, что в тексте есть подстроки длиной не более чем в L пробелов (могут встречаться строки пробелов любой длины от 1 до L). Ваша задача — определить минимальное количество замен, исправляющих группы подряд идущих пробелов на один, и составить план проведения таких замен. Если таких планов несколько, то вы должны выбрать среди них оптимальный — такой, который позволяет заменить любую последовательность пробелов длины не более K (K ≥ L) для максимально возможного K. Если есть несколько оптимальных планов замены, можете вывести любой из них.
gost 17.05.2016 21:50 # 0