Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Журнальне програмування, JavaScript

with 3 comments

Я вже якось писав що без написання коментарів можна обійтись, якщо використовувати рефакторинг “extract method”. Це не означає що коментарі не варто писати, це означає що їх потрібно писати на іншому рівні абстракції і бажано в мові предметної області. Як цього навчитись – складне питання. Щоправда недавно вичитав в пості Дмитра Сіренка на Google+ ідею про те що коментарі краще робити виводом в якийсь лог.

Ця ідея для мене нова і мені дуже сподобалась. По-перше це допоможе краще думати про що ж все таки писати в коментарі. Про те що відбувається:

Якби програмки мали Твіттер...

Якби програмки мали Твіттер…

А що ще краще – такі коментарі повинні сильно допомогти в розумінні коду JavaScript, тому що в JavaScript код виконується як реакція на якусь подію, тому передбачити що за чим виконуватиметься – важко. А при таких коментарях – відкрили термінал, і читаємо коментарі в хронологічному порядку виконання програми:

dragExcercise plugin started for Object[div.exercise, div.exercise] exercises.js (рядок 8)
heißen Ordnung exercises.js (рядок 22)
content put into element exercises.js (рядок 28)
incorrect variant exercises.js (рядок 35)
heißen mir exercises.js (рядок 22)
content put into element exercises.js (рядок 28)
incorrect variant exercises.js (рядок 35)
leaves some other element exercises.js (рядок 45)
mir mir exercises.js (рядок 22)
element already occupied exercises.js (рядок 24)

Так працює код вправ для інтерактивного підручника німецької.

Коментарі записуються як параметри функції c яка описується наступним чином:

    //var c = function() {}; // for production
    var c = console.log.bind(console); // for debug

З цим є дві проблеми. Перша – навіть якщо не забути про те що треба переставити комент, на продакшні буде зайвий виклик функції. Друга – функція підсвічується в редакторі як функція, а не як коментар. Другу можна виправити відредагувавши файл з описом синтаксису мови. Це просто. Першу проблему хотілось би виправити макросами в стилі С. З директивами IFDEBUG, та двома режимами білду – debug та release.

Проблеми можна проігнорувати, а можна подумати про препроцесор. Який коментарі виду

    //-> message

перетворюватиме на

    console.log('message');

в дебаг режимі, і прибиратиме їх з реліз версії коду. Але препроцесори вже є, наприклад той же CoffeScript. Тільки от не знаю чи важко на ньому таке реалізувати… Може варто спробувати зразу осідлати ClojureScript?

Advertisements

Written by bunyk

Липень 6, 2013 at 12:56

Відповідей: 3

Subscribe to comments with RSS.

  1. О, цікаво.

    Щодо логів — тут є одна неприємність: навіть у порівнянно невеликому проекті (~1kloc на C) можна наплодити коментів стільки, що читати лог стає важко. Рятує те, що в сішечці є препроцесор, і, відімкнувши якийсь лог, можна отримати програму взагалі без цих викликів. І довелось завести кілька різних логів, що теж потребує хоч якогось продумування.

    Офтоп: жаль, що ти не постиш нові пости тут у Г+ (чи я просто цього не бачу?), я уже потім їх знаходжу. Думаю, навіть просто тицьнути +1 під постом було б достатньо.

    dmytrish

    Липень 24, 2013 at 13:19

    • Ну там далі фільтрувати їх якимись grep-ами. 🙂

      І ти не повіриш, але мені часто лінь тиснути +1. Завжди сподіваюсь що це робитимуть читачі. 🙂

      bunyk

      Липень 24, 2013 at 21:36

  2. Я, звичайно, джаваскрипт бачив всерйоз три з половиною раза в житті, але якщо в ньому є eval, то чи не можна написати шаблонізатор/препроцесор джаваскрипта на джаваскрипті?

    dmytrish

    Серпень 10, 2013 at 14:48


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: