ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。match式Scalaスポンサーリンク先日に引き続きScalaの制御構文の章を。続きmatch式Javaのswitchのように複数の分岐を表現する制御式。)+}switch相当の処理だが、<パターン>にかける内容が幅広いとのこと。JavaやC言語のswitch相当の処理から見ていく。taroの中身がString型の"Taro"で、それ自体をパターンに入れるので、結果C言語のswitch相当の動きになる。_とするとdefault項の扱いになる。oneパターンをまとめる以下のように|を使って複数のケースをまとめることが出来る。}firstsecondパターンマッチによる値の取り出しListのようなコレクションの要素の一部にマッチさせることも可能。c)にマッチするため、b、cにListの2番め、3番めの要素が入り、printlnが実行される。'=>')なため、特定の条件のデータにはマッチしないといった柔軟な条件設定が可能になる。いうことなので試してみよう。"C")を<ガード>を設定することで弾いてみる。_にマッチし出力が"nothing"となった。パターンのネストも可能。C)上記のようにListを要素に持つList1stを作成し、先頭のListの要素が"A"という条件を設定してmatch式にかけると、最初のcaseにマッチし、aとxがそれぞれprintlnで出力された。x)のa@List("A")の@はasパターンと呼ばれるもので、マッチした場合に、そのデータを@の前の変数で使用可能にするとのこと。中置パターン上記で書いた以下のパターンは書き換えが可能。C書き換えると以下のようになる。_を中置パターンと呼ぶ。リファレンスでの説明はこれかな↓。remainder.要素数が2以上のリストにマッチし、xは最初の要素に、yは2番めの要素に、xsは残りの要素に紐づく。ここからは普通にソースコード書いてscalaコマンドで試していく。}}上記をscalaコマンドを使って実行すると以下のようになる。D)確かに、remainには定義したListのうち3番目以降のデータのみが格納されている。今はまだあんまりイメージがわかないが資料によると、この使い方はScalaプログラミングにおいては頻出するものらしい。型によるパターンマッチパターンには値のみではなく、特定の型を指定することも出来る。名前:マッチする型さっそく試してみる。Literal"が大文字に変換されたものが表示された。上記のAnyRefはJavaのObject型に相当する方で、あらゆる参照型の値を格納することが出来るとのこと。Cのvoid*やperlのリファレンスみたいなもんか?JVMの制約による型のパターンマッチの落とし穴Scalaを実行するJVMの制約により正しくパターンマッチが行われないケースがあるので注意が必要なようだ。具体的には以下のように型変数を使った場合が該当する。foundList[Int]Scalaコンパイラの「型消去」により、List[Int]のInt部分が消されるのでチェックが出来ない作りらしい。そのため上記match式のcaseは同様のcaseとして扱われることになる。同様のcaseが複数あった場合、パターンマッチが上から順番に実行される関係で2番目のパターンマッチは到達しないコードになる。型変数を含む型をパターンマッチする場合にはワイルドカードパターンを行うこといいとのこと。最初と最後の文字が同じ英数字であるランダムな5文字の文字列を1000回出力してください。いう値は、呼びだす度にランダムな5個の文字(Char型)のリストを与えます。以上のコードで生成されたリストの一部分を利用するだけでよく、最初と最後の文字が同じ英数字であるリストになるまで試行を続ける必要はありません。a)のようにしても良いということです。}}Listの中身をどうやって書き換えるんだ??と思って調べたけどmutableらしいのでとりあえず新しい変数作る方向で書いてみた。0)とりあえずmatch式はめちゃくちゃ強力な構文でこれから頻出しそうなのでもう少しいろいろいじってみたい。制御構文(1)引き続きScalaのお勉強を。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。