|
Scala — мова програмування
ADO в Delphi AJAX Android C++ CakePHP CMS COM CSS Delphi Flash Flex HTML Internet Java JavaScript MySQL PHP RIA SCORM Silverlight SQL UML XML Бази даних Веб-розробка Генетичні алгоритми ГІС Гітара Дизайн Економіка Інтелектуальні СДН Колір Масаж Математика Медицина Музика Нечітка логіка ООП Патерни Подання знань Розкрутка сайту, SEO САПР Сесії в PHP Системне програмування Системний аналіз Тестологія Тестування ПЗ Фреймворки Штучний інтелект
|
Знання
Scala — мова програмування
Перші версії мови створені в 2003 році колективом лабораторії методів програмування Федеральної політехнічної школи Лозанни під керівництвом Мартіна Одерськи, мова реалізована для платформ Java і .Net. На думку Джеймса Стречена (англ. James Strachan (programmer)), творця мови програмування Groovy, Scala може стати наступником мови Java [1]. ІсторіяМова була створена в 2001-2004 роках в Лабораторії методів програмування EPFL. Вона стала результатом досліджень, спрямованих на розробку поліпшеної мовної підтримки компонентного ПЗ. За основу при розробці мови були взяті 2 ідеї:
Scala була випущена для загального користування на платформі JVM в січні 2004 року і на платформі .NET у червні 2004 року. Планується продовжити роботу над формалізацією ключових аспектів мови і над розробкою оптимізацій, виконуваних компілятором. Витоки дизайнуНа дизайн Scala вплинули багато мов і дослідницькі роботи. Наступне перерахування включає частину робіт.
Ще одна мета Scala — надати розширені конструкції для абстракції і композиції компонентів — загальна з декількома недавніми дослідними розробками. Ключові аспекти мови
Об'єктно-орієнтована моваУ Scala використовується чиста об'єктно-орієнтована модель, схожа на застосовувану в Smalltalk: кожне значення — це об'єкт, і кожна операція — це відправка повідомлення. Наприклад, додавання x+y інтерпретується як x.+(y), тобто як виклик методу з аргументом x в якості об'єкта-приймача і y в якості аргументу методу. Розглянемо інший приклад 1+2. Це вираз інтерпретується як (1).+(2). Зверніть увагу, що дужки навколо чисел обов'язкові, тому що лексичний аналізатор Scala розбиває вираз на лексеми за принципом найдовшого можливого зіставлення. Таким чином, вираз 1.+(2) розіб'ється на лексеми 1.,+ і 2, тому що лексема 1. довший лексеми 1 і перший аргумент складання буде інтерпретований, як тип Double замість Int. [2] Функціональна моваКожна функція — це значення. Мова надає легковаговий синтаксис для визначення анонімних і каррінгових функцій. Кожна конструкція повертає значення. Зіставлення із зразком природно розширюється до обробки XML c допомогою регулярних виразів. Повторне використання та адаптаціяКожна компонентна система з потужними конструкціями абстракції і композиції стикається з проблемою, коли справа доходить до інтеграції підсистем, розроблених різними командами в різний час. Проблема полягає в тому, що інтерфейс компонентів, розроблених тією чи іншою групою, часто не підходить клієнтам, що мають намір використовувати цей компонент. Scala представляє нову концепцію вирішення проблеми зовнішньої розширюваності — види (views). Вони дозволяють розширювати клас новими членами і trait-ами. Види в Scala переводять в об'єктно-орієнтоване уявлення використовувані в Haskell класи типів. На відміну від класів типів, область видимості видів можна контролювати, причому в різних частинах програми можуть співіснувати паралельні види. Приклади програмПрограма, як і в Java, являє собою об'єкт. Це приклад консольної програми, яка виводить рядок тексту на екран.
object HelloWorld {
def main(args: Array[String]) =
Console.println("Привіт, СВІТ!")
}
Наступний простий приклад програми написаний на Java і Scala, що демонструє деякі відмінності в синтаксисі (постфіксний запис типів змінних, відсутність спеціального синтаксису для доступу до масивів). У цьому прикладі описується консольна програма, яка виводить всі опції, передані через командний рядок. Опції починаються з символу «-» (мінус).
class PrintOptions
{
public static void main(String[] args)
{
System.out.println("Вибрані опції:");
for (String arg: args) if (arg.startsWith("-")) System.out.println(" " + arg.substring(1));
}
}
object PrintOptions
{
def main(args: Array[String]) : Unit =
{
println("Выбрані опції:")
for (arg <- args if arg startsWith "-") println(" " + (arg substring 1))
}
}
// Або в функціональному стилі:
object PrintOptions
{
def main(args: Array[String]) : Unit =
println("Вибрані опції:" +: (args withFilter (_ startsWith "-") map (" " + _.drop(1))) mkString "\n")
}
Зверніть увагу, що в Scala оголошується не клас об'єкта, а відразу екземпляр об'єкта. Так природним способом реалізується шаблон проектування, де в програмі повинен бути тільки один екземпляр класу («Одинак??» - «Singleton»). Приклад програми, яка підсумовує всі елементи списку, який передається через аргументи.
object Main {
def main(args: Array[String]) {
try {
val elems = args map Integer.parseInt
println("Сума аргументів: " + elems.foldRight(0) (_ + _))
} catch {
case e: NumberFormatException =>
println("Помилка в аргументах. Використовувати слід так: scala Main <число1> <число2> ... ")
}
}
}
За допомогою методу map перебираються всі аргументи. Всі вони перетворюються в ціле число методом Integer.parseInt і додаються в список (масив) elems. Потім за допомогою методу згортки списку foldRight обчислюється сума елементів. Інтеграція з JavaScala може взаємодіяти з кодом, написаним на Java. Всі класи з пакета java.lang вже підключені за замовчуванням, в той же час інші повинні бути підключені явно. ПрикладЗавдання: отримати і відформатувати поточну дату в локалізації певної країни, наприклад — Франції. У бібліотеці класів Java вже є потрібна нам функціональність у класах Date і DateFormat. Для того, щоб скористатися цим, досить просто імпортувати ці класи з відповідних Java-пакетів:
import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._
object FrenchDate {
def main(args: Array[String]) {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
println(df format now)
}
}
Зверніть увагу на додаткові посиланняГоловний розділзагрузка...
|
Сторінки, близькі за змістом
|
|
Copyright © 2008—2026 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|