Scala
- Дата создания:
- 2003
- Создан под влиянием:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .scala
- Реализации и версии (свернуть все | развернуть все):
-
-
Scala for JVM
- Scala 1.0.0-b2
- Scala 1.0.0-b4
- Scala 1.0.0-b5
- Scala 1.0.0-b6
- Scala 1.0.0-b8
- Scala 1.1.0-b1
- Scala 1.1.0-b3
- Scala 1.1.1.0
- Scala 1.1.1.3
- Scala 1.2.0.0
- Scala 1.2.0.1
- Scala 1.3.0.10
- Scala 1.3.0.2
- Scala 1.3.0.3
- Scala 1.3.0.4
- Scala 1.3.0.7
- Scala 1.3.0.9
- Scala 1.4.0.0
- Scala 1.4.0.1
- Scala 1.4.0.2
- Scala 1.4.0.3
- Scala 1.4.0.4
- Scala 2.0.0
- Scala 2.1.0
- Scala 2.1.1
- Scala 2.1.2
- Scala 2.1.3
- Scala 2.1.4
- Scala 2.1.5
- Scala 2.1.6
- Scala 2.1.7
- Scala 2.1.8
- Scala 2.2.0
- Scala 2.3.0
- Scala 2.3.1
- Scala 2.3.2
- Scala 2.3.3
- Scala 2.4.0-final
- Scala 2.5.0-final
- Scala 2.5.1-final
- Scala 2.6.0-final
- Scala 2.7.7-final
- Scala 2.8.0-final
-
Scala for JVM
Scala — мультипарадигменный язык программирования, спроектированный кратким, элегантным, и типобезопасным для простого и быстрого программирования. В нем органично сочетаются возможности функционального и объектно ориентированного программирования. Основной целью разработки был язык, обладающий хорошей поддержкой компонентного ПО.
На дизайн Scala оказали влияние многие языки и исследовательские работы.
Конечно, Scala впитала значительное число концепций и синтаксических соглашений Java и C#. Способ выражения свойств во многом заимствован из Sather. Из Smalltalk взята концепция унифицированной объектной модели. Из Beta пришла идея, что все, включая классы, должно допускать вложенность. Абстрактные типы в Scala очень похожи на абстрактные типы сигнатур в SML и OCaml, обобщенные в контексте полноценных компонентов. В некотором смысле Scala – это продолжение работы Pizza. Как и Pizza, Scala компилируется под Java VM, добавляя функции высшего порядка, сопоставление с образцом, конструкции, которые исходно были созданы в сообществе функционального программирования. В то время как Pizza обратно совместима с Java, цель Scala – всего лишь возможность взаимодействия, так что у нее больше степеней свободы в дизайне. Ещё одна цель Scala – предоставить расширенные конструкции для абстракции и композиции компонентов – общая с несколькими недавними исследовательскими разработками.
Ссылки:
Примеры:
Hello, World!:
Пример для версий Scala 2.5.1-final, Scala 2.7.7-finalobject HelloWorld {
def main(args: Array[String]) {
println("Hello, World!")
}
}
Факториал:
Пример для версий Scala 2.5.1-final, Scala 2.7.7-finalИспользуется рекурсивное определение факториала.
object Factorial {
def factorial(n: Int): Long =
if (n == 0) 1
else n * factorial(n - 1)
def main(args: Array[String]) {
for {i <- List.range(0, 17)}
yield { println(i + "! = " + factorial(i)) }
}
}
Числа Фибоначчи:
Пример для версий Scala 2.7.7-finalИспользуется рекурсивное определение чисел Фибоначчи.
object Fibonacci {
def fibonacci(n: Int): Int =
if (n < 3) 1
else fibonacci(n - 1) + fibonacci(n - 2)
def main(args: Array[String]) {
for {i <- List.range(1, 17)}
yield { print(fibonacci(i) + ", ") }
println("...")
}
}
Факториал:
Пример для версий Scala 2.7.7-finalИспользуется итеративное определение факториала.
object Factorial {
def main(args: Array[String]) {
var f = BigInt(1)
format("0! = %s\n", f)
for {i <- 1 to 16} {
f *= i;
format("%s! = %s\n", i, f)
}
}
}
Числа Фибоначчи:
Пример для версий Scala 2.7.7-finalЭтот пример демонстрирует возможности использования ленивых вычислений и бесконечных списков в Scala. Бесконечный список чисел Фибоначчи fibs
определяется при помощи фунций .zip
и .tail
по аналогии с примером на Haskell. Пример предназначен для интерактивной интерпретации.
lazy val fib: Stream[Int] = Stream.cons(1, Stream.cons(1, fib.zip(fib.tail).map(p => p._1 + p._2)))
fib.take(16).print
Квадратное уравнение:
Пример для версий Scala 2.8.0-finalИз этого примера видно, что многие вещи — математика, обработка ввода, работа со строками — в Scala заимствована из Java.
import java.io.{BufferedReader, InputStreamReader}
object Main {
def main(args: Array[String]) {
var stdin = new BufferedReader(new InputStreamReader(System.in));
var A = augmentString(stdin.readLine()).toInt;
var B = augmentString(stdin.readLine()).toInt;
var C = augmentString(stdin.readLine()).toInt;
solve(A,B,C);
}
def output(real: Double, imag: Double): String =
if (imag == 0) ""+real
else "("+real+","+imag+")"
def solve(A: Int, B: Int, C: Int)
{ if (A == 0) print("Not a quadratic equation.")
else
{ def D = B*B - 4*A*C;
if (D == 0) print("x = "+output(-B/2.0/A, 0));
else if (D > 0)
print("x1 = "+output((-B+Math.sqrt(D))/2.0/A, 0)+"\nx2 = "+output((-B-Math.sqrt(D))/2.0/A, 0));
else print("x1 = "+output(-B/2/A, Math.sqrt(-D)/2.0/A)+"\nx2 = "+output(-B/2/A, -Math.sqrt(-D)/2.0/A));
}
}
}
CamelCase:
Пример для версий Scala 2.8.0-finalЭтот пример использует два разных регулярных выражения. Первое, words
, описывает слова текста; все подстроки, подходящие под это выражение, переводятся в нижний регистр с первой буквой верхнего регистра. Второе, separators
, описывает промежутки между словами, которые просто удаляются из строки.
import java.io.{BufferedReader, InputStreamReader}
import scala.util.matching.Regex
object Main {
def main(args: Array[String]) {
var stdin = new BufferedReader(new InputStreamReader(System.in));
var text = stdin.readLine();
val words = """([a-zA-Z]+)""".r
text = words.replaceAllIn(text, m => m.matched.toLowerCase.capitalize)
val separators = """([^a-zA-Z]+)""".r
text = separators.replaceAllIn(text, "");
println(text);
}
}
Комментарии
]]>blog comments powered by Disqus
]]>