Англійська для розробників Scala

Вивчіть англійську лексику, яка потрібна розробникам Scala для пояснення класів випадків, збігів шаблонів, пояснень, підтверджень і хвостової рекурсії.

Scala поєднує об’єктно-орієнтовані та функціональні ідіоми, і пояснення переглядів коду або рішення про дизайн англійською часто означає бути точним про те, до якої парадигми належить даний елемент. Цей набір словників містить п’ ять термінів, які постійно зустрічаються у командах Scala.

Ключовий словник

Case class — клас, який автоматично отримує незмінну структуру даних зі сформованими equals, hashCode, toString, і підтримкою відповідності шаблонів, зазвичай використовується для моделювання даних, а не поведінки.

  • “Модельуйте це як клас випадків замість звичайного класу — ми отримуємо рівність і гарний друк безкоштовно, і це підключається прямо до відповідності шаблонів.” *

** Збіг шаблонів ** — структура керування, яка надає вам змогу деструктурувати і розгалужити за формою значення, подібна до команди switch, але набагато більш виразна, оскільки вона може збігатися за типом, структурою і захистом одночасно.

  • “Замість ланцюга перевірок if- else, використовуйте збіг шаблонів для обробки кожного випадку цієї запечатаної ознаки безпосередньо.” *

** For- comprehension ** — синтаксичне цукор над map, flatMap і filter, що дозволяє вам писати послідовності монадичних операцій (наприклад, Option, List або Future) у читабельному, імперативному стилі. “Цей вкладений flatMap ланцюг важко прослідкувати — переписати його як for-comprehension і він читається майже як серія простих завдань.”

** Given instance ** — механізм Scala 3 (наступник implicits) для автоматичного надання значення під час компіляції на основі його типу, зазвичай використовується для класів типів, таких як кодери Ordering або JSON. “Ми не передаємо кодер явно — даний випадок для JsonEncoder[User] розв’язується автоматично на сайті виклику.”

** Хвостова рекурсія ** — рекурсивний виклик, який є останньою операцією у функції, яку компілятор може оптимізувати у петлю, щоб вона не збільшувала стек викликів, перевіряється за допомогою анотації @tailrec. “Переписати цю рекурсивну суму так, щоб рекурсивний виклик був у хвості, а потім позначити її @tailrec, щоб компілятор гарантував, що вона не розірве стек.”

Звичайні фрази

  • Чи є це класом випадків, чи дійсно йому потрібна логіка нетипової рівності?
  • Чи можемо ми замінити цей ланцюг if-else з шаблоном, що збігається на запечатаному рисі?»
  • Чи може цей ланцюг операцій з опціонами бути більш зрозумілим?
  • Чи є в обсязі даний випадок для цього типу, або нам потрібно його визначити?»
  • Чи є ця функція насправді хвостом рекурсивною, або вона переповнить стек на великому вхідному сигналі?

Приклади висловлювань

Перегляд моделі даних: “Зверніть це в клас випадків — нам потрібна рівність значення, і зараз два ідентичні випадки не вважаються рівними.”

Пояснення рефактору:

  • “Ми замінили вкладені виклики flatMap на for- understanding, отже логіка обробки параметрів читає згори вниз замість вкладання на три рівні глибше.” *

Помилка зневадження під час збирання: “Ця помилка означає, що в обсязі не знайдено екземпляра для Show[Order] — нам потрібно або імпортувати його, або визначити його самостійно.”

Професійні поради

  • Типовий клас case class під час моделювання незмінних даних — згадування його за назвою у огляді свідчить про те, що ви думаєте про рівність і підтримку збігу з шаблонами, а не лише про зберігання даних.
  • Запропонувати ** шаблонне збігнення ** над довгими ланцюгами if- else під час роботи з запечатаними характеристиками — це більш ідіоматичне і перевірене на вичерпність компілятором.
  • Рекомендувати для-зрозуміння, особливо коли вкладені flatMap / map ланцюги шкодять читабельності — це стандартна відповідь Scala на «це важко слідкувати»
  • Будьте точним щодо розв’ язання помилок стилю « не знайдено неявного » за допомогою ** даного екземпляра ** — надання точних назв класу і типу допоможе всій команді швидше діагностувати помилку.
  • Коли функція обробляє великі колекції рекурсивно, запитайте, чи це справді ** tail recursion **, перш ніж приймати її за безпечну — це ловить вади переповнення стека, перш ніж вони потраплять у виробництво.

Практичні вправи

  1. Пояснити, чому клас case зазвичай є кращим за звичайний клас для представлення незмінних даних.
  2. Описати, як збіг шаблону з запечатаною ознакою допомагає компілятору виявити відсутні випадки.
  3. Напишіть речення, у якому поясните співробітнику команди, чому рекурсивна функція має бути хвостовою рекурсивною, щоб безпечно обробляти дуже великий список.

На практиці: Навігація Nuance - професійна комунікація для Scala розробників

Для не-рідних носіїв, які вивчають професійну англійську в екосистемі Scala, це не просто про переклад технічних термінів; це про розуміння * як * ці терміни використовуються в контексті. Основний словниковий запас - класи випадків, збіги шаблонів, для розуміння - є цінним, але оволодіння фразами навколо них є настільки ж важливим для ефективної співпраці і значного вкладу в команду розробників. Погане повідомлення про перенесення або коментар перегляду коду може звести нанівець ваші зусилля так само ефективно, як і помилка у вашому коді. Розглянемо деякі типові сценарії і те, як ви можете підійти до них з точністю.

Одна з найчастіших ситуацій включає отримання коментаря перегляду коду. Часто початкова реакція не є досконало сформованою. Ви можете побачити щось на зразок: « Це може бути зручніше для читання ». Хоча це технічно точніше, але не надає вам практичних рекомендацій. Краще було б відповісти: «Чи можете ви розібратися, яку частину цього коду ви вважаєте менш читабельною? Зокрема, чи є якісь області, де логіка складна або могла б отримати користь від додаткових коментарів?” Зауважте зміну - запитайте про деталі, продемонструйте готовність зрозуміти і поліпшити, а не просто приймати неясну критику. Аналогічно, при написанні опису Запиту на завантаження, чіткість щодо того, чому ви робите зміни, є надзвичайно важливою. Замість того, щоб сказати « Виправлено ваду », спробуйте « Впроваджено виправлення для [особливої проблеми] за допомогою [коротко описати рішення] — це покращує [метрику/ переваги] »

Інша область, яка потребує ретельної фрази, обертається навколо обговорення вибору дизайну. Потужні можливості Scala, такі як імплікати та хвостова рекурсія, можуть бути важко пояснити коротко. Використання точної мови є ключовим. Наприклад, замість того, щоб сказати « Я використовував неявне перетворення », ви можете сказати: « Я використовував неявне перетворення, щоб спростити інтеграцію з [зовнішньою бібліотекою/ системою], уникнути стандартного коду і зменшити потенційні помилки типів ». Це демонструє глибше розуміння того, * чому * ви обрала цей підхід — а не лише те, що ви застосували певну можливість. Крім того, пам’ ятайте, що розробники Scala часто використовують технічний жаргон у неформальному контексті; активно слухайте контекстні підказки, щоб визначити, чи є ваше пояснення зрозумілим, або ж потрібні додаткові пояснення. Не припускайте, що всі розуміють нюанси, скажімо, «мономорфізації», не пояснюючи її вплив на продуктивність.

Наконец, будь внимателен к тону. Навіть у технічній дискусії важливий професіоналізм. Уникайте надмірно агресивної або оборонної мови. Розглядайте розбіжності як можливість для навчання і вдосконалення. Просте визнання, наприклад: «Це вірний аргумент; я не розглядав це» може пройти довгий шлях до сприяння продуктивному діалогу. Це демонструє повагу до досвіду ваших колег і готовність адаптувати ваш підхід.

Ось приклад використання grep для пошуку певних шаблонів у коді Scala:

grep -rnw "case class MyData {\n    val value: Int\n}" src/main/scala/*

За допомогою цієї команди можна рекурсивно (-r ) шукати рядок « case class MyData { \ n val value: Int\ n} » у всіх файлах у каталозі src/main/scala, показуючи відповідні рядки і шляхи до файлів.

Поширені запитання

Про що ця стаття "Англійська для розробників Scala"?

Вивчіть англійську лексику, яка потрібна розробникам Scala для пояснення класів випадків, збігів шаблонів, пояснень, підтверджень і хвостової рекурсії.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Англійська для розробників Scala"?

Приблизно 7 min.