скала. Программирование на Scala базовые концепции
Скачать 1.69 Mb.
|
Программирование на ScalaБАЗОВЫЕ КОНЦЕПЦИИI. Условные выражения и циклыIf expression Тривиальный синтаксис, схожий с Java/C#/C++ Условный переход представляет собой выражение (expression) Сравнение тернарного оператора Java и условного выражения Scala: I. Условные выражения и циклыfor loop В Scala существует несколько вариантов синтаксиса объявления цикла for Так, например, Scala поддерживает синтаксис вида for (element <- iterable) I. Условные выражения и циклыfor loop Использование генераторов в циклах for Использование “гардов” (guards) в циклах for I. Условные выражения и циклыfor loop Конструкция for-yield; for как выражение (expression) for эквивалентен foreach: for-yield эквивалентен map: I. Условные выражения и циклыwhile/do-while Синтаксис while/do-while: while/do-while в Scala – это выражение (expression), которое возвращает тип Unit II. Операторытипы операторов, приоритет операторов Арифметические операторы: Операторы сравнения: Логические операторы: Битовые операторы: Операторы присвоения: + - * / % == != > < >= <= && || ! & | ^ << >> >>> = += -= *= /= %= <<= >>= &= ^= |= Приоритет операторов (от высшего к низшему): () [] ! * / % + - >> << >>> > >= < <= == != & ^ | && || = += и т.п. , ; Прочие: () [] , ; II. Операторыоператор=метод, перегрузка операторов Инфиксное (infix) определение операторов: Перегрузка операторов: В Scala оператор – это метод III. Базовые типыперечисление примитивных типов и String, неявное преобразование типов Byte 8 бит -128…127 Short 16 бит -215…215-1 Int 32 бит -231…231-1 Long 64 бит -263…263-1 Float 32 бит IEEE 754 Double 64 бит IEEE 754 Char 16 бит UTF-16 неявное преобразование типов без потерь неявное преобразование типов с потерями Boolean JVM true false Примитивные типы в Scala и тип String: String not primitive java.lang.string III. Базовые типыобъявление переменных типа, явное преобразование типов, литералы Явное преобразование: toByte toShort toInt toLong toChar toFloat toDouble toString Присвоение по умолчанию: Целое число = Int Дробное число (с символом “.”, например, 3.0) = Double Литералы: prefix 0x = hex integer postfix L = Long postfix F = Float ‘’ = Char “” = String IV. Функцииобъявление функций Сигнатура функции: Функции могут быть объявлены внутри сущностей class, trait, object, а также внутри других функций Функции могут быть анонимными Функции могут содержать параметры по умолчанию IV. Функцииименованные аргументы, каррирование (currying) Именованные аргументы. Можно поимённо передавать аргументы в функцию, при этом можно нарушать порядок аргументов Каррирование (currying). Можно определять более одного списка аргументов функции IV. Функциифункции высшего порядка Функции могут выступать в качестве параметра других функций Функции могут возвращать другие функции Такие функции называются функциями высшего порядка Сигнатура функции-аргумента: IV. Функцииcall-by-value, call-by-name call-by-value передаваемый аргумент известен перед выполнением функции call-by-name вычисляет передаваемое выражение каждый раз при разыменовывании аргумента call-by-name синтаксис отличается объявлением параметра функции: def foo(expr: => Type) V. Коллекции (введение) кортежи (tuples), списки (lists), maps В стандартной библиотеке Scala реализованы все базовые коллекции: списки (линейные и индексированные), множества, maps, а также кортежи Неизменяемые (immutable) и изменяемые (mutable) коллекции По умолчанию коллекции в Scala – неизменяемые (immutable), если явно не указан package с изменяемыми коллекциями Коллекции в Scala имеют общий интерфейс Iterable В Iterable определены методы, обеспечивающие удобство работы с коллекциями (например, map) Часть методов определена только для конкретных коллекций и отсутствует в Iterable (например, sortBy) V. Коллекции (введение) кортежи (tuples) Кортежи представлены посредством сущностей Tuple2, Tuple3 … Tuple22 Можно объявлять нужный Tuple{X} посредством синтаксиса (elem1, elem2, … elem{X}) Доступ к элементам: _1, _2, _3 … _{X} pattern matching V. Коллекции (введение) списки (lists) В стандартной библиотеке Scala реализованы несколько видов списков, например, List for loop, так как List – есть реализация Iterable Операторы конкатенации с элементами: +: (prepend) и :+ (append); с другим списком: ++; при этом (для immutable) создаётся новый контейнер V. Коллекции (введение) maps В стандартной библиотеке Scala Map – общий интерфейс (trait) for loop, так как Map – наследник Iterable Получение элементов по ключу – оператор () Оператор объединения maps ++ V. Коллекции (введение) некоторые методы Iterable Также определены методы преобразования между типами контейнеров: toList, toMap, toSeq, toSet, toArray, Itearable – базовый интерфейс для всех структур данных стандартной библиотеки Scala В Itearable определены методы, реализованные для структур данных и облегчающие работу с ними map, foreach, size И множество других полезных методов (groupBy, flatMap, maxBy, fold, foldLeft, foldRight, head, tail и т. д.) V. Коллекции (введение) изменяемые коллекции (mutable) package scala.collection.mutable операторы изменения коллекции += ++= -= для maps изменение значения по ключу для списков изменение значения по индексу |