код ниндзя
Учиться, не думая, бесполезно, думать, не учась, опасно.
- Конфуций
Программисты-ниндзя прошлого использовали эти приемы, чтобы оттачивать умы тех, кто сопровождает код.
Гуру код-ревью ищут их в задачах тестирования.
Некоторые разработчики-новички иногда даже лучше используют их, чем программисты-ниндзя.
Прочтите эту статью и узнайте, кто вы — ниндзя, новичок или рецензент кода?
Примечание: обнаружен сарказм
Многие пытаются пойти по стопам ниндзя. Только очень немногие преуспели.
Простота - душа мудрости
Старайтесь, чтобы ваш код был как можно короче. Покажи, какой ты умный.
В программировании используйте некоторые умные функции языка программирования.
Например, взгляните на этот тернарный оператор'?'
:
// 从一个著名的 JavaScript 库中截取的代码
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
Круто, правда? Если вы напишете это, те, кто увидят эту строку кода и попытаются понятьi
Разработчики того, что значение, будет иметь "счастливое" время. Тогда оно придет к вам за ответами.
Скажи ему, что всегда лучше быть короче. Направьте его на путь ниндзя.
одна буквенная переменная
Дорога анонимна. Единственный способ сделать хорошие кредиты и добиться успеха.
- Лао-Цзы (Дао Дэ Цзин)
Еще один способ ускорить программирование — везде использовать однобуквенные имена переменных. Напримерa
,b
илиc
.
Короткие переменные — это как настоящие ниндзя в лесу, и их нельзя найти за один раз. Никто не может найти его через функцию «поиск» редактора. Даже если бы кто-то и знал, он не смог бы «расшифровать» имена переменных.a
илиb
Что именно это означает.
... но за одним исключением. Настоящий ниндзя никогда бы"for"
используется в циклеi
как счетчик. Его можно использовать где угодно, но не здесь. Оглядевшись вокруг, можно найти много необычных букв. Напримерx
илиy
.
Как здорово использовать необычную переменную, особенно в теле цикла длиной в 1-2 страницы (можно и длиннее написать, если получится). Если кто-то захочет изучить внутреннюю реализацию цикла, ему сложно быстро найти переменнуюx
На самом деле это счетчик циклов.
использовать сокращения
Если в правилах команды запрещены однобуквенные и двусмысленные имена - сокращайте имена, используйте аббревиатуры.
так:
-
list
->lst
-
userAgent
->ua
-
browser
->brsr
- ……Ждать
Только люди с действительно хорошей интуицией могут понять такое название. Держите все как можно короче. Только действительно ценные люди могут поддерживать разработку такого кода.
Парить высоко, абстракция.
Щедрая без углов,
позднее цветение,
Громкий голос,
Слон невидим.- Лао-Цзы (Дао Дэ Цзин)
При выборе имени старайтесь использовать как можно более абстрактные слова. Напримерobj
,data
,value
,item
а такжеelem
Ждать.
-
Идеальное имя для переменной
data
.Используйте его везде, где только можно. Действительно, каждая переменная имеет местоданные,Верно?……но
data
Что делать, если вы уже использовали его? можешь попытатьсяvalue
, это также очень распространено. Ведь переменная всегда будет иметьСтоимость,Верно? -
Переменные именуются в соответствии с их типом:
str
,num
...Попробуйте. Новички могут удивиться — действительно ли эти имена работают на ниндзя? На самом деле полезно!
С одной стороны, имена переменных все же имеют какое-то значение. Он говорит, что находится внутри переменной: строка, число или что-то еще. Но когда посторонний человек попытается разобраться в коде, он с удивлением обнаружит, что достоверной информации на самом деле нет! В конце концов, вы не можете изменить код, о котором думали.
Мы можем легко увидеть тип значения с помощью отладки кода. Но как насчет значения имен переменных? Какую строку или число он хранит?
Если вы не думаете достаточно глубоко, вы не можете понять это.
-
...но что, если вы не можете найти больше таких имен?Вы можете добавить номер:
data1, item2, elem5
...
Обратите внимание на тест
Только очень внимательный программист может понять ваш код. Но как проверить?
Один из способов - использовать похожие имена переменных, напримерdate
а такжеdata
.
Смешайте их как можно лучше.
Быстро прочитать такой код невозможно. А если опечатка... эм... мы тут застряли надолго, пора ужинать (⊙v⊙)
умный синоним
Сложнее всего найти черную кошку в темной комнате, особенно если кошек нет.
- Конфуций
правильнотот самыйчто-то использоватьаналогичный, может сделать жизнь интереснее, а может проявить свой творческий потенциал.
Например, префиксы функций. Если функция функции заключается в отображении сообщения на экране, имя может начинаться сdisplay…
начало, напр.displayMessage
. Если другая функция отображает что-то другое, например имя пользователя, имя может начинаться сshow…
начать (напр.showName
).
Подразумевается, что между этими функциями есть тонкие различия, которых на самом деле нет.
Заключите сделку с другими ниндзя в команде: если Чжан Сан начнет свой код сdisplay...
чтобы запустить функцию «отображение», Ли Си может использоватьrender..
, Ван Эр может использоватьpaint...
. Вы можете видеть, насколько интересным и разнообразным становится код.
...теперь хет-трик!
Для двух функций с очень важными отличиями — используйте один и тот же префикс.
Например,printPage(page)
Функция будет использовать принтер.printText(text)
Функция будет отображать текст на экране. Пусть незнакомый читатель подумает: «ИмяprintMessage(message)
Где функция поместит сообщение? Принтер или экран? ". Чтобы код действительно сиял,printMessage(message)
Сообщение должно выводиться в новое окно!
повторно использовать имя
впервые прославился,
также имеет имя,
Муж тоже будет знать конец,
Знание не может быть опасным.- Лао-Цзы (Дао Дэ Цзин)
Только добавляют новые переменные, когда это абсолютно необходимо.
В противном случае повторно используйте существующее имя. Просто запишите новое значение в переменную.
В функции старайтесь использовать только переменные, переданные в качестве параметров.
Это затрудняет определение того, каково сейчас значение этой переменной. Тоже не знаю, откуда. Цель состоит в том, чтобы улучшить интуицию и память человека, читающего код. Человеку с меньшей интуицией пришлось бы анализировать код построчно, отслеживая изменения в каждой ветке кода.
Усовершенствованная версия этого метода заключается в скрытой замене его значения в цикле или функции.
Например:
function ninjaFunction(elem) {
// 基于变量 elem 进行工作的 20 行代码
elem = clone(elem);
// 又 20 行代码,现在使用的是 clone 后的 elem 变量。
}
хочу использовать во второй половинеelem
из программистов были бы поражены... только во время отладки, после проверки кода, он обнаружит, что использует клонированные переменные!
Часто видя такой код, он может стать фатальным даже для матерых ниндзя.
подчеркнуть веселье
добавить подчеркивание перед именем переменной_
а также__
. Например_name
а также__value
. Было бы здорово, если бы вы знали, что они означают. Или добавьте эти подчеркивания просто для удовольствия и не имеют никакого значения, даже лучше!
Подчеркивание можно описать как убийство двух зайцев одним выстрелом. Во-первых, код становится длиннее и менее читаемым, а вашим коллегам-разработчикам может потребоваться много времени, чтобы понять, что означает подчеркивание.
Умные ниндзя будут использовать символы подчеркивания в одном месте кода, а затем намеренно избегать их в других местах. Это делает код более хрупким и увеличивает вероятность ошибок в коде в будущем.
покажи свою любовь
Покажите всем свои богатые эмоции! картинаsuperElement
,megaFrame
а такжеniceItem
Такое имя обязательно вдохновит читателей.
На самом деле, с одной стороны, похоже, что-то написано:super..
,mega..
,nice..
. Но с другой стороны - никаких подробностей не приводится. Человеку, читающему код, возможно, придется потратить час или два оплачиваемого рабочего времени на размышления над скрытым смыслом.
Перекрывающиеся внешние переменные
Те, кто в свете, ничего не видят в темноте,
Те, кто в темноте, могут видеть дела района Минчжун.—— Гуань Иньзи
Используйте одно и то же имя для переменных внутри и вне функции. Это легко, не нужно думать о новых именах.
let user = authenticateUser();
function render() {
let user = anotherValue();
...
...许多行代码...
...
... // <-- 某个程序员想要在这里使用 user 变量……
...
}
в исследованияхrender
Программисты внутреннего кода могут не заметить, что есть внутренняя переменнаяuser
экранированный снаружиuser
Переменная.
Тогда он будет считатьuser
все еще внешняя переменная, а затем используйте ее,authenticateUser()
Результат... ловушка вышла! привет отладчик...
Побочные эффекты повсюду!
Некоторые функции выглядят так, будто ничего не меняют. НапримерisReady()
,checkPermission()
,findTags()
... предполагается, что они выполняют вычисления, находят и возвращают данные без изменения каких-либо данных, кроме самих себя. Это называется "без побочных эффектов".
Весьма удивительный прием — добавить к ним «полезное» действие в дополнение к основной задаче.
Когда ваш коллега видит, что его назвалиis..
,check..
илиfind...
Когда его функция что-то меняет, у него должно быть растерянное выражение лица, что расширяет границы вашего разума.
Еще одним сюрпризом является возврат нестандартных результатов.
Покажите свои оригинальные идеи! позволь позвонитьcheckPermission
когда возвращаемое значение неtrue/false
А скорее сложный объект, содержащий результаты проверки.
те, кто пытается писатьif (checkPermission(..))
разработчиков, будут удивляться, почему это не работает. Скажите им: «Идите читайте документацию». Тогда дайте эту статью.
Мощная функция!
Проспект широкий,
Он может быть левым или правым.- Лао-Цзы (Дао Дэ Цзин)
Не ограничивайте функции тем, что написано в их именах. Расширьте его немного.
Например, функцияvalidateEmail(email)
Может (помимо проверки корректности сообщения) выводить сообщение об ошибке и просить повторно ввести сообщение.
Дополнительное действие не должно быть очевидным в имени функции. Настоящий ниндзя сделал бы их еще и не очевидными в коде.
Объединение нескольких действий вместе защищает ваш код от повторного использования.
Представьте себе другого разработчика, который просто хочет проверять почтовые ящики и не хочет выводить никакой информации. ваша функцияvalidateEmail(email)
Это неправильно для него. Так что он не будет прерывать ваши размышления, спрашивая вас об этих функциях.
Суммировать
Все приведенные выше "предложения" взяты из реального кода... иногда написанного опытными разработчиками. Возможно, более опытный, чем вы;)
- Следуйте нескольким из них, и ваш код будет полон сюрпризов.
- Следуйте большей его части, и ваш код действительно будет вашим кодом, и никто не захочет его менять.
- Следуйте всем, и ваш код станет ценным примером для молодых разработчиков, ищущих вдохновения.
Эта статья была впервые опубликована в общедоступной учетной записи WeChat «Technology Talk». Добро пожаловать в WeChat, ищите и подписывайтесь, и подписывайтесь на более интересный контент.
Учебники по современному JavaScript: учебные пособия по современному JavaScript с открытым исходным кодом, от начального до продвинутого.Рекомендовано официальной документацией React, учебным пособием по JavaScript вместе с MDN..
Читайте онлайн бесплатно:zh.javascript.info
Отсканируйте приведенный ниже QR-код, подпишитесь на общедоступную учетную запись WeChat «Technology Talk» и подпишитесь на более интересный контент.