Показаны сообщения с ярлыком код. Показать все сообщения
Показаны сообщения с ярлыком код. Показать все сообщения

What is programming?


Код на русском языке

Один из плюсов написания кода на русском языке - это то, что создается контраст между кодом написанным мной и кодом библиотек, который написан на английском языке. Легко понять, что ты написал сам, а что являются частью библиотеки.

Проблемы к которым приводят глобальные переменные

К примеру у вас есть такой модуль в файле toolbar.js:

var toolbarModule = {
    toolbar: undefined,
    initToolbar: function (cell) {
        toolbarModule.toolbar = createToolbar();
    }
};

Используете вы этот модуль просто подключением файла toolbar.js.

toolbarModule.initToolbar(c);

Главный минус этого кода в том, что если вам понадобится еще один тулбар (например, для другого таба), то оба они будут делить переменную toolbarModule.toolbar и произойдет коллизия.

Чтобы решить эту проблему, нужно использовать либо классы, экземпляры, которых инкапсулируют в себе свои переменные. Либо нужно сделать так, чтобы всё нужное для функции передавалось через ее аргументы, и чтобы всё нужное от функции возвращалось в качестве результата.

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

Мне больше нравится функциональный подход, когда "весь мир" передается в функцию. Классы как структуры больше подходят для хранения данных. Хотя с другой стороны, если функция использует другие функции, то проще их объединить в класс.

Протаскивание аргументов через цепочку функций

Один из нюансов функционального программирования в том, что всю информацию о внешнем мире функция получает через свои аргументы. Чего нет в аргументах, того нет вообще. Такой подход уменьшает число ошибок связанных с глобальными переменными. Такие функции легче тестировать, потому что все их зависимости передаются в функцию через аргументы и не нужно создавать какую-то внешнюю среду для функции.

При написании функций, часто бывает такая ситуация, что приходится протаскивать какой-то аргумент через несколько функций верхнего уровня до конечной функции.

foo2(arg);

function foo2(param) {
    foo3(param);
}

function foo3(param) {
    foo4(param);
}

Мне кажется, что это ошибка проектирования и связана она с тем, что не происходит возврата значения наверх из глубинных функций. Если функция foo4 располагает какими-то данными, сложив которые с аргументом arg надо произвести над всем этим какую-то операцию, то тащить в функцию foo4 аргумент arg неправильно. Нужно наоборот через return обеспечить всплытие данных foo4 наверх, и там наверху сложив их с arg сделать нужную операцию.

foo2_res = foo2();
doSomething(arg, foo2_res.foo3_res.foo4_res)

function foo2() {
    return { foo3_res: foo3() };
}

function foo3() {
    return { foo4_res: foo4() };
}

Протаскивая через функцию косвенные аргументы, вы размываете фокус и специализацию этой функции. Т.е. она размывается и теряет свое узкое назначение.

Настройка Vim на работу с Perl, Python2, Python3, Ruby, TCL, Lua или Racket/MzScheme

If you need a dynamic interface to Perl, Python2, Python3, Ruby, TCL, Lua or Racket/MzScheme,
make sure you also install the following. Vim will work without it, but some Plugin
might need this additional dependency. (e.g. Gundo needs a working Pyhton2 installation,
Command-T needs a working Ruby installation and Neocomplete needs a working Lua
installation). This means, those interpreters have to be installed in addition to Vim.
Without it Vim won't be able to use that feature! You can find those interperters here:
Make sure that you install the same architecture (32bit/64bit) that matches your Vim installation.


источник

Среды разработки и текстовые редакторы для разработки на Python

Комментарии для документирования кода Objective-C

В настройках Xcode есть такие интересные вещи как Documentation Markup и Documentation Markup Keywords.
Из этого следует, что Xcode поддерживает комментарии для описания кода.

Я советую для Documentation Markup Keywords выбрать более темный оттенок чтобы можно было различать ключевые слова в комментариях документирующих код.

Как сделать статический анализ кода в Xcode-проекте с помощью OCLint

Для начала нужно установить OCLint с помощью Homebrew.

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install https://gist.githubusercontent.com/TonyAnhTran/e1522b93853c5a456b74/raw/157549c7a77261e906fb88bc5606afd8bd727a73/oclint.rb

Далее нужно настроить .bash_profile.
$ cd ~
$ touch .bash_profile
$ open -e .bash_profile

В .bash_profile нужно добавить следующее:
OCLINT_HOME=/usr/local/Cellar/oclint/0.8.1
export PATH=$OCLINT_HOME/bin:$PATH

$ . .bash_profile

Подробнее об установке можно почитать тут:

OCLint можно использовать из командной строки:

Золотой фонд программерской литературы по версии ][. Не для чайников!


  • С. Макконнелл «Совершенный код»
  • М. Фаулер «Рефакторинг»
  • Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес «Приемы объектно-ориентированного проектирования. Паттерны проектирования»
  • Р. Мартин «Чистый код»
  • Д. Кнут «Искусство программирования»
  • Э. Хант, Д. Томас «Программист-прагматик»
  • К. Ларман «Применение UML 2.0 и шаблонов проектирования»
  • М. Фаулер «Архитектура корпоративных программных приложений»
  • К. Бек «Экстремальное программирование»
  • К. Бек «Экстремальное программирование. Разработка через тестирование»
  • Э. Эванс «Предметно-ориентированное проектирование»
  • Ф. Брукс «Мифический человеко-месяц»