【プログラミング】【Scala】第7章(Scala勉強4日目)
そろそろタイトルのネタが尽きてきたので無難なタイトルに変更
これ書いてる時点ですでに13章まで読み終えてるけどブログ書くのがめんd。
第7章:組み込みの制御構造
・Javaと同じなところは割愛して、Javaとは違う部分のみを記載
ーif―
・値を作り出すことができるため↓のような書き方ができる
val filename = if(args.isEmpty == false) args(0) else "def.txt"
ーwhileー
・whileでは代入の結果は常にUnit型の値を返すため、↓の書き方をすると無限ループ
var line = ""
while( (line = readLine() ) != "") println(line)
※:line = readLine() が常にUnit値の()となる
・Scalaはwhileループ使うくらいなら再帰関数を使っていこう、というスタイルらしい
ーforー
・JavaでのForeachの書き方に近い(気がする)
for(str <- args) println(str)
・for式はあらゆるコレクションを処理できるので↓のような書き方もできる
for(i <- 1 to 4) println(i) //1~4が出力
for(i <- 1 until 4) println(i) //1~3が出力
・コレクションに対してフィルタリングができる。複数フィルタも適応可能
for(fileName <- fileNames if( fileName.endsWith(".scala")) println(fileName)
※:結果はファイル名の末尾が".scala"のものだけ出力される
(fileNamesにはファイル名のリストを格納)
for(fileName <- fileNames
if fileName.endsWith(".scala")
if fileName.startsWith("a")) println(fileName)
・for式の最後にyield<本体>と書くことで結果を新しいコレクションとして格納できる
def scalaFileNames = for{ fileName <- fileNames
if fileName.endsWith(".scala") } yield file
-throw/try-catch/finally-
・throwはJavaと一緒っぽい(多分)
・try-catchのcatchでcase文が使える
~~}catch{
case ex : FileNotFoundException => //ここにエラー処理
case ex : IOException => //ここにエラー処理
}
・Javaとは異なりfinallyは結果値を返さない
ーmatchー
・switch文に近いやつ。条件に一致するcase文の処理を適応できる
val friend = str match{
case "salt" => "pepper"
case chips" => "salsa"
case _ => "nothing"
}
println(friend)
ーbreak/continueー
・存在しない(Breaksクラスを使えば例外的に使える)
そろそろScala以外のブログも書こうかしら。。。