.Netプログラミング入門

#.Netプログラミング入門
.Netには3つの言語が存在する。それぞれの言語には文化が異なる。

|言語|C#|VB.net|F#|
|---|---|---|----|
|中心的なパラダイム|オブジェクト指向|手続き型(構造化)プログラミング|関数型プログラミング|
|思想|抽象化指向|具体化指向|抽象化指向|
|名称について|短くてわかりやすい名前が好まれる|長い名前が好まれる|短くてわかりやすい名前が好まれる|
|重視|効率性重視|拡張性重視|できるだけコンパイル時にバグを検出|
|型付け|比較的強い|比較的弱い|とても強い|
|コードの行数|スクリプト言語と変わらないくらい|Javaくらい|スクリプト言語と変わらないくらい|
|似ている言語は|Kotlin,Java,Swift,C++,Python等|かなり独自の特性を持つ言語|Delphi,Haskell,OCaml,Python(インシデント)等|
|初心者におすすめか|初心者でも習得しやすく応用性があるためこの中で一番オススメ|他の言語を覚えるつもりがないなら|オススメ出来ない。まず他の言語を覚えてから|

それでは試しに書いてみます。

```csharp:ex.cs
using System;
using System.Collections.Generic;
using System.Linq;

class ex{
    static int Combi(int F = 10, int S = 6){
        if (S == 0 || S == F)
            return 1;
        else if (S == 1)
            return F;
        return Combi(F - 1, S - 1) + Combi(F - 1, S);
    }

    static void Main(){
        Console.WriteLine("Hello World C Sharp");
        var Ls = new List<int>(Enumerable.Range(0, 100));
        var Txt = "";
        foreach (var i in Enumerable.Range(0, Ls.Count)){
            Ls[i] = i;
            Txt += (i + 1).ToString() + "番目の値は" + Ls[i].ToString() + "です。\n";
        }

        //(略)可変長配列を使った演算(Ls)
        Console.WriteLine(Txt + "\n値を2つ入力");
        var (i1, i2) = (int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()));
        Console.WriteLine("{0}C{1}の組み合わせは{2}です", i1, i2, Combi(i1, i2));
    }
}
```

```vb:ex.vb
Imports System
Imports System.Collections.Generic

Module ex
    Private Function Combination(ByVal Optional First As Integer = 10, ByVal Optional Second As Integer = 6) As Integer
        If Second = 0 OrElse Second = First Then
            Return 1
        ElseIf Second = 1 Then
            Return First
        Else
            Return Combination(First - 1, Second - 1) + Combination(First - 1, Second)
        End If
    End Function

    Public Sub Main()
        Console.WriteLine("Hello World Visual Basic")
        Dim Lists As List(Of Integer) = New List(Of Integer)()
        Dim Texts As String = ""
        For i = 0 To Lists.Count - 1
            Lists.Add(i)
            Texts &= (i + 1).ToString() & "番目の値は" & Lists(i).ToString() & "です。" & Environment.NewLine
        Next

        '''(略)可変長配列を使った演算(Lists)
        Console.WriteLine(Texts)
        Console.WriteLine("値を2つ入力")
        Dim Integer1 As Integer = Integer.Parse(Console.ReadLine())
        Dim Integer2 As Integer = Integer.Parse(Console.ReadLine())
        Console.WriteLine("{0}C{1}の組み合わせは{2}です", Integer1, Integer2, Combination(Integer1, Integer2))
    End Sub
End Module
```

```fsharp:ex.fs
open System

let rec Combi F S =
    if S = 0 || S = F then 1
    elif S = 1 then F
    else (Combi (F-1) (S-1))+(Combi (F-1) S)

let rec TTT (k:int[]) i =
    if i = 1 then i.ToString()+"番目の値は"+k.[i-1].ToString()+"です。\n"
    else (TTT k (i-1))+i.ToString()+"番目の値は"+k.[i-1].ToString()+"です。\n"

let Num () = [|Int32.Parse(Console.ReadLine());Int32.Parse(Console.ReadLine())|]

[<EntryPoint>]
let main args =
    printfn "Hello World F Sharp"
    let Ls = [|for i in 0 .. 100 -> i|]
    printfn "%s" (TTT Ls (Ls.Length-1))
    //(略)配列を使った演算(Ls)
    printfn "2つの数値入力"
    let num = Num()
    Console.WriteLine("{0}C{1}の組み合わせは{2}です",num.[0],num.[1],Combi num.[0] num.[1])
    0
```

まあこんな感じですC#とかF#は非常に効率よく書くことができます。C#の場合これ以上短い書き方もありますが、これ以上短くすると可読性が悪くなるのでやめました。プログラミング初心者がまず最初に関数型プログラミングをやるのは、あまり資料が少ないため、オススメできないです。2つ目の言語以降に関数型プログラミングを挑戦してみよう。私として(.Net)プログラミング初心者はまず資料が多い、C#をまずやってみることをオススメします。C#は基本的に可読性重視で可読性が高い点も評価できます。他人のソースを見た時にC++ほど沢山の書き方がなく、VB.netより短い書き方をする人が多いので、わかりやすいです。他人のソースを読みたいのなら、Linqなんかもやっておきましょう。