新しいものを表示

話が無限に広がっちゃうけど、継承がないと、さっきからの例のような、壊れれない版と壊れてる版を作る時にも、ツリー状に関係を表現できなさそうで謎><;

壊れてない型を継承して、壊れてるインタフェースをくっつけた壊れてる型を作れば、「これって壊れてる型?(=壊れてるインタフェース持ってる?)」って型チェックもできるかも・・・><

(限定的な)多重継承できる言語、例えばC# (のインタフェース)ならば、IBroken(?><;)みたいなインタフェースを標準化して、壊れてる版はそれを混ぜた派生クラスを作ればエレガント・・・?><

orange さんがブースト
orange さんがブースト

そうなったとき、一番基本になる型は「必ず○○である」という制約を表明できる型であって、そういうものを作る。これを組み合わせて制約を弱くすることは簡単だし

スレッドを表示
orange さんがブースト

型でも同じようなことをやってほしくて、「なんでも単一の型を用意してドキュメントで補足するよりも、 Result とか Option とかその他『意味だけを表明する容れ物』を利用して意図する型を作る方がよい、という感じです

スレッドを表示
orange さんがブースト

たとえば「なんでも goto を使うより while や for や iterator を」とか「なんでも再帰を使うより map や filter や fold を」みたいなのと同じで、高階のものとパラメータを組み合わせることで制約を人間にとってわかりやすく、かつ機械が理解可能な状態で表現するということが可能になります

orange さんがブースト

ていうかRustとか的発想(?)で言うならば、「なんとか型」と「なんとかが壊れてる型」を作って、後始末に必要なものはどちらにも持たせるってすれば、オレンジの発想に近い?><

「壊れてるかもしれない」ってモデル、かなり楽な考えだと思うんだけど><;

URLだとあれだけど、URLの型の変数を作ろうとして準備してしまった何らかのリソースを失敗した結果好きな順番(環境上の都合に適した順番)で後始末したいって発想がある><;(小さなもの(?)なら例外の所から逆に破棄していけばなんとかなるけど、そうじゃない何らかのハードウェア上の都合とかがある場合に・・・><)

orange さんがブースト

Rust の話になってしまうけど、エラーも結局単なる型と値として扱われるので、特になにかフローが滅茶苦茶になったりすることはないです

orange さんがブースト

あと例外のフローについては、それは単に例外の扱いが悪い言語に慣れているのではみたいな気持ちです

orange さんがブースト

あとは「URL として正しいことが既に確約されている」という、特徴というか情報を型に持たせているという意識がある

スレッドを表示
orange さんがブースト

私は「Url 型の値として存在させる」こと自体が「URL として不正でないものとして扱っている」と見做しているので、その辺りか

壊れていても壊れていなくても後始末はしないといけないので、壊れてるって状態もあるモデル(という普段オレンジが物事を考える時に使う発想)が、ちょうどそれにぴったりかも的なアレかも><
(なので、逆に「状態なんてバグの原因にしかならない」って発想から見たら、状態なのでバグの原因かも><)

基本的にはURLとして不正な文字列を内部に持つUrlは存在しない方がいいかも>< なので不正ではないかのように扱おうとした瞬間に例外をはいてほしいんけど、
ただし!><;宣言や、コンストラクタを呼ぶ場面だけは例外出されて後始末の流れがぐちゃぐちゃになるのがいやなので、そんな変な事に><;

orange さんがブースト

1. String → Url
2. Url に対してなんらかの操作 (たとえば path を得るなど)

のどちらでエラーが出るかという話はわかるんですが、 URL として壊れた文字列の扱いについての言及がよくわからない

古いものを表示
:realtek:

思考の /dev/null