Betekintés: Háber János - Scala, A Java jövője, oldal #1

Figyelem! Ez itt a doksi tartalma kivonata.
Kérlek kattints ide, ha a dokumentum olvasóban szeretnéd megnézni!



Scala
A Java jövője

Háber János



Scala > Java?
- JVM-en fut
- Típusos
- Teljesen objektum orientált
- Funkcionális programozás támogatása
- Minta illesztés
- Többszörös öröklődés (Mixin)
- Implicit konverzió
- Actor alapú konkurencia kezelés
- Ruby szerű szintaxis
és még sok minden



Scala + Java
- Egyszerre használható Java és Scala
ugyanabban a projektben
- Használhatók a meglévő Java libek
- IDE támogatás
- Ha valami nem megy, csináld Jávában




Teljesen Objektum orientált
//Minden érték egy objektum
1.toString
//Minden művelet egy metódus hívás
1 + 2 + 3 -> (1).+(2).+(3)
// . és ( ) elhagyható
"abc" charAt 1 -> "abc".charAt(1)




Hello World
//Java
public class HelloWorld {
public static void main(String[] args) {
String message = "Hello World";
System.out.println(message);
}
}

//Scala
object HelloWorld {
def main(args:Array[String]):Unit = {
val message = "Hello World"
println(message)
}
}




Singleton támogatás
object Hello {
def world = "Hello World"
}
Hello.world

//Hello$.class
import scala.ScalaObject;
public final class Hello$ implements ScalaObject {
private Hello$() { MODULE$ = this; }
public String world() { return "Hello World"; }
public static final MODULE$;
static
{
new ();
}
}
//Hello.class
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes="...removed...")
public final class Hello
{
public static final String world()
{
return Hello..MODULE$.world();
}
}




Automatikus getter/setter
class SimpleVal {
val finalValue: String = "hi"
var simpleVariable: String = ""
}

import scala.ScalaObject;
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes = "...removed...")
public class SimpleVal
implements ScalaObject {
private final String finalValue = "hi";
private String simpleVariable = "";
public String finalValue() {
return this.finalValue;
}
public String simpleVariable() {
return this.simpleVariable;
}
public void simpleVariable_$eq(String
paramString) {
this.simpleVariable = paramString;
}
}




Scala - tömör
//Java
public class Person {
private final String name;
private final int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}

//Scala
class Person(val name:String, val age:Int)




Scala - tömör
//Java

//Scala

public class Person {
private String name;
private int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}

import reflect.BeanProperty

public String getName() {
return name;
}
public int setName(String name) {
this.name=name;
}
public String getAge() {
return age;
}
public int setAge(String age) {
this.age=age;
}
}

class Person {
@BeanProperty
var name: String = _
@BeanProperty
var age: Int = _
}




Típus következtetés
val sum = 1 + 2 + 3
val nums = List(1, 2, 3)
val map = Map("abc" -> List(1, 2, 3))
val sum: Int = 1 + 2 + 3
val nums: List[Int] = List(1, 2, 3)
val map: Map[String, List[Int]] = Map("abc" -> List(1, 2, 3))




Duck typing
object BigDuck {
def quack(value: String) = {
value.toUpperCase
}
}
object SmallDuck {
def quack(value: String) = {
value.toLowerCase
}
}
object IamNotReallyADuck {
def quack(value: String) = {
"prrrrrp"
}
}

def quacker(duck: {def quack(value: String): String}) {
println (duck.quack("Quack"))
}
quacker(BigDuck)
quacker(SmallDuck)
quacker(IamNotReallyADuck)

class MyDao[T <: {def id : K}, K]




High-order funkciók
def transaction(function: => Any): Any = {
//...
}
transaction {
//here your database code
}




High-order funkciók
def measure[T](func: => T):T = {
val start = Sy

  Következő oldal »»