== История ==
Проектът Scala е започнал през 2001 в института École Polytechnique Fédérale de Lausanne (EPFL) от Мартин Одерски. Последван е от труда върху Фунел (програмен език, който комбинира идеи от функционалното програмиране и [[Petri net]]s. Одерски преди това работил върху [[Generic Java (programming language)|Generic Java]] и [[javac]], компилаторът на Sun. След вътрешното издание в края на 2003 г., Scala излиза в началото на 2004 на [[Java platform|Java]] платформата и на [[.NET|.NET платформа]] през юни 2004. Последвана от втора версия през 2006 г., [[Microsoft .NET Framework|.NET платформата]] официално спира да поддържа езика. Също така Scala е имала широка поддръжка за функционално програмиране от самото и начало. Java е останал чисто обектно-ориентиран език до въвеждането на ламбда изразите с [[Java|Java 8]] през 2014. На 17 януари 2011 the Scala екипът е спечелил финансиране за 5-годишно проучване на стойност над €2.3 милиона от Европейското изследователско консулство. На 12 май 2011, Одерски и сътрудниците му създали [[Typesafe Inc.]], компания, която предоставя масова поддръжка, обучение и услуги, свързани със Scala. [[Typesafe Inc.]] получили $3 милиона инвестиции през 2011 от [[Greylock Partners]].
== Платформи и лицензи ==
Scala върви на Java платформата ([[Java Virtual Machine]]) и е съвместим със съществуващите [[Java (programming language)|Java]] програми. Както [[Android (operating system)|Android]] приложенията са типично предоставени като Java [[байткод]], който да бъде преведен върху инсталацията, това прави Scala добре съвместим с Android разработването. Scala също може да се компилира с [[JavaScript]], правейки го възможно да пише Scala програми, които могат да тръгнат на браузъра.
Софтуерното разпределение на Scala, включително компилатор и библиотеки са издадени под BSD лиценз.
== Примери ==
=== „Hello World“ пример ===
[[Hello World program|Hello World програмата]] написана в Scala изглежда по този начин:
<source lang=scala>
object HelloWorld extends App {
}
</source>
За разлика от [[Java (programming language)|stand-alone Hello World приложението за Java]], тук не се декларира клас и не е декларирано нищо статично; единствено е използван обект, създаден с ключовата дума “object“. Със запазването на програмата в името <code>HelloWorld.scala</code>, вече може да се компилира:
<pre>$ scalac HelloWorld.scala</pre>
За да тръгне:
Някои съществени разлики:
* Scala не изисква точка и запетая накрая на стейтмънта. Стойностните типове: <code>Int, Double, Boolean</code> започват с главна буква, вместо: <code>int, double, boolean</code>.
* Параметричните и връщащите типове са по-скоро както в [[Pascal (programming language)|Pascal]], отколкото в [[C (programming language)|C]].
* Методите трябва да бъдат предвождани от <code>def</code>.
* Пред локалните или класовите променливи трябва да се пише <code>val</code> (декларира неизменима променлива) or <code>var</code> (декларира изменима променлива).
== Характеристики (в сравнение с Java) ==
Scala има същия начин на компилиране като [[Java platform|Java]] и [[C Sharp (programming language)|C#]], поименно отделен компилатор и динамичен клас зареждане, за да може Scala кода да използва [[Java platform|Java]] библиотеките, или .NET библиотеките в .NET платформата.
Оперативните характеристики на Scala са същите като на [[Java platform|Java]]. Scala компилатора генерира байткода[[байткод]], което е много подобно с този на [[Java platform|Java]]. Всъщност, Scala кодът може да бъде декомпилиран във [[Java platform|Java]] код, с изключение на някои конструкторни операции. За JVM, Scala [[Java platformVirtual Machine|JavaJVM]], Scala Java кодовете нямат разлика. Единствената разлика е във времето необходимо на библиотеките да заредят, <code>Scala-library.jar</code>.
Scala добавя голям брой отличителни разлики, в сравнение с Java, и има някои основни разминавания в съществения модел на изразите и типовете, което прави езика теоретично по-чист и елиминира много пречки в Java. От гледна точка на Scala, това е на практика много важно, защото големия брой разлики са възможни и във C#. Включени примери:
=== Синтактична гъвкавост ===
=== For – цикли ===
Вместо както в Java „[[Foreach loopцикъл|foreach]]“ циклите, for циклите чрез итератор, Scala има много по-силно понятие за <code>for</code>-expressions. Те са подобни на [[list comprehension]]s в езиците като Haskell, или комбинацията от list comprehensions и производните изрази в [[Python (programming language)|Python]]. For-циклите използващи <code>yield</code> ключови думи позволяват създаването на нови колекции чрез итерация, връщайки нова колекция от същия тип. Те са преведени от компилатора в серии от <code>map</code>, <code>flatMap</code> и <code>filter</code>calls. Където <code>yield</code> не е използван, кодът се доближава до императивен тип цикли чрез превеждане към <code>foreach</code>.
Прост пример за това е:
[[Категория:Езици за програмиране]]
{{Портал|Информатика}}
|