私はF#で始まり、構文の理解を進めています。しかし、私はF#の機能を使用する最良の方法については不明な点があります。 Pythonでは、私がどこから来ているのか、通常は「最良の」(ほぼ標準的な)方法があります。多分F#の場合もそうですが、私はそれを理解していません。だから私の質問は、F#の構文に関する技術的な質問ではなく、F#を使用する最良の方法についてです。Intellisenseを活用するコードを書くべきでしょうか?
最近、私は博士Eric Meijer (C9 Lectures - Functional Programming Fundamentals Chapter 2 of 13)
のビデオを見ました。Meijer博士はOIのドット表記法を賞賛し、Intellisenseが利用可能な方法のリストを表示することを認めました。彼は、そのような施設は純粋なFPで利用できないことを嘆いています。プログラマーが "前進する"のを助けることで、プログラミングがずっと簡単になります。
実験的なことは、もちろんIntellisenseがF#クラスで動作することを示しましたが、クラスと同様にドット表記を使用するF#レコードでも動作します。これは、Intellisenseを利用してクラスを書くことなく、自分のコードを形作ることができることを意味します(私は、F#クラスではレコードよりも重くて遅いと仮定しています。これは純粋なFPとOOPの間の中間の戦略があることを示している
// Create a record type with two values that are functions of two arguments
type AddSub = {add2: int -> int -> int; sub2: int -> int -> int}
// Instantiate a record
let addsub a =
{add2 = (fun x y -> a + x + y); sub2 = (fun x y -> a - x - y)}
// Returns 7, Intellisense works on (addsub 0).
(addsub 0).add2 3 4
// Returns 3, Intellisense works on (addsub 10).
(addsub 10).sub2 3 4
// Create two functions of three arguments
let add3 a x y = a + x + y
let sub3 a x y = a - x - y
// Also got 7, no Intellisense facility here
add3 0 3 4
// Also got 3, no Intellisense facility here
sub3 10 3 4
:レコードタイプを作成
次のコードは、同じ操作を実行するコードを書くの2つの方法(「バージョン」と呼ん)を示します上記のように、関数値を持つ。このような戦略は、オブジェクト(レコードインスタンス)を中心とした意味のある単位でコードを編成し、Intellisenseを使用できるようにしますが、継承やサブクラス多型などのクラスによって提供される機能の一部が欠けています。
OOPバックグラウンドから来ている私は、上のコードのa
のようなオブジェクトが、パラメータxとyよりも何らかの "重要"(この用語は未定義のままです)のようなものがあれば、コード構成とIntellisenseを使用する能力の根拠に基づいています。一方、OOPの複雑さによって燃え尽きると、私はむしろ「純粋な」FP領域にとどまります。
2つの極端な選択肢(OOPと純粋なFP)の間で、レコードの使用は価値のある妥協点ですか?
一般に、3つの選択肢(純粋なFP、上記のような記録、またはクラス)は、ある選択肢が他の選択肢より優先される状況に関する一般的なガイドラインは何ですか?
最後に、コードを整理したり、Intellisenseを利用したりするのに役立つ他のコーディング戦略がありますか?
恐ろしいです!ありがとう。私はモジュールを考えるべきだった。私はMeijer博士がIntellisenseを使用できないと不平を言ったことが私を捨てたものだと思う。しかし、彼はハスケルについて話していました。おそらく、ハスケルにはモジュールも同様の施設もありません。 – Soldalma
ええ、Haskellの標準的なプラクティスは、モジュールから関数をインポートするのではなく、修飾された関数を使用することです。そのため、Intellisenseにはあまり役に立ちません。 – Tarmil
@ Tarmil afaik、Haskell用の自動補完ツールがあります。https://github.com/rikvdkleij/intellij-haskell – Yawar