変数を使用して値を格納する

完了

通常、プログラムはすべて、データを操作する多くのステップから構成されています。 これらの全ステップを実行する過程で、断続的に発生する結果すなわちデータを、名前付き参照に格納することが一般的です。 そうすることで、後で、データを読み取ったり操作したりできます。 名前付き参照は、一般的に "変数" と呼ばれています。

変数。値をバインドする

変数は、値にバインドされた名前付き参照であり、コード内では参照し続ける必要があります。 F# では、値をバインドする方法と考えられています。 そのため、名前付き参照 (変数) に値を代入したり、バインドしたりします。 値をバインドするには、次のコードのように、let キーワード (ご利用の参照の名前) を使用して、それに値を代入します。

let name = "Chris"

name は名前付き参照であり、"Chris" がそのバインド値です。

変数に値を代入したら、変更することはできません。それは不変です。 次のコードはコンパイルされません。"エラー FS0027: この値は変更可能ではありません" のようなエラーが発生します。

let name = "Chris"
name <- "Luis" // not allowed

変更可能にする

変数は変更できますが、"変更可能" にしたいというシグナルが必要です。 次のコードのように、変数を定義する際にキーワード mutable を用いることで、コンパイル エラーを発生させることなく値を変更できます。

let mutable name = "Chris"
name <- "Luis" // this statement is now allowed

変数の型

F# には、さまざまな型が存在します。 型の多くは、小数点の有無にかかわらず、さまざまな大きさの数字を格納するためにあります。 その他の型は、テキスト文字列またはブール変数に関連しています。 F# の学習を始めたときに出会う可能性がある型の一覧を次に示します。

Type 説明
bool 設定可能な値は true または false です
INT -2,147,483,648 から 2,147,483,647 までの値。
string Unicode テキスト
float、double 64 ビット浮動小数点型。

型は推論される

変数を宣言するとき、型を指定することも省略することもできます。 変数を宣言するときに型を指定しない場合、変数に代入される値に基づいて、F# コンパイラが然るべき型を適切に推定します。 次のステートメントを考えます。

let age = 65 // int
let PI = 3.14 // float
let name = "my name" // string

コンパイラが然るべき型を "推論" し、正しい結果を得ます。 型を何にするか明示的に指定することもできます。 データを代入するには、次のコードのように variableName:<type> 構文を使用します。

let sum:float = 0.0

画面に出力したい場合が多くあります。 それにはさまざまな理由があります。例を以下に示します。

  • アプリケーションからの出力: アプリケーションが何らかの計算を実行した後、その結果を確認したい。
  • デバッグ: コードのデバッグの一環として、何が問題か理解するために、ある時点での結果を出力しなければならない。

画面に出力したい理由は他にもありますが、上の 2 つのシナリオが最も一般的です。

ではどのようにすれば、画面に出力できるでしょうか。 F# には、使用できる 3 つの異なる関数があります。 これらは printfprintfn、および Console.WriteLine です。 違いは何でしょうか。

  • printf: stdout にインラインで出力されます (改行文字なし)。
  • printfn: stdout に出力され、改行文字が追加されます。
  • Console.WriteLine: この関数は名前空間 System にあり、すべての .NET 言語で動作します。

違いは明らかになりましたが、どれを使用すればよいのでしょうか。 F# では、printfprintfn がより慣用的で好ましいとされています。

書式設定

画面へ出力する際に、テキストと数字を組み合わせる必要が生じる場合があります。 あるいは、出力に何らかの書式を設定する必要が生じる場合があります。以下にその方法の例をあげます。

  • 位置引数: 書式を設定するために、String.Format などの .NET 関数を使用できます。その場合、String.Format("My name is {0} and I live in {1}", "Chris", "UK") のように位置引数が使用されます。

  • 文字列補間: 変数とテキストを組み合わせるもう 1 つの方法は、いわゆる補間を使用する方法です。 これを使用するには、文字列の前に記号 $ を付け、中かっこ {} を付けてプレースホルダーであることを示します。 文字列補間を使用した例をこちらに示します。

    let name = "Luis"
    let company = "Microsoft"
    printfn $"Name: {name}, Company: {company}"
    

    次のように、中かっこで囲んで式を追加することもできます。

    let firstNumber = 2000
    let secondNumber = 21
    printfn $"The year is: {firstNumber + secondNumber}"
    

    Note

    補間を使用すると型チェックがないため、簡単に使用できると思われるかもしれません。 必ず正しく組み合わせるようにしてください。

  • 指定子: 出力しようとしているものの一部に書式指定子を使用することもできます。 指定子の使用は、F# で書式設定する最も一般的な方法です。 次に例を示します。

    let name = "Chris"
    printf "Hi %s" name
    // prints: Hi Chris
    

    ここでは、最初の文字列と変数 name を結合するためにどのようにフォーマッタ %s を使用するのか確認できます。

    Note

    %s や %i のようなフォーマッタを使用すると、コンパイラは型をチェックします。 位置引数が指定した型でない場合は、エラーが表示されます。

書式指定子

多くの書式指定子があります。 よく利用されるものは次のとおりです。

指定子 説明
%s 文字列とエスケープ文字を含まないコンテンツに使用されます printf "Hello %s" name
%d、%i 10 進整数として書式設定され、基本整数型が符号付きの場合は符号が付きます printf "Age: %i" 65
%b ブール値 true または false printf "Setting on: %b" true

書式設定については詳細な情報があります。 すべての機能について知りたい場合は、F# での書式設定のドキュメントを参照してください。