フェイ=サンの何か

このブログは筆者が感じたことを淡々と書くブログです.過度な期待はしないようにしてください

【プログラミング】【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以外のブログも書こうかしら。。。