プログラミング言語で「しかし」
rashita2: 考えてみると、プログラミングにおいてはある行と次の行が逆接でつながっている、ということはない。ある意味すべてが順接だし、それはつまり順接ですらない(実行順に並んでいるだけ)とも言える。 rashita2: if 文もあるが、それは実行順(行)の制御であって、行と行の「内容」が順接ではない形で表現されているわけではない。 nishio: 「プログラミング言語で『しかし』をどう表現するか」 たしかに下記だと「しかし」ではなく「ただし」だしな
code:ts
let x = 0; // xは0である
if(some_condition()){ // ただしある条件が満たされたときは
x = 1; // xは1である
}
「Aである、しかしBである、なのでCである」って展開はプログラミング言語で書くときには「Cである」だけ書いてAとBはコメントとかになりそう
dankogai: perl には "0 but true" という表現があって、数値として評価すると0だが真偽値だと真になる nishio: それってx but yが「数値としてはxだが真偽値としてはyになるオブジェクトを作る二項演算」ということですか? dankogai: 演算ではなく(スケーラー)値。もちろん文字列としては引用符の中身の通り。値の型は評価時に定まる torus: しかしって、人に指示する時には使わないから命令型プログラミングでは使いどころがなさそう。 でも宣言型の言語ならありかな。
Haskell の関数は最も一般的なケースを最後に書くけど、順番を逆にして 2 行目以降にしかしをつけるとか。
torus: 人に命令するのにやたらと「とは言え」っていう人いたな。 無理のないペースで進めてください。とは言え今が正念場なので週末はないと思ってください。
arton: 今日なら会える。しかし今日以外は無理。 today? ? i.can : i.cant
しかしは「:」
nishio: たしかに(ifではなく) elseやcatchなら「しかし」っぽさがある code:ts
if (you.age >= 18) { // あなたが18歳以上なら
you.watch(this_site); // あなたはこのサイトを見る
} else { // しかしそうでないなら
return; // 帰れ!
}