こんにちは!
とびろぐ管理人のとびうおです。
今回は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]
このように定義をすると、
このように返ってきます。
少し、ややこしいので解説しますね。
まず、以下のような配列を定義すると、以下のようなのが帰ってきます。
[[x,y]|x <- [1,2,3], y <- [4,5,6]]
配列の生成だね!
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]
省略されてしまっているのを、
しっかり理解しておけばわかりやすいよ!
まとめ
以上でwhereとletの解説を終わりたいと思います!
どれも、綺麗に描くために必要なものだということがわかったかと思います!
whereとletを理解して、
Haskellマスターを目指そう!
プログラミングの記事は他にも!
とびろぐでは他にもプログラミングの多くの記事を出しています!
見たい方はぜひ見てみてください↓↓
最新のテクノロジーに関する記事の一覧です。
コメント