C#とScalaで関数型言語プログラミング
C#でラムダ式が使えるということで・・・
次のScalaとC#のコードは同じ意味です。
confrim.cs
class Program
{
static void Main(string[] args)
{
loopCall(10, nTimes(5));
}
static void loopCall(int max, Func<int, int> func)
{
for (int i = 1; i < max+1; i++)
{
Console.Write(func(i) + " ");
}
}
static Func<int, int> nTimes(int times)
{
return n => n * times;
}
}
confrim.scala
object Plactice{
def main(args: Array[String]){
loopCall(10, nTimes(5))
}
def loopCall(n:Int, func:(Int) => Int) ={
for(i <- 1 to n)
print(func(i) + " ")
println
}
def nTimes(times : Int) : (Int) => Int = {
(value : Int) => value * times;
}
}
出力結果
5 10 15 20 25 30 35 40 45 50
関数型言語Scalaと比べて、関数型言語の様な記述を取り入れたに過ぎないC#はちょっと書き方が面倒ですね。Func
型を新たに利用しているのが面倒です。ラムダ式なんだから、main
内で定義しても良かったのですが、そこはScalaのコードと退避させるという意味合いで...
ラムダ式なんてややこし言い方をするから、ややこしくなるのであって要は「処理を動的に変更可能な関数」を受け渡せること、と自分の中で理解。
しかし、C#はわりとJavaと対等な存在として説明されている気がしますが、言語仕様の拡張や改良でガンガン変わるC#と、ほとんど変わらないJava。あげくに、言語の開発者に見捨てられてJVMで動く別の言語ということになったりと・・・。この差はどこでついたんでしょうかね。
Author And Source
この問題について(C#とScalaで関数型言語プログラミング), 我々は、より多くの情報をここで見つけました https://qiita.com/numa08/items/0ffb676dcf0afff5d78b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .