九九の表です。コップ本に命令形と関数型プログラミングの例がありました。出来るだけ忠実にVBで置き換えたつもりです。関数型でプログラミングしたと言えるでしょうか?変数を使った時点で、違います、という事でしょうか?
6行目から23行目は、命令形の例です。関数型の例では、(多分、一応)Functionだけ使ってますが…。
九九の表です。コップ本に命令形と関数型プログラミングの例がありました。出来るだけ忠実にVBで置き換えたつもりです。関数型でプログラミングしたと言えるでしょうか?変数を使った時点で、違います、という事でしょうか?
6行目から23行目は、命令形の例です。関数型の例では、(多分、一応)Functionだけ使ってますが…。
システム的にはF#に近いですね。あるいはOCamlとか。
要するに「オブジェクト指向を組み合わせた」関数型言語です。
原則、オブジェクト指向と関数型プログラミングは相性が悪いんで、こういう言語処理系は確かに珍しいです。
あんまない。
> 命令形でも書けます。
うん、でも大体どのプログラミング言語でも命令形で書けますね。Lispでも書ける。
結局、誘惑は「アセンブリ言語のように書く」事で、割に人間ってそっちに寄っちゃうんですよ(笑)。「あれ」とか思ってる内にそっちに近づいていく。
だから「抑制する」のはかなり練習しないと出来なかったりするのかもしれません。
> VBよりは関数型寄りかもしれません。
まぁ、VBは手続き型ですしね。FullBASICよりはC言語に近い、って感触ですが。
> 長い間の習慣で、簡単には関数型にはいけませんね。なのであっち行ったり、こっち来たりを続けると思います。
いいんじゃないですか(笑)? 楽しければ(笑)。
でもScalaは純粋な関数型プログラミングではないので、命令形でも書けます。これが悪いと言えば、そうかも知れません。100%関数型で書けない理由になっている気もします。でもVBよりは関数型寄りかもしれません。
長い間の習慣で、簡単には関数型にはいけませんね。なのであっち行ったり、こっち来たりを続けると思います。
ああそうなんですか。VisualBasicってPascal形式なんですね。知らんかったです。
一応調べてみたらreturn文もあるらしいんだけど、あんまポピュラーじゃないのかな。
だとしたら関数型プログラミング、ですね。大丈夫です。
コピーを渡される以上、オリジナルは変更されてないんでO.K.です。
ごめんなさい。
> Bardに質問したら、Visual Basic の関数型はLINQが該当するみたいな回答でした
あー、LINQ。
うん、関数型・・・まぁ関数型なんだけど、恐らく遅延評価に近いかな。
> マイクロソフトもVBでは関数型プログラミングは不可能とも、言ってません。
出来るでしょうね。ちと面倒臭いだけ、で。
例えばオブジェクト指向じゃない言語でも「オブジェクト指向風に」は書けるんですよ。
単に言語がそれをサポートしてくれたらラクだ、ってだけの話と言えば話です。
> Forループ自体が駄目ってこともないでしょう。
ないです。
ただ、Forループでマズいのは「変数の破壊的変更目的」で使うユースケースが多いから、ですよね。
当然、Forループでも破壊的変更を避ける、あるいは破壊的変更してもそれはコピー対象に対して、ってぇのなら大丈夫です。
> 関数型の純粋な感覚は、対応した言語で可能なんですかね。
はい、可能でしょう。F#とかScalaとかだとそうでしょうね。
ByVal row as Integerのrowのことでしょうか?
破壊してないと思いますが…。認識不足ですかね?ByValだと、コピーが渡される。
Visual Basic の場合は、Functionのリターンは書かないのが普通で、(書けたかなあ?)ファンクション名に代入した形式が、関数の返り値だと思います。
なかなかcametanさんの書いていることが理解できません。(笑)
Bardに質問したら、Visual Basic の関数型はLINQが該当するみたいな回答でしたし、マイクロソフトもVBでは関数型プログラミングは不可能とも、言ってません。Forループ自体が駄目ってこともないでしょう。関数型の純粋な感覚は、対応した言語で可能なんですかね。
だから「関数型プログラミング」じゃないと思います。