###変数宣言
val => 再代入不可
var => 普通の変数 ※Scalaではなるべく使わない
###命名規則
原則はキャメルケース。
”_”は特別な意味を持つので使わない。
http://docs.scala-lang.org/style/naming-conventions.html
###関数を定義する
PHPの場合
function add (x, y) {
return x + y;
}
$this->add(1, 2);
Scalaの場合
def add (x: Int, y: Int): Int = {
// return文は必要ない限り書かない
x + y
}
add(1, 2)
###配列・リスト
どちらも同じ型を格納する
PHPの場合
$stringArray = array("hoge", "one", "foo");
Scalaの場合
val stringArray = Array("hoge", "one", "foo")
PHPの場合
// PHPにリストって概念ある・・・?
Scalaの場合
val integerList = List(1, 2, 3)
###制御文
####for文
PHPの場合
$integerList = array(1, 2, 3);
foreach ($integerList as $int) {
if (($int % 2)) { continue; }
echo $int . PHP_EOL;
} //2
scalaの場合
object main extends App {
val ary = Array(1, 2, 3)
// ここでフィルタリングできる
for (num <- ary if (num % 2 == 0))
println(num)
}
Scalaはすぐにfor文内で処理する変数(ここではnum)がわかるのでよい。
######yield
計算結果を保持してくれる。どういう時にうれしいかはまだ不明。
※追記:mpywさんありがとうございます
http://php.net/manual/ja/language.generators.overview.php
scalaの場合
val ary = Array(1, 2, 3)
for (num <- ary)
yield num * 2
####foreach文
Scalaの場合、foreachは制御構文として扱われない。
各クラスのメソッドとして扱われる。
PHPの場合
$integerList = array(1, 2, 3);
foreach ($integerList as $int) {
echo $int . PHP_EOL;
}
Scalaの場合
val integerList = Array(1, 2, 3)
integerList.foreach(println)
/* ちゃんと改行もしてくれる
1
2
3
*/
####switch文
PHPの場合
switch ($string) {
case "hoge":
echo "hoge";
break;
case "foo":
echo "foo";
break;
case "bar":
echo "bar";
break;
default:
echo "placeholder";
}
Scalaの場合
// switchに似たmatchがある.これはScalaっぽくない書き方。
string match {
case "hoge" => println("hoge")
case "foo" => println("foo")
case "bar" => println("bar")
case _ => println("placeholder")
}
###class
####trait
extendsでは静的な束縛をされる
withでは動的な束縛がされる
PHPの場合
trait Access {
function howTo() {
echo "HowTo";
}
}
class Company {
use Access;
}
$access = new Company();
$access->howTo(); // HowTo
Scalaの場合(extends)
trait Access {
def howTo() {
println("HowTo")
}
}
class Company extends Access {
override def toString = "hoge"
}
val company = new Company
company.howTo() // HowTo