LoginSignup
14
12

More than 5 years have passed since last update.

[Scala]PHPerのScala入門メモ(途中)

Last updated at Posted at 2014-11-12

変数宣言

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

14
12
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12