Обзор современных языков программирования. Scala

Содержание

Слайд 2

Scala. Обзор

Мультипарадигмальный язык, сочетающий возможности функционального и объектно-ориентированного программирования
Статически типизированный, типобезопасный
Поддерживает парадигму

Scala. Обзор Мультипарадигмальный язык, сочетающий возможности функционального и объектно-ориентированного программирования Статически типизированный,
компонентного программирования
Реализован для платформ Java и .Net

Слайд 3

Scala. История

Создан в 2001-2004 годах в Лаборатории методов программирования EPFL
За основу взяты

Scala. История Создан в 2001-2004 годах в Лаборатории методов программирования EPFL За
две идеи
Должен быть масштабируемым
Должен унифицировать и обобщать объектно-ориентированное и функциональное программирование
Испытал влияние Java, C#, Smalltak

Слайд 4

Scala. Ключевые аспекты

Scala-программы во многом похожи на Java-программы
Включает единообразную объектную модель
Scala –

Scala. Ключевые аспекты Scala-программы во многом похожи на Java-программы Включает единообразную объектную
это также функциональный язык
Позволяет производить декомпозицию объектов путем сравнения с образцом
Поддерживает параллелизм

Слайд 5

Scala. Области применения

Web-приложения
Скрипты
Интеграционные приложения
Масштабируемые и высокопроизводительные серверные приложения
Мобильные приложения
Предметно-ориентированные языки (DSL)

Scala. Области применения Web-приложения Скрипты Интеграционные приложения Масштабируемые и высокопроизводительные серверные приложения

Слайд 6

Scala. Примеры программ

object HelloWorld
{
def main(args: Array[String]) : Unit =
{

Scala. Примеры программ object HelloWorld { def main(args: Array[String]) : Unit =
println("Hello, world!")
}
}

object HelloWorld extends App
{
Println(“Hello, World!”)
}

Слайд 7

Scala. Примеры программ

object MatchTest2 extends App
{
def matchTest(x: Any): Any =

Scala. Примеры программ object MatchTest2 extends App { def matchTest(x: Any): Any
x match
{
case 1 => "one"
case "two" => 2
case y: Int => "scala.Int"
}
println(matchTest("two"))
}

Слайд 8

Scala. Возможности

В Scala можно создавать методы:

scala> def max(x: Int, y: Int):

Scala. Возможности В Scala можно создавать методы: scala> def max(x: Int, y:
Int
= if (xmax: (Int,Int)Int

Тип возвращаемого значения можно опустить:

scala> def max2(x: Int, y: Int)
= if (xmax2: (Int,Int)Int

Слайд 9

Scala. Возможности

Scala хорошо масштабируется, поэтому подходит для создания скриптов

Файл helloarg.scala:
Println(“Hello, “ +

Scala. Возможности Scala хорошо масштабируется, поэтому подходит для создания скриптов Файл helloarg.scala:
args(0) + ”!”)
Запуск в интерпретаторе:
>scala helloarg.scala planet
Результат:
Hello, planet!

Слайд 10

Scala. Возможности

Для обращения к методу вместо . можно использовать просто пробел, параметры

Scala. Возможности Для обращения к методу вместо . можно использовать просто пробел,
указываются тоже через пробел

println(("Hello, " + args(0) + "!").toUpperCase)
println("Hello, " + args(0) + "!" toUpperCase)

Значения элементарных типов – тоже объекты

scala> 1 to 5
res0: Range.Inclusive = Range(1, 2, 3, 4, 5)

Слайд 11

Scala. Возможности

Scala различает значения (val) и переменные (var)

scala> val msg = “Hello,

Scala. Возможности Scala различает значения (val) и переменные (var) scala> val msg
world!”
msg: java.lang.string = Hello, world!
scala>println(msg)
Hello, world!
Unnamed0: Unit = ()
scala>msg = “Goodbye, world!”
:5 error: assignment to non-variable
val unnamed4 = {msg = “Goodbye, world!”;msg}

Слайд 12

Scala. Возможности

Scala различает значения (val) и переменные (var)

scala> def sum(a: Int, b:

Scala. Возможности Scala различает значения (val) и переменные (var) scala> def sum(a:
Int): Int = {
| var result = 0
| for (i <- a to b) result += i
| result
| }
sum: (Int,Int)Int
scala> sum(1, 5)
res0: Int = 15

Слайд 13

Scala. Возможности

Циклы – аналогичны C# и Java
Поддерживаются лямбда-выражения

Файл pr.scala:
args.foreach(arg => print(arg))
Запуск в

Scala. Возможности Циклы – аналогичны C# и Java Поддерживаются лямбда-выражения Файл pr.scala:
интерпретаторе:
> scala pr.scala Concise Is Nice
Результат:
ConciseIsNice

Слайд 14

Scala. Возможности

Scala – объектно-ориентированный язык

val s = new String(“Hello, world!”)
println(s)
val greetStrings =

Scala. Возможности Scala – объектно-ориентированный язык val s = new String(“Hello, world!”)
new[String] (3)
greetStrings(0) = “Hello”
greetStrings(1) = “, “
greetStrings(2) = “world!\n”
for (i <- to 2)
print(greetStrings(i))

Слайд 15

Scala. Возможности

class Complex(r: Double, i: Double) {
def real = r
def

Scala. Возможности class Complex(r: Double, i: Double) { def real = r
image = i
def magnitude = Math.sqrt(r*r + i*i)
def + (y: Complex) = new Complex(this.real + y.real, this.image + y.image)
override def toString = real+" + i*“ + image
}
object Main {
def main(args:Array[String]) :Unit = {
val first = new Complex(1, 5)
val second = new Complex(2, 4)
val sum = first + second
println(sum)
}

Слайд 16

Scala. Возможности

class Complex(val real: Double, val image: Double) extends Ordered[Complex] {
def

Scala. Возможности class Complex(val real: Double, val image: Double) extends Ordered[Complex] {
magnitude =Math.sqrt(real*real+image*image)
def + (y: Complex) = new Complex(this.real + y.real, this.image + y.image)
def compare(y:Complex):Int = this.magnitude compare y.magnitude
override def toString = real+" + i*“ + image
}
object Main {
def main(args:Array[String]) :Unit = {
val first = new Complex(1, 5)
val second = new Complex(2, 4)
if (first > second)
println(“First greater”)
}

Слайд 17

Scala. Возможности

Scala поддерживает работу со списками

val x12 = List(1, 2)
val x34 =

Scala. Возможности Scala поддерживает работу со списками val x12 = List(1, 2)
3 :: 4 :: Nil
val x1234 = x12 ::: x34
println(x12 + “ & ” + x34 + “ were not mutated”)
println(“Thus, “ + x1234 + “ is a new List”)
Результат:
List(1, 2) & List(3, 4) were not mutated
Thus, List(1, 2, 3, 4) is a new List

Слайд 18

Scala. Возможности

Scala. Возможности

Слайд 19

Обзор современных языков программирования

Go

Обзор современных языков программирования Go

Слайд 20

Go. Обзор

Компилируемый и многопоточный язык общего назначения, разработанный компанией Google
Статически типизированный
Создавался для

Go. Обзор Компилируемый и многопоточный язык общего назначения, разработанный компанией Google Статически
того, чтобы помочь задействовать всю мощь современных многоядерных процессоров
Поддерживается многими ОС (включая Windows, Linux, Android)

Слайд 21

Go. Особенности

Строгая типизация, доступен автоматический вывод типов
Полноценная поддержка указателей, но без возможности

Go. Особенности Строгая типизация, доступен автоматический вывод типов Полноценная поддержка указателей, но
применять к ним арифметические операции, в отличие от C/C++
Строковый тип со встроенной поддержкой юникода
Автоматическое управление памятью со сборщиком мусора

Слайд 22

Go. Особенности

Средства объектно-ориентированного программирования, но без поддержки наследования реализации (наследуются только интерфейсы)
Средства

Go. Особенности Средства объектно-ориентированного программирования, но без поддержки наследования реализации (наследуются только
параллельного программирования: встроенные в язык потоки (go routines), взаимодействие потоков через каналы
лаконичный и простой синтаксис, основанный на Си

Слайд 23

Go. Особенности

Существуют интерфейсы, которые не нужно явно имплементировать, а лишь достаточно реализовать

Go. Особенности Существуют интерфейсы, которые не нужно явно имплементировать, а лишь достаточно
методы интерфейса
Средства функционального программирования: неименованные функции, замыкания, передача функций в параметрах и возврат функциональных значений

Слайд 24

Go. Особенности

Из языка сознательно исключены
Структурная обработка исключений (вместо этого рекомендуется использовать возврат

Go. Особенности Из языка сознательно исключены Структурная обработка исключений (вместо этого рекомендуется
ошибки как одного из результатов вызова функции и проверку его на месте вызова)
Наследование классов (заменяется механизмом встраивания)
Переопределение методов
Обобщённое программирование

Слайд 25

Go. Преимущества

Простой синтаксис
Скорость и компиляция
Наличие сборщика мусора
Наследование
Параллелизм
Богатая стандартная библиотека

Go. Преимущества Простой синтаксис Скорость и компиляция Наличие сборщика мусора Наследование Параллелизм Богатая стандартная библиотека

Слайд 26

Go. Примеры программ

package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
type Point struct { x,

Go. Примеры программ package main import "fmt" func main() { fmt.Println("Hello, World!")
y float }
func (p Point) Abs() float {
return math.Sqrt(p.x*p.x + p.y*p.y)
}
func f(a, b int) (int, string) {
return a+b, "сложение" }

Слайд 27

Go. Примеры программ

func incTwo(a, b int) (c, d int) {
c = a+1
d

Go. Примеры программ func incTwo(a, b int) (c, d int) { c
= b+1
return
}
first, second := incTwo(1, 2)

Слайд 28

Go. Отложенные вызовы

func CopyFile(dstName, srcName string) (written int64, err error) {

Go. Отложенные вызовы func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
} // иначе файл-источник успешно открыт
defer src.Close()
dst, err := os.Create(dstName)
if err != nil {
return
}
defer dst.Close()
return io.Copy(dst, src)
}

Слайд 29

Go. Многопоточность

func server(i int) {
for {
print(i)
time.Sleep(10)
}
}
go server(1)
go server(2)

Go. Многопоточность func server(i int) { for { print(i) time.Sleep(10) } } go server(1) go server(2)

Слайд 30

Обзор современных языков программирования

Swift

Обзор современных языков программирования Swift

Слайд 31

Swift. Обзор

Разработка началась в 2010 году компанией Apple
Swift заимствовал идеи из Objective-C,

Swift. Обзор Разработка началась в 2010 году компанией Apple Swift заимствовал идеи
Rust, Haskell, Ruby, Python, C#, CLU и других языков
Мультипарадигмальный язык программирования общего назначения, который был создан в первую очередь для разработчиков iOS, OS X, tvOS и watchOS

Слайд 32

Swift. Обзор

Код, написанный на Swift, может работать вместе с кодом, написанным на

Swift. Обзор Код, написанный на Swift, может работать вместе с кодом, написанным
языках программирования C, C++ и Objective-C в рамках одного и того же проекта
Swift - язык со строгой типизацией, имеется автоматическое выведение типа
Отсутствует неявное приведение типов
«Игровые площадки» – интерактивное выполнение кода

Слайд 33

Swift. Преимущества и недостатки

Преимущества
Простой синтаксис
Интерактивность
Совместимость с Си
Высокая производительность
Недостатки
Акцент на скорости
Специализация только на

Swift. Преимущества и недостатки Преимущества Простой синтаксис Интерактивность Совместимость с Си Высокая
OS X и iOS

Слайд 34

Swift. Примеры программ

println("Hello, world")
-----------------------------------
class Shape {
var numberOfSides = 0
func simpleDescription()

Swift. Примеры программ println("Hello, world") ----------------------------------- class Shape { var numberOfSides =
-> String {
return "A shape with \(numberOfSides) sides"
}
}

Слайд 35

Swift. Примеры программ

func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {

Swift. Примеры программ func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)