generated at
変数束縛構文
タイトル #要編集
「束縛構文」?


よくある = が本当に良いのか問題

手続き的な言語では
c
int a = 42; // 左辺に右辺を代入する
関数型言語では
hs
let a = 42 -- 右辺の値を左辺に束縛する
elixir
ex
a = 42 # パターンマッチを用いる
Erlangでも同じ
数学の = と同等の意味
go
型推論を用いるときは := を使う
go
var hoge int = 42 hoge := 42
perl
いろいろある ref
Perl全く知らないので間違ってるかも↓
pl
$global = "global variance" my $config = "hoge" # レキシカル変数 our $config = "hoge" # `use strict`した場合のglobal変数の宣言 local $config = "hoge" state $config = "hoge" # サブルーチンに状態を持たせる特殊なレキシカル変数
js
var, const, let
rust
let
nim
let, var
kotlin
var, val

変数名の命名
Ruby
スコープに合わせて変数名の記号を変えた
グローバル変数: $foo
インスタンス変数: @foo

変数宣言時の予約後
letの意味
使役や許可を表す英単語の「let」から来てる。由来はLispかそれより前。








例えばさ、
先に式を書いて、その結果を変数に代入するとかは?
design
if b { return 42 } => hoge
これが微妙なときは逆も書けるとか
design
hoge <= if b return 42 hoge <= 42
これを採用した時に、どういうデメリットが出そうか
個人的に微妙だと思うものにif文とかがあるが、それはこれで解決できないか

てかそもそも関数型言語などでは、値に名前を付けることは代入ではなく、束縛なのだから、わざわざ = 使わなくても良くないか?
例えば、 tag とか name 関数にしてはどうか
design
tag hoge 2 // hoge = 2 name piyo 42 // piyo = 42
しかしこうすると、明示的に型を指定できなくなる
design
// (:)演算子とか hoge: 42

design
hoge := 42
デメリット
LL(1)では実装できなくなる
hoge だけを見た時に、それが変数定義なのか、変数呼び出しなのかが確定できない
「次の次のToken」が、 := かそれ以外かでパースする関数を変える必要がある


ちょっとずれるけど関連しそうな話
ローカル変数とスコープの話↑

そうか、Haskellの let x = 1+2 も遅延評価されるのか
つまり↑と書いただけでは、 x に入っているのは 3 という値ではなく、 1+2 という計算、式



関連