Scala

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Scala
Scala logo.png
Парадигма: декілька парадигм: функціональна, об'єктно-орієнтована
Розробник: Мартин Одерски
Останній реліз: 2.11 (21 квітня 2014; 134 дні тому)
Під впливом від: Java, Pizza, Haskell, Erlang, Standard ML, Objective Caml, Smalltalk
ОС: Багатоплатформова
Ліцензія: Scala License (BSD похідна)
Сторінка інтернет: www.scala-lang.org

Scala — мультипарадигмова мова програмування, що поєднує властивості об'єктно-орієнтованого та функційного програмування.

Платформа[ред.ред. код]

Програми на Scala запускаються на віртуальній машині Java вище версії 1.5 за умови включення до дистрибутиву scala-library.jar. Scala сумісна із існуючими програмами на Java, тобто код Scala може викликатися із Java-програм і навпаки. Існує реалізація для платформи .NET, але вона підтримується значно менше. Дистрибутив Scala, включаючи компілятор і бібліотеки, випущено під BSD похідною ліцензією.

Мова[ред.ред. код]

Вплив[ред.ред. код]

На Скала вплинуло багато мов. Однорідна об'єктна модель вперше з'явилася у Smalltalk і згодом у Ruby. Універсальність вкладеності присутня у Algol, Simula, Beta. Принцип однорідного доступу для виклику методу і звернення до поля походить з мови Eiffel. Підхід до функціонального програмування подібний до підходу родини мов ML, таких як has SML, OCaml і F#. Багато функцій вищого порядку у стандартній бібліотеці Scala також наявні у ML або Haskell. Неявні параметри у Scala аналогічні класам типів Haskell. Заснована на акторах бібліотека багатозадачності подібна до Erlang.

Змінні[ред.ред. код]

Методи[ред.ред. код]

Починаючи з версії 2.8 Scala підтримує значення аргументів за умовчанням та іменовані аргументи. Методи у Scala можуть бути вкладеними, вкладений метод бачить змінні зовнішньго. Зазвичай параметри до методу передаються за значенням (Call-by-Value) — значення аргументів обчислюється перед викликом методу і передаються до методу. Scala підтримує також передачу параметрів за назвою (Call-by-Name). При цьому в метод передається вираз, але обчислюється не при виклику методу, а при кожному зверненні до нього в тілі методу.

Рівні доступу[ред.ред. код]

За умовчанням рівень доступу до членів класу у Scala є загальнодоступним (public).

Відкриття доступу підкласам (protected), так само як у C++ і C# відкриває доступ лише підкласам, на відмініу від Java, в якій protected також дає доступ усім класам того самого пакету. Члени з видімістю protected доступні у інших екземплярах цього ж класу, але нащадки не мають доступу до protected членів інших екземплярів своїх базових класів (так само як і в Java).

Члени з видимістю private доступні лише у екземплярах цього ж класу. У Java private обмежує доступ на рівні класу найвищого рівня вкладеності, тобто зовнішній клас може одержати доступ до private члена внутрішнього вкладеного класу[1], що не дозволяє Scala.

У Scala protected і private можуть мати кваліфікатор доступу у квадратних дужках: protected[C]. Кваліфікатор доступу члена може бути іменем зовнішньго класу чи пакету, тоді вказаний клас або всі класи, що знаходяться у вказаному пакеті отримують доступ до члена. Також кваліфікатор доступу може бути this, тоді член доступний лише із свого екземпляру, але не доступний через інші екземпляри класу.

Супутні об'єкти (companion objects) мають спільний рівень доступу із своїми супутніми класами.

Історія[ред.ред. код]

  • 2001 — початок розробки як практичнішого спадкоємця Funnel
  • 2003 — перший експериментальний випуск, навчальний курс в університеті
  • 2004 — стаття Scalable Component Abstractions, перша публічна версія
  • 2005 — Scala 2.0, реалізована на Scala (перша версія — на Java), зріла версія
  • 2007 — перший випуск Lift
    • 18 грудня 2007 — доступна рання версія книги Programming in Scala[2]
  • 2008 — Twitter використовує Scala, перша конференція Scala Lift Off
  • 2009 — підтримка IDE, виходять англійською мовою 3 книжки про Scala і одна про Lift
  • 2010 — конференція ScalaDays, виходять 3 книжки японською мовою

Посилання[ред.ред. код]

Примітки[ред.ред. код]