7 март 2016 г.

CODE TIPS #1 - Контра-интуитивната индентация и скобите в LISP

OK, наскоро започнах да изучавам функционален език за програмиране (LISP) и ми направи впечатление следното нещо:

Толкова. Много. Скоби.


Credits: XKCD


Зачудих се как е възможно подобен код да е четим за когото и да било. Вече очевидно никой не се интересува от това... :(

Първото ми предположение беше да подредя кода както бих го подредил в стил "всеки друг език за програмиране":

BAD
  1. ;; Well, ain't that cute...
  2. (defun f (x)
  3.     (cond
  4.         ((= x 1337) x)
  5.         (nil)
  6.     )
  7. ) ; ... but it's WRONG.

Оказа се, че конвенцията не само е против излишните празни места, но дори редове само с по една затваряща скоба на тях се считат за лоша практика. Стига де!

Имайки това предвид, за по-удачен вариант се смята следната версия:

GOOD
  1. (defun f (x)
  2.   (cond ((= x 1337) x)
  3.         (nil)))

Основната разлика:
- по 2 интервала на нов ред
- аргументите се подреждат един под друг
- затварящите скоби не се изолират на цял ред

Индентацията добре, но скобите защо така?? Обяснението, което намерих, е че опитните Lisp програмисти не обръщат внимание на броя на скобите, а се съсредоточават върху това, което се случва между тях. И втората причина е, че просто се цели минимизирането на редове код (което според мен е по-рационалната причина).

Странно, но ще свикна...

Няма коментари:

Публикуване на коментар