- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
function trim(s)
{
var i,j;
for (i = 0; i < s.length && s.charAt(i) == " "; i++);
for (j = s.length-1; j >= 0 && s.charAt(j) == " "; j--);
if (i<=j)
return s.substring(i, j+1);
else
return '';
}
Или JS игнорирует ; ?
Фиксед?
Облом. Нет у меня такого в линуксе.
а так одним substring'ом все аккуратно чикается.
https://perldoc.perl.org/functions/chop
ахахахахах
Если задаться целью оптимизации без использования регулярных выражений. :)
отдельным постом нужно
А насичот js-регулярок - эт вы хорошо сказали.
и вообще for - короче чем while и удобней.
Удобство - личное дело. Мне так удобно, вам - по другому. Я не спорю, но оптимизация подразумевает что удобством можно пожертвовать.
Количество пробельных элементов не повлияет на работу, но скажется на быстроте работы парсера, так что вы правы.
В моем предыдущем сообщении было два предложения, прочитайте второе предложение, тоже.
for (i=0;s[++i] in d;);
for (j=s.lenght-1;(c in d) && s[j] >= a);--j);
например
for (i=0;s[i] in d;++i);
>for (j=s.lenght-1;(c in d) && s[j] >= a);--j);
for (j=s.lenght-1;(s[j] in d) && j >= i);--j);
*sefl-fix*
>в худшем случае, т.е. когда будет строка только из пробельных элементов код из примера буде проверять ее дважды, справа налево и слева направо.
В зависимости от реализации может оказаться выгоднее сделать s=s.substring(i) перед вторым циклом и упростить условие.
"Зачем с" - в смысле "зачем-с", или зачем нужна переменная "с"? 1. Иногда мне скучно. 2. Согласен, можно было и без.
Улучшеный вариант:
%)
for-in тут ни при чем, у вас не получится через for-in просмотреть все символы строки.
&& a<b, где b = s.length,
>for (c in d)
работает точно так же как и while(c in d)
>for (c in d)
>работает точно так же как и while(c in d)
Нет, в первом случае in - ключевое слово (т.е. является частью конструкции for-in и не имеет самостоятельного смысла), во втором - in - оператор (обычная функция записанная в инфиксной нотации). В первом случае вы перечисляете все ключи хеша, во втором вы проверяете наличие ключа в хеше. Т.е. в первом случае будет использоваться опкод next_value (для последовательного получения всех ключей в d), а во втором - get_property (для проверки наличия у d ключа c), ну или как-то так. Вобщем, эти операции даже не связаны между собой.
Ты прав.
Но проверку я бы оставил.
for (c in d)
А то, помнится мне, в Java метод String.substring(...) вернет по сути ту же самую строку, которая была изначально, но приватные члены-данные нового объекта: offset, count изменятся, а value (массив символо) не изменится. Если ничего не путаю.
return ((beginIndex == 0) && (endIndex == count)) ? this :
new String(offset + beginIndex, endIndex - beginIndex, value);
// Package private constructor which shares value array for speed.
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
String a="123",b;
b = a.substring(0,3);
b.concat("456");
то
System.out.println(a);
Выведет в консольке - 123456
Оно по идее выведет стектрейс с ошибкой.
>(0,3);
Строки в жабе иммутабельны. + массивы что в них не умеют менять размер.
При concate создастcя новый массив, скопирует туды оба значения и вернет новый стринг и с новым внутренним массивом.
Студентота. А JavaScript только в следующем семестре.
Но все таки. Где посмотреть можно?
По части книг я бы порекомендовал Eloquent Javascript (Marijn Haverbeke), JavaScript: The Good Parts (Douglas Crockford), Javascript Patterns (Stoyan Stefanov). Ну потом можно, в принципе, прочитать еще Hight Performance Javascript. Сам очень советую Javascript Patterns, но она больше для "продвинутых" нежели Eloquent JS и JS The Good Parts.
P.S. Протаете всё, на след. курсе на лекции по JS можно будет не ходить ;-)
При условии, что я сделаю все лабы и смогу объяснить какие действия происходят в каждой строчке кода.
Слава Богу, преподаватель требовательный
А вот это уже немного беспокоит