Обновить
33
Дмитрий@Keyten

JavaScript

14
Подписчики
Отправить сообщение
Автор вовсе не говорил, что возможность застрелиться большим количеством способов — непревзойдённое преимущество. Автор говорил именно о свободе действий — да, в том числе и свободе стреляться.

Дабы не быть голословным, покажу код.
Есть у меня библиотека для рисования на канвасе DeltaJS (ранее известная как Graphics2D.js, я даже писал о ней на Хабре). Сейчас она в фазе активного переписывания и дописывания, и её можно найти вот тут: https://github.com/keyten/Graphics2D

В ней можно создать квадрат на канвасе:
ctx.rect(10, 10, 200, 200, 'red');


Каждая из координат прогоняется через функцию `Delta.distance`.
Вдруг в какой-то момент разработчик вспомнил, что существует Ретина, и захотел рисовать квадраты с шириной не в px (пикселях), а в pt. Что ж, он делает так:
var oldDistance = Delta.distance;
Delta.distance = function (dist) {
 if (isPtDist(dist)) {
  return convertPtToPx(dist);
 }
 return oldDistance.apply(this, arguments);
}


И всё, благополучно можно писать
ctx.rect('10pt', '10pt', '200pt', '200pt', 'red');

Вообще-то все css-единицы итак поддерживаются в Delta, однако distance всё ещё может быть переопределение, чтобы добавить, например, полярные координаты или какие-нибудь специальные координаты в условиях специального Layout. По факту, distance специально вынесена как публичная функция, чтобы её можно было переопределить, тем самым вмешавшись в логику всей библиотеки, меняя лишь маленький кусочек. Требование при переопределении одно: возвращаться должно число. В пикселях.

Если мне понадобится что-то более существенное, например, изменить порядок аргументов функции или добавить новые, я могу переопределить Delta.Context.prototype.rect.

И подобных точек вмешательства несколько. Можно вмешаться в логику attr (Delta.Drawable.prototype.attr), добавив или изменив своё в attrHooks. Вмешаться в логику событий через eventsHooks. Через тот же attrHooks вмешаться в логику animate.

Обсуждая это с людьми, пишущими на плюсах, я спросил, как с этим справляются они. Что, если захочется добавить дополнительный параметр в std:sort или научить новому методу std:string?
Никак — ответили мне. Так ты можешь только выстрелить в ногу.
Но… — попытался возразить я.
Никаких но. Нога.

Между тем, jQuery таким образом существует уже фиг знает сколько лет. Со своими плагинами и многим другим. Ты можешь добавить на страницу сто плагинов, которые вмешиваются во внутреннюю логику jQuery и меняют разные куски, и — внезапно окажется, что у кода на js настолько большой запас прочности, что это всё будет отлично работать и синхронизироваться друг с другом, делая ровно то, что ты от них ожидаешь. Даже если меняют ровно одно и то же (при этом сохраняя предыдущее переопределение функции и передавая ему управление, если нужно).

Да, иногда плагины бывают несовместимы. Но это не отменяет того, что концепция крутая и работает.

Считать, что знание языка определяется тем, помнит ли человек, что возвращается при делении на 0… Ну не знаю.

На любом языке можно написать фигню.


Например, мне может захотеться сделать в плюсах #define true false, и писать исходя из этого. Или я могу захотеть сортировать массив пузырьком, чтобы найти максимум.


Так что читать мануалы и книги действительно нужно. В любом языке.

А я так понял, что речь про ускорение с помощью const. Ну типа, в компилируемых языках const имеет только одно отличие от других переменных — компилятор на момент компиляции проверяет, не хочет ли кто его переопределить. Т е. по скорости никаких отличий.
(или даже — где-то встречал, что const — это аналог #define, который считается в момент компиляции и подставляется препроцессором)


В js же const ставит специальный флаг у переменной, и интерпретатор наоборот должен тратить доп. ресурсы и следить, чтобы эту переменную никто не изменил.

Похожая история, только пробовал переводиться в МФТИ на 1 курсе. Пытался объяснить, что угорел по программированию, но, видимо, тройки по инжграфу в зачётке — гарантия обратного.
В итоге пошёл в НМУ, ни о чём особо не жалею. Частенько вспоминаю, когда встречаю физтехов, понимающих в математике или проге (а то в физике — физтехов с пмф!) меньше меня.
Если вы напишете жалобу, на неё посмотрят и исправят.

Если вы уйдёте, остальные 99 покупателей (у которых ничего не случится) из 100 продолжат ходить, и ваш голос рублём просто останется неуслышанным.
А как уязвимости определяются юридически? Нельзя ли неумение обработать слишком большой файл без вылета считать уязвимостью?
А если он закрыт от посторонних, то точно лежат!
Срочно запретить, заблокировать и посадить.
Никак. Да. Да. Никак. Да. Да.
По поводу третьей задачи. В некоторых языках можно делать так:
a = [b, b = a][0];

Правда, доп. переменная всё равно создаётся в памяти. Но не в языке.
Да с самого начала, дочка Мегафона ж.
Фотографическая память, может быть
А у Йоты его теперь и нет.
У старых абонентов остался, а вот новым… увы.
Можно читать научно-популярную литературу, например. Написана она обычна вполне как художественная, а цели чтения могут быть самыми разными.
Я так 1 том физики Фейнмана читал (он тоже вполне себе художественный).
Вы лучше не принимайте эту статью за абсолютную истину.
Так-так, а что мешает взять формулу Стирлинга за определение факториала нецелого числа?
Кроме, конечно, требования о непрерывности, которого у нас, впрочем, и нет.
Формула Стирлинга, думаю.
Возможно, он имел в виду «из-за таких как вы бла-бла-бла не могут выиграть… а ещё некоторые такие как вы имеют десятки страниц».
О, классно. Как раз бодаюсь с этой темой.

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

firststat.ru
https://habrahabr.ru/post/301894/
https://github.com/AlexeyManikin/domain_statistic

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность