Haskellのwhere,let句について理解する

こんにちは!

とびろぐ管理人のとびうおです。

今回はHaskellのwhere,letについての理解を深めていきたいと思います!

とびうおくん
とびうおくん

where句を理解して、Haskell masterに近づこう!
ついでにletも解説しちゃうぞ!

Where句とは

where句というのは、関数の定義ないでローカルの変数や補助関数を定義するために使用されるものです。

このwhere句を使用することで、コードをより読みやすく、保守しやすくすることができます。

以下のように定義したとします。

関数の定義
  where
    ローカル変数1 = 値1
    ローカル変数2 = 値2
    ...
    補助関数1 = 関数の定義1
    補助関数2 = 関数の定義2
    ...

このように定義を行うと、それが定義されている関数の中のみで使うことができます。

とびうおくん
とびうおくん

pythonでいうところの
ローカルス変数ってやつだね!

こんな時に使える

例えば、2つの数の平均を計算する関数を考えてみます。

average x y = sum / 2
  where
    sum = x + y

このように定義すると、sumの計算を関数の主用部分から分離し、コードの可読性を向上させることが可能となります。

ちなみに、こういう書き方もできます。

average x y = sum x y / 2
  where
    sum c d = c + d
とびうおくん
とびうおくん

こういう書き方もできるかな?
というので書いてみるといいと思います!

letとwhereは似ている?

ここで、letと似ているのでは…?と思ったあなた。いいですね!

letというのは以下のような使い方をします。

let 変数1 = 値1
    変数2 = 値2
    ...
    関数1 = 定義1
    関数2 = 定義2
    ...
in 式

ここでは、whereの逆で、先に変数とか関数を定義するといった形になります。

先ほどの関数だと?

では、先ほどのaveraga関数だとどのようになるのでしょう?

以下のようになります。

average x y = let sum = x + y
              in sum / 2
とびうおくん
とびうおくん

letはinとセットだよ!

またはこのような書き方もできます。

average x y = let sum c d = c + d
              in sum x y / 2

先に、細かいものを定義すると言ったことができるので便利かもしれないですね。

ちなみに…

ちなみに、letは配列で使うと以下のように使えます。

[sum | x <- [1,2,3], y <- [4,5,6], let sum = x + y]

このように定義をすると、

Haskellのwhere,let句について理解する

このように返ってきます。

少し、ややこしいので解説しますね。

まず、以下のような配列を定義すると、以下のようなのが帰ってきます。

[[x,y]|x <- [1,2,3], y <- [4,5,6]]
Haskellのwhere,let句について理解する
とびうおくん
とびうおくん

配列の生成だね!

xに1,2,3をyに4,5,6を代入していくんだ!

ここで、xとyというのはsumで定義されているので、その合計が返ってくるというわけです。

少しわかりにくい場合は、以下の2つの式は同義というのをみれば理解しやすいかもです。

print $ [x+y|x <- [1,2,3], y <- [4,5,6]];
print $ [sum|x <- [1,2,3], y <- [4,5,6],let sum = x + y]
print $ [sum x y|x <- [1,2,3], y <- [4,5,6],let sumc d = c + d]
Haskellのwhere,let句について理解する 
とびうおくん
とびうおくん

省略されてしまっているのを、
しっかり理解しておけばわかりやすいよ!

まとめ

以上でwhereとletの解説を終わりたいと思います!

どれも、綺麗に描くために必要なものだということがわかったかと思います!

とびうおくん
とびうおくん

whereとletを理解して、
Haskellマスターを目指そう!

プログラミングの記事は他にも!

とびろぐでは他にもプログラミングの多くの記事を出しています!

見たい方はぜひ見てみてください↓↓

テクノロジー

最新のテクノロジーに関する記事の一覧です。

とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました