><https://twitter.com/orange_in_spacehttps://pawoo.net/@orange_in_space
ていうか小学校の算数で教えてる事って、実は型の構築(?)そのもの?><(つまり、式を組み立てる(?)って事は、みかんとかリンゴとかたかしくんとかを使って、どう計算すればよいのか?を定義してるわけじゃん?><)
これもある意味型システムの混乱?><;
あーかいきつねときつねのたーぬーき
ていうか、掛け算順序問題を方システムの導入で解決しようとすると、さっき書いたようなコード(C# なので冗長なのはアレだけど)的なものを小学生が算数の授業で書く事になっちゃう?><;(それってもしかして本格的な(?)圏論?><;(数学苦手なのでわからない><;))
太郎くんはりんごを3つ、花子さんはみかんを5つ買いました。あわせていくつでしょう。→20歳
そもそも現行の小学校の算数に型が無いんだからあれだけど><;(じゃあ未定義じゃん!!!><;)
小学校の算数の "いくつ" は整数型(?)であるみたいに受け取るべきなのかも?><;(って考えちゃうと「リンゴとみかんを足すと」「何が?><」って言えなくなってしまう><;)
とても難しい><;
太郎くんは単三電池を3本買ってきました。空には雲が1つ浮かんでいました。電池と雲はあわせていくつでしょう。
当たり前だけど、型推論してくれるから var c = a + b; でも型安全なまま(?)ちゃんと動くし小学校教諭並みには(?><;)ゆるふわな型システムだ><
出来ました><;(?)C#で75行のコード書いたよ!ブラウザ上で実行できるよ! https://paiza.io/projects/hMp6bCN2dd8h0TzML4EvwQ
あ!><; 普通に継承でもできる!><;(継承にして、AppleCountとMikanCount のFruitCountへの型変換の定義は削除でおk><; 思い込みで出来ないと思ってた><;)
ていうか色々ぐぐってると「そういうのはF# でやりましょう」的な色々が出てる気がしなくもない><;
?><;C# さん「インターフェイスに演算子を含めることは出来ません。」
interface実装するとか拡張メソッドとか…?
で、それらを実際に実装してみたら、こうかけるようになった>< もっと見る
AppleCount a = (AppleCount)5;MikanCount b = (MikanCount)3;FruitCount c = ((FruitCount)a + (FruitCount)b);
Console.WriteLine((int)c);
・・・ということは、リンゴとみかんの合計の果物の数を計算したい場合は、最低限『果物の数』の+演算子を実装すればよい・・・?><
あ><; 演算子も定義しないと全部intに型変換して計算するコードになるから型の意味が無い><;(=型安全じゃ無い)
さっきのc# のコードのやり方で、リンゴとみかんの数を型安全に計算したいのであれば、さっきのコードで『果物の数』と『リンゴの数』と『みかんの数』を作って、『リンゴの数』と『みかんの数』に『果物の数』への明示的な型変換をつければおk?><(言語仕様としての継承が使えないのでちょっとキモイけど><;)
使い方><; もっと見る
MyInt_MinimumImpl a = (MyInt_MinimumImpl)1;MyInt_MinimumImpl b = (MyInt_MinimumImpl)2;MyInt_MinimumImpl c = (MyInt_MinimumImpl)((int)a + (int)b);Console.WriteLine((int)c);
思考の /dev/null