ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。制御構文(1)Scalaスポンサーリンク引き続きScalaのお勉強を。用語の解説があったのでこれについてまとめておく。プログラム言語内においてプログラムが構造を持つためのルール。前回出てきたUserクラスの記述全体がこれに当たる。プログラムを構成する部分のうち評価が成功すると値になるもの。式とは逆に評価しても値にならないもの。1は文ブロック式Scalaでは{}で複数の式を囲むと、それ全体が式となる。読み進めているドワンゴのScala資料ではこの{}で括られた式を便宜上「ブロック式」と呼称する。2がブロック式の値となる。3上記ブロック式の構文に従うとメソッドの呼び出しprintlnも式になるがそれでいいのか気になったので別に試してみた。3という結果が表示されない。探してみると以下の記事で丁寧に解説してくださっていた。qiita.comprintlnなどの一見、値を返さなそうなメソッドがあります。Scalaではメソッド呼び出しは、式として判別されるため、意味のある結果を返さないUnit型として判断されます。このようなものの結果型を調べるためには:tを式の前につけるといいらしい。println("B");Unitなるほど、確かにUnitが返ってきた。「if文」ではなく「if式」なのね。形式はJavaと一緒(らしい)。18歳以上です上記で書いたようにif式なので値が返却される。else項を省略した場合は先程紹介したUnitが補われた形で扱われる。このUnitはJavaではvoidに相当するもので返すべき値が無いときに使用され()を値として持つ。LibraryのUnitの項目からの引用。1歳から6歳までの就学以前の子どもの場合に“幼児です”と出力し、それ以外の場合は“幼児ではありません”と出力するコードを書いてみましょう。}幼児ですwhile式while式もJavaやC言語と一緒。本体式if式と一緒でwhileも式になる。返却すべき値がないのでUnit型の()が返却される。9Scalaにはbreak文やcontinue文は無いらしい。後ほど扱う高階関数を使えばあまり必要にならないとのこと。whileを利用して、0から数え上げて9まで出力して10になったらループを終了するメソッドloopFrom0To9を書いてみましょう。loopFrom0To9は次のような形になります。???の部分を埋めてください。ジェネレータを1つ以上使うことが出来る。ジェネレータは以下の通り。<式>言語仕様によると、Guard条件も含めれるみたい。PostfixExprさっそく例を。4for式は他の言語とはだいぶ違って独特。ジェネレータを複数持てるのでループ構造がシンプルになるのはいい感じ。pythonのzip関数が一番近いかな。ちなみにtoとuntilの違いは以下のように示す範囲の違いにあるようだ。1から10まで以下のようにList(コレクションの一つ)を一つずつ辿って処理することも出来る。println(e)ABCDEperlやpythonでよく使う形のループ処理も可能ということか。これだけでも結構強力な処理が可能だな。上記のコレクションを加工することにも使えるという例もあった。PreE)yieldを使うことで、”コレクションの要素を加工して返す”という処理にすることが出来て、この動きをfor-comprehensionと呼ぶことがある。cの組み合わせを全て出力してください。直角三角形の条件にはピタゴラスの定理を利用してください。長さの三辺を持つ三角形は、直角三角形になるというものです。}}愚直にif式使って書いたら、解答はGuard条件を使ったもっとスマートなものだった。ひとつ気になってScalaのべき乗の書き方を調べてみたが、pythonの**のように演算子を使って書くものはなくMathライブラリを使うみたい。この章は残りはmatch式のみだが結構な分量がありそうなので今日はここまでにして残りは次回。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。