私は関数型プログラミングが初めてで、不変性の概念を理解していません。たとえば、不変変数。
たとえば、標準 ML (SML) では次のようになります。
val a = 3
val a = a + 1
2 行目は variable の値を「変更」しませんa
。ただし、その後はa
等しい4
。誰かがこれを説明できますか?
また、「無変異」(不変性)のメリットは何ですか?
私は関数型プログラミングが初めてで、不変性の概念を理解していません。たとえば、不変変数。
たとえば、標準 ML (SML) では次のようになります。
val a = 3
val a = a + 1
2 行目は variable の値を「変更」しませんa
。ただし、その後はa
等しい4
。誰かがこれを説明できますか?
また、「無変異」(不変性)のメリットは何ですか?
変数が不変であると言うとき、それ自体の値を変更できないことを意味します。あなたがそこで見せているもの
val a = 3
val a = a+1
is: の新しい値はa
、 の古い値を単純に「シャドウイング」しますa
。a
は にバインドされた単なる名前であり3
、2 行目では にバインドされてい4
ます。の古い値はa
まだ存在していますが、アクセスできないだけです。
ある種のデータ構造を使用している場合、これはより明確に見られます。他の多くの言語で見られるようなミューテーター メソッドはありません。たとえば、 list がある場合val L = [1,2,3]
、 の最初の値を変更する方法はありませんL
。完全にシャドウL
し、新しいリストを作成して古いリストをシャドウする必要があります。
そのため、新しい値の宣言をバインドするたびに、現在のすべての名前/値のバインドで新しい環境が作成されます。これらのバインディングはどれも変更できず、単にシャドウされています。