Чи слід використовувати крапки з комою для розмежування висловлювань Scala?


9

Я звик розмежовувати заяви з точки з комою від Java, тому, природно, це роблю і в коді Scala. Я також вважаю, що код читається легше, тому що видно, де закінчується одне твердження і починається інше. Але багато разів, коли я розміщую фрагмент коду Scala на SO, код редагується лише для видалення крапки з комою.

  1. Потрібно використовувати крапки з комою чи ні? Чи є якісь "офіційні" вказівки чи стиль кодування?
  2. Чи бувають випадки, коли потрібні крапки з комою, інакше код неоднозначний?

5
Хіба Хаскелл тебе нічого не навчив? ; P видаліть непотрібний синтаксис, крапки з комою слід використовувати лише для розбиття кількох пропозицій / висловлювань на одному рядку
Jimmy Hoffa

@JimmyHoffa Haskell навчив мене, що синтаксис повинен бути красивим і послідовним :).
Петро Пудлак

2
Перша частина цього, чому я дратуюся, коли бачу фрагменти Scala ...
Джиммі Хоффа

Відповіді:


9

Офіційно "правильного" способу це не існує, але більшість практикуючих опускають крапки з комою куди завгодно (саме тому стільки людей рефлекторно видаляють крапки з комою).

Мова дуже намагається змусити вас забути про необхідність взагалі припиняти висловлювання. На жаль, це не дуже успішно, тому існують різні складні ситуації, коли крапки з комою, або додатковий набір дужок, або подібні «підказки» необхідні, щоб уникнути небажаної семантики. Такі ситуації майже досить рідкісні, що зазвичай вам не доводиться думати про них. Думки відрізняються від того, чи означає це, що вам слід пунктуаційно захищати (це я вважаю) чи ніколи не пунктувати, поки не зіткнетеся з проблемою (саме так думає більшість користувачів). Зрештою, це залежить від того, чи ви самоідентифікуєтесь як відступник чи зразковий громадянин.


Дякую, ви могли б навести приклад (або кілька :)) таких складних ситуацій?
Петро Пудлак

3
Я побоювався, що мене запитають ... Програмування в Scala перелічує декілька з них, які мене здивували, але на даний момент у мене немає книги, і я забуваю деталі. Це я і намагався зробити: якщо я міг згадати ці виняткові ситуації, це було б не так вже й погано, але, як це є, я завжди відчуваю себе невпевнено, чи можу я справді пропустити крапку з комою - тому я цього не роблю.
Кіліан Фот

Ага. Я жодного разу не стикався з ситуацією, коли пропущення крапки з комою в Скалі завдало мені шкоди. Я ніколи їх не включаю. Хоча я також запрограмував Scala лише на речі, схожі на хобі, тому, можливо, вона мене кусає рано чи пізно.
KChaloux

4

Наскільки ви хочете зрозуміти мови, якими ви користуєтесь? Ви хочете грати на свої сили чи ні? Синтаксис Scala заохочує чіткий і стислий код; декілька крайніх випадків, коли скористатися цим, викликає проблеми для аналізатора Scala, є повчальними (тобто ви дізнаєтесь більше про Scala, зустрівшись та навчившись їх уникати) та поступово виправляєтесь (наприклад, позначення суфіксу ). Захисне використання напівкрапки може означати, що вам ніколи не доведеться дізнаватися про ці проблеми, але чи дійсно ви бачите це як гарну річ? Виправлення цих проблем зазвичай мають інші наслідки, але ви пропустите ці можливості.

Інша думка полягає в тому, що, як зізнається Кіліан, більшість розробників Scala за замовчуванням опускають напівколонки. Як ви розраховуєте працювати з кодом інших людей, якщо ви уникаєте використання ідіоматичного Scala самостійно? Ви збираєтесь знайти це набагато важче, ніж це потрібно.

Я не можу наголосити на тому, що ці функції аналізатора Scala були обрані для заохочення чистого, повторно використовуваного та функціонального (у fp сенсі) коду. Візьміть як приклад синтаксис оператора infix; він заохочує розробників пропонувати заняття простими, одноцільовими методами, які добре складаються разом. Колекція бібліотеки Scala показує, як красиво це може працювати. Класично навчені Java розробники, які сприймають це, прагнуть виробити кращі звички та нові способи мислення щодо свого коду. Ті, хто дотримується всіх знайомих точок і дужок, пропустять. Я стверджую, що це справедливо і для тих, хто занадто боязко відмовлятися від напівколонки.


8
-1 так, будучи «змушеним» вивчати мову завдяки компілятору, gotchas вийшов із стилю C ++. Крім того, за твердженнями мало доказів, на які я хотів би відповісти з таким упередженим тоном.
Теластин

(1) Що сказав @Telastyn - якщо ви дійсно хочете вивчити мову таким чином, знайдіть кішку, вони люблять сидіти на клавіатурах, тому що вони піклуються про вашу освіту. (2) Опускаючи точку з коми не мають нічого спільного з чистим стилем або заохочуючи його - якщо що, скинувши з коми ховається той факт , що вони є окремі заяви , які виконуються послідовно, і , можливо , мають побічні ефекти. Залишаючи крапки з комою, ви знаєте про це, а тому віддаєте перевагу більш функціональному стилю. Тому рішення є чисто синтаксичним (наприклад, стиль, синтаксичний аналіз тощо).
Елі Барзілай

Хоча "змушений вивчати мову" не летить, "використання мови так, як її задумують автори" та "як використовують більшість інших розробників" є важливими орієнтирами. Підтримування послідовного стилю між декількома розробниками корисно. І з цієї відповіді, і з боку @Killan Foth's, керівники та більшість розробників, мабуть, розглядають крапку з комою як сторонні.
Сара Мессер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.