/
最近
.rdf
追記
編集
設定
本棚
翌日へ
前日へ
脳log
[20210212]
2021年02月12日 (金)
「
Firestoreの解説通りに`doc.exists`で存在を確認してから`data = doc.data()`で取得しているので、undefinedになることはないはずだが、TypeScriptはそんなこと知らない。そこで例外を投げることにする。
」■さらっと「そこで例外を投げることにする」と続いているけれど、ここは思想の違いが現れる部分だと思う。自分が同じ立場なら「TypeScript は馬鹿」って言いかねない(「
実行時エラーをコンパイルエラーにしたいのだとしよう。だけど視野が狭い。こちらは gets が nil を返すかどうか、そのような入力が与えられるかどうかに関する知識を持っており、nil が返るような入力が仕様違反であることを知っている。バグがあったときに修正すべき対象は Crystal のソースコードではなく、そのような入力を与えた外部にある。事の決定権はコンパイラにはない。
」)。■ところが今回は立ち位置が異なっていて、(そう書いてあったからといって)ドキュメントは undefined でないことを保証してくれないよね、doc.exists で存在確認をした瞬間と doc.data() で内容を取得した瞬間は異なる世界に属しており、doc.data() が undefined を返すかどうかは doc.data() を呼んでみるまでわからないよね、という考え方をする。他プロセスと競合するファイル処理、他スレッドと競合する並列処理ではだいたいそうだと思う。■これは一貫性のないご都合主義なのだろうか。それとも競技プログラミングというルールに支配された世界と理想から離れた現実世界の違いを反映しているだけだろうか。この件ではたまたま TypeScript がしてきた指摘に異議はなかったけど、俺は差し出がましい道具に勝手に判断を下されること、選択を縛られることが嫌いだ。さっきリンクした日記から>「
人類の手には多少余るとしても、プログラマを信頼し、力を与えてくれる言語が好きだ。安全のためと称して枷をはめようとする言語は選ばない。安全な
鈍
(
なまくら
)
は退屈だ。
」■git は素直でパワフルな道具>
20181118p01
。リンカは素直で馬鹿な道具>
20181102
。Nintendo Switch の UI>「
「あまりに親切すぎるUIは冗長になる」という考えのもと、プレーヤーを信頼して意図をはっきりさせたかった
」。ユーザーの意図を反映するかわりに押しつける道具>
20150410
。
翌日へ
前日へ