Полезные комбинации клавиш
- Crtl+Shift+E – показать все сцену целиком
- K – включает невидимые линии (но работает без нагрузки на видеокарту)
- Z – (по умолчанию перспектива 35º, рекомендуется установить 135)
Появился в Scala 2.10.0 и был портирован в Scala 2.9.3.
Как и в других языках Scala позволяет производить выбрасывание исключений:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
case class Customer(age: Int) class Cigarettes case class UnderAgeException(message: String) extends Exception(message) def buyCigarettes(customer: Customer): Cigarettes = if (customer.age < 16) throw UnderAgeException(s"Customer must be older than 16 but was ${customer.age}") else new Cigarettes |
Выброшенные исключения могут быть отловлены и обработаны с помощью блоков Try/Catch содержащих частично применяемые функции, которые указывают на типы, исключений, которые мы хотим обработать. Кроме того, в scala блок Try/Catch – это выражение которое может иметь результат.
Например, так:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
val youngCustomer = Customer(15) try { buyCigarettes(youngCustomer) "Yo, here are your cancer sticks! Happy smokin'!" } catch { case UnderAgeException(msg) => msg } |
Обработка ошибок классическим способом плохо сочетается с функциональным программированием, такой подход также очень плохо сочетается с параллелизмом. Например, в системе Акторов, если исключение происходит в другом акторе, то это означает, что Вы не можете поймать это исключение, так как оно находиться в другом потоке выполнения, но информация об ошибке не должна теряться.
Для решения таких задач в Scala предусмотрена возможность возвращать значение соответствующе ошибке из функций. Это достигается применением типа Try включенного в состав Scala. Кроме того, существует более обобщенный тип Either.
Иногда при работе с Java возникает NullPointerException, это происходит потому, что некоторые методы могут возвращать null, а не ожидаемое вами значение и такое поведение не проверяется в использующем такую функцию коде. Значение null часто используется для представления отсутствующего значения.
При этом подобные концепции встречаться и в других языках, более того некоторые языки (например: Groovy) имеют встроенную поддержку конструкций для работы с такими значениями.
Scala пошла другим путем и создала свой тип для представления того, что значение может быть или его может не быть это трейт Option[A].
Option[A] – это контейнер для значения типа A, при этом если значение присутствует, то Option[A] – это экземпляр Some[A] содержащий значение типа A . Если значение отсутствует то Option[A] – это объект None.
Такой подход обязует всех разработчиков использующих док учитывать такую природу значений в своем коде, при этом работа с таким типом контролируется компилятором, что делает невозможным не правильную трактовку значений.
Пускай есть некоторое меню
1 2 3 4 5 6 7 8 9 |
<div id="menu"> <ul> <li><a href="#">Главная</a></li> <li><a href="#">Joolma</a></li> <li><a href="#">WordPress</a></li> <li><a href="#">HTML5&CSS3</a></li> <li><a href="#">PHP</a></li> </ul> </div> |
Которое мы хотим зафиксировать при прокрутке.
В скала нет понятия оператор, есть понятие метода. Все операторы сводятся к вызовам методов.
Если метод имеет один параметр, то его можно вызвать:
S.indexOf(“eee”)
А можно вызвать как (упустив точку и скобки вокруг аргументов):
S indexOf “eee”
Если аргументов несколько, то можно упустить точку:
S indexOf (5,“eee”)
Если у метода нет параметров то можно упустить точку и/или скобки:
Вместо 7.toString() написать 7 toString или 7.toString