アカウント名:
パスワード:
もしかしたら「Spec#」がやっている事と同じ事の紹介かも知れませんが,ちょっと Spec# は詳しくないので,代わりに Curl の例を紹介させてくださいませ.
Curl は HTML の代わりだからプログラミング言語とは違うのでは?とか言われる事がありますが,とんでもない,れっきとした関数型チックでオブジェクト指向的なプログラミング言語であります. 「nullの無い世界」とはちょっと違いますが,Curl には,ある変数が null か否かをコーディングの段階ではっきり意識せざるを得ない仕組みが搭載されています.
|| ←これはコメントです.|| Something クラスの変数 obj を宣言し,初期化しています.|| {Something} は Something クラスのコンストラクタを呼び出しています.{let obj:Something = {Something}} || null を代入しようとすると,コンパイルエラーとなります.|| obj は null になる事が出来ない変数です.{set obj = null} || error || クラス名の前に # をつけて宣言しておけば,null になる事ができる変数となります.{let obj2:#Something = null} || obj を obj2 に代入する事は出来ます.{set obj2 = obj} || obj2 を obj へ単純に代入しようとするとコンパイルエラー.|| obj2 は null の可能性があるからです.|| (上で obj を obj2 に代入していますが,コンパイラはそこまでは見ません){set obj = obj2} || error || {non-null} 関数をかませる事で,やっと代入できるようになります.|| もしここで obj2 が null であれば,例外が投げられます.|| さすがにそういうのは,コンパイル時には解決できないですわな.{set obj = {non-null obj2}}
もちろん,わけのわからない人が何でもかんでも # をつけて null 可の変数ばかり使ってしまっては,ほとんど意味のない仕組みではありますけども.
Java でも @NonNull アノテーションが提案されていたりするし,C++ でも,スマートポインタをうまいこと改造して同様の仕組みを作り上げる事が出来るはずです (自分なりにはやった事があります.本格的にはやってませんが). これからの言語は,「null か否かを意識せざるを得ない仕組み」が常識になればいいのになーと思っています.
もうちょっと古典的な例でいえば、(リレーショナル)DBには「NOT NULL」という概念が普通に存在してますね。
それはそうと、NULLもそうだし、あと別件だが例えばStringの長さとかもそうなんだけど、それらは「型」の概念にいれてしまっていいんじゃないか?と思う。
そういう意味では、
>Java でも @NonNull アノテーションが
アノーテーションなんてメタな仕組みに逃げるんじゃなく、言語仕様からきちんと磨きなおして欲しいもんだ、と、たとえばJavaについては頻繁に思いますね。
注:「型が違う」ことと「代入互換でなくなる」こととはイコールではありません。ただ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ソースを見ろ -- ある4桁UID
Curlの例 (スコア:2, 興味深い)
もしかしたら「Spec#」がやっている事と同じ事の紹介かも知れませんが,ちょっと Spec# は詳しくないので,代わりに Curl の例を紹介させてくださいませ.
Curl は HTML の代わりだからプログラミング言語とは違うのでは?とか言われる事がありますが,とんでもない,れっきとした関数型チックでオブジェクト指向的なプログラミング言語であります.
「nullの無い世界」とはちょっと違いますが,Curl には,ある変数が null か否かをコーディングの段階ではっきり意識せざるを得ない仕組みが搭載されています.
もちろん,わけのわからない人が何でもかんでも # をつけて null 可の変数ばかり使ってしまっては,ほとんど意味のない仕組みではありますけども.
Java でも @NonNull アノテーションが提案されていたりするし,C++ でも,スマートポインタをうまいこと改造して同様の仕組みを作り上げる事が出来るはずです (自分なりにはやった事があります.本格的にはやってませんが).
これからの言語は,「null か否かを意識せざるを得ない仕組み」が常識になればいいのになーと思っています.
Re: (スコア:0)
もうちょっと古典的な例でいえば、
(リレーショナル)DBには「NOT NULL」という概念が普通に存在してますね。
それはそうと、
NULLもそうだし、あと別件だが例えばStringの長さとかもそうなんだけど、
それらは「型」の概念にいれてしまっていいんじゃないか?と思う。
そういう意味では、
>Java でも @NonNull アノテーションが
アノーテーションなんてメタな仕組みに逃げるんじゃなく、言語仕様からきちんと磨きなおして欲しいもんだ、と、たとえばJavaについては頻繁に思いますね。
注:「型が違う」ことと「代入互換でなくなる」こととはイコールではありません。
ただ
Re: (スコア:0)
というか、RDBとは何かちゃんと分かっていますか?
Re: (スコア:0)
一知半解を書いて突っ込まれるのが嫌だからですか?