Справді важке питання. Сподіваюся, ваші відповіді виявлять щось хороше. Тим часом, ось каталог помилок чи інших прикрих речей, які я знайшов у коді для початківців. Існує деяке накладання на сторінку стилю Cal Tech, на яку вказує Корнель Кіселевич. Деякі мої поради настільки ж невизначені та марні, як "коштовні камені" HaskellWiki, але я сподіваюся, що принаймні це краща порада :-)
Відформатуйте свій код, щоб він містив 80 стовпців. (Досвідчені користувачі можуть віддати перевагу 87 або 88; крім того, що це вимагає).
Не забувайте , що let
палітурки і where
положення створюють взаємно рекурсивне гніздо визначень, НЕ послідовність визначень.
Скористайтеся перевагами where
, особливо їх здатністю бачити параметри функцій, які вже входять до сфери застосування (приємна невизначена порада). Якщо ви справді маркуєте Haskell, ваш код повинен мати набагато більше where
прив'язок, ніж let
прив'язок. Занадто багато let
прив'язок - ознака нереконструйованого програміста ML або програміста Lisp.
Уникайте зайвих дужок. Деякі місця, де зайві дужки особливо образливі, є
Навколо умови у if
виразі (клеймить вас як нереконструйованого програміста на С)
Навколо функціональної програми, яка сама є аргументом інфіксного оператора ( функціональна програма зв'язується сильніше, ніж будь-який інфіксний оператор . Цей факт повинен бути вписаний у мозок кожного Хаскеллера, приблизно так само, як і у нас, динозаврів, правило сканування справа наліво APL спалений.)
Розташуйте пробіли навколо інфіксних операторів. Поставте пробіл після кожної коми у літералі кортежу.
Віддайте перевагу пробілу між функцією та її аргументом, навіть якщо аргумент має дужки.
Використовуйте $
оператор розумно, щоб скоротити дужки. Пам’ятайте про тісний взаємозв’язок між $
infix і .
:
f $ g $ h x == (f . g . h) x == f . g . h $ x
Не забувайте про вбудовані Maybe
та Either
типи.
Ніколи не пишіть if <expression> then True else False
; правильна фраза - просто <expression>
.
Не використовуйте head
або tail
коли ви могли б використовувати відповідність шаблону.
Не забувайте про склад функції за допомогою оператора інфіксних крапок.
Обережно використовуйте розриви рядків. Розриви рядків можуть підвищити читабельність, але є компроміс: Ваш редактор може відображати лише 40–50 рядків одночасно. Якщо вам потрібно прочитати і зрозуміти велику функцію відразу, не можна надмірно використовувати розриви рядків.
Майже завжди віддають перевагу --
коментарям, які переходять до кінця рядка, перед {- ... -}
коментарями. Коментарі в дужках можуть бути доречними для великих заголовків - і все.
Дайте кожній функції верхнього рівня явний підпис типу.
По можливості вирівняйте --
рядки, =
знаки і навіть дужки та коми, які трапляються в сусідніх рядках.
Під впливом, як я переживаю центральний GHC, я дуже м'яко віддаю перевагу використанню camelCase
для експортованих ідентифікаторів та short_name
з підкресленнями для локальних where
змінних чи let
змінних.