Перерва та продовження:
У розмові про 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- це спосіб упорядкувати припинення функції, і будь-яка техніка для очищення вже є.