Scala学習ノート(五)-制御文

3742 ワード

他のCクラス言語と同じように、Scalaにもよく使われる制御文がありますが、他の言語とは違って、これらの制御文も戻り値を生み出し、不思議に聞こえますか?確かに
if文
他の言語と同様に、条件が真かどうかを判断し、次のような1つを実行します.
val maxValue = if(x>y) x else y
も同様に使えます!操作結果を逆にします(オペレータは次の文章で記述します).
val maxValue = if(!(x>y)) x else y

match文
この文は他の言語のswitchに似ています.正確にはC#のswitchに近いです.任意の値を一致させることができるので、javaでは数字と列挙しか一致しません.
同時にこの文も値を返すことができて、この点はとても爽やかです.
例:
val sample = xxx //          
val friend = 
     sample match{
      case "A" => "a"
      case "B" => "b"
      case _ => "nothing"
}

意味はわからないけど強そうに見える
ここでsampleは、switch文のswitch(sample)に似た、比較する式や他の任意のものです.
次にcaseの後ろには使用されません:=>を使用します.
それからcaseの間にbreakがなくなったのは、Scalaが一つのcaseから別のcaseにジャンプすることを許さないからです.もしジャンプが必要ならどうしますか?我也不知道
そしてdefaultがなくなって代わりに_、Scalaで_不思議な存在で、あちこちで彼の姿が見られるようですが、とにかく_defaultの代わりに存在します.
最後に、match全体のマッチング結果がfriend不変量に付与されていることがわかりました.はい、これは使いやすいでしょう.
while/do while文
これは他の文と基本的に同じで、少し違います.フィールドや他のオブジェクトに値を返すこともできます.たとえば、次のようにします.
var a = 0;
while(a <100)
{
    a = a + 1
}
//   
do
{
 a = a+1
}
while(a<100)

Scalaでは、付与文は常にunit値を返します.したがって、他の文でよく使用されるいくつかの方法はScalaには適用されません.たとえば、次のようにします.
var line = ""
while((line = readLine()) != "")
{
    // 
}

この場合、コンパイラのコンパイル警告が表示され、UnitとStringの比較は常にtrueに戻ります.
for文
Scalaの中のFor文は複雑ですが、他の言語のfor文と比べると、拡張されたものがたくさんあるので、一歩一歩進んでいきましょう
最も簡単なもの:
val files = someArray
for(file 

ここでは、数値ループを使用する場合、toまたはuntil関数を使用します.たとえば、次のようにします.
for(i 

フィルタ条件を使用するには、次の手順に従います.
Scalaは、ループ時にフィルタ条件を追加することができます.たとえば、次のようになります.
for(i 

複数のif文を使用して多層フィルタリングを行うこともできます.たとえば、次のようにします.
for(i  3 )
   println("I: " + i)
最初のif文の後ろに注意してください.号、scalaは、複数のフィルタを使用する場合、必ず使用しなければならないことを規定しています.番号で区切る
ネストされた列挙:
普通のforネストとの違いは、「for」という3つのアルファベットを少なく書くことができます.他の基本は同じです.例えば、次のようにします.
def fileLines(file: java.io.File) =
scala.io.Source.fromFile(file).getLines.toList
def grep(pattern: String) =
for (
    file 

このうち、カッコの代わりにカッコを使うことができ、メリットは少なく書くことができることです.ストリーム間バインド:
個人的には実用的な機能だと思いますが、特に木の構造を巡る場合、非常に便利です.
def grep(pattern: String) =
for {
     file 
ここではfor文に変数trimmedを定義し、その値を割り当てます.forは括弧で囲まれていることに注意してください.
新しいコレクションを作成:
ここでforループの後にyieldキーワードを使用して新しいコレクションを作成します.
for{}yield{}ここでyieldはfor循環体の外に位置し、例えば:
val forLineLengths =
  for {
      file 
ここでは、すべてのファイルを巡回し、ファイル名に基づいて.scalaのファイルはすべての行を取り出してスペースを取り、「.*for.*」に一致した後、長さを取って新しい配列を作成します(誰か分かりますか?ハハ)
ええ、とにかく簡単にいろいろなものを作ることができます.ここではC#のlinqの使い方に似ています.
上はただ基本的なfor文の使い方で、后ろに何があるかについては、私もまだ见ていません.ハハ
try-catch-filly、throw文
他の言語と似ていますが、Scalaでは次のような値が返されます.
val half =
if (n % 2 == 0)
  n / 2
else
  throw new RuntimeException("n must be even")
異常が投げ出された場合、halfも実際には価値があり、不思議に見えますが、時には役に立ちます.
import java.net.URL
import java.net.MalformedURLException
def urlFor(path: String) =
try {
   new URL(path)
} catch {
   case e: MalformedURLException =>
      new URL("http://www.scalalang.org")
}

ここではtry-catch文を使用していますが、他の文のcatch(Exception)とは異なり、case e:XXX=>で処理され、値を返し続けることができます.
finally句について
finally句は他の言語と同じですが、finallyの戻り値はtry-catchの戻り値を上書きするので、finallyでは値を返さずにリソースの解放だけを行えばよいことに注意してください.
Scalaの基本的な制御文はこれだけで、少し多いですか?それとも少し少ないですか?
では、breakとcontinueが見つからないことに気づいたのではないでしょうか.この2つのキーワードはscalaから削除されました.彼らは関数的なスタイルに合わないので、著者によると、関数の数の面量と再帰を十分に利用すれば、この2つのキーワードを簡単に避けることができます.
次のセクションでは、ScalaのオペレータとJavaとC#でよく使われる他のものについて説明します.