Перерва та продовження:
У розмові про Scala Мартін Одерський дав 3 причини не включати перерву чи продовжувати на слайді 22:
- Вони трохи імперативні; краще використовувати багато менших функцій.
- Питання, як взаємодіяти із закриттями.
- Вони не потрібні!
Потім він каже: "Ми можемо підтримувати їх суто в бібліотеках". На слайді 23 він дає код, який реалізує break
. Хоча я не дуже добре знаю Scala, щоб бути впевненим, схоже, що короткий фрагмент на цьому слайді - це все, що потрібно для реалізації break
, і це continue
може бути реалізовано в коді, який так само короткий.
Можливість реалізувати подібні речі в бібліотеках спрощує основну мову.
У "Програмуванні в Scala, друге видання", Мартіна Одерського, Lex Spoon та Білла Веннерса подано таке пояснення:
Можливо, ви помітили, що жодної згадки про break
або continue
. Скала залишає ці команди, оскільки вони не добре поєднуються з функціональними літералами ... Зрозуміло, що continue
означає всередині while
циклу, але що це означатиме всередині функціонального літералу? ... Існує багато способів програмування без break
і continue
, якщо ви скористаєтесь функціональними літералами, ці альтернативи часто можуть бути коротшими за вихідний код.
Повернення:
Повернення можна вважати трохи імперативним за стилем, оскільки return - це дієслово, команда робити щось. Але їх також можна побачити суто функціональним / декларативним способом: вони визначають, що таке повернене значення функції (навіть якщо у функції з кількома поверненнями вони дають лише часткове визначення).
У цій же книзі вони говорять про return
:
За відсутності явного return
твердження, метод Scala повертає останнє значення, обчислене методом. Рекомендований стиль методів насправді не дозволяє мати явні, а особливо множинні, return
заяви. Натомість розгляньте кожен метод як вираз, який дає одне значення, яке повертається.
Методи закінчуються і повертають значення, навіть якщо return
оператор не використовується, тому з закриттям не може виникнути проблем, оскільки в іншому випадку закриття не буде працювати періодом.
Також не може бути проблем зв'язатись з функціональними літералами, оскільки функція повинна повертати значення.
break
і меніcontinue
потрібна додаткова техніка очищення. OTOHreturn
- це спосіб упорядкувати припинення функції, і будь-яка техніка для очищення вже є.