アカウント名:
パスワード:
>X座標を保持する変数にはpx、重さを保持する変数にはkg
用にそれぞれ別の型を宣言してやればいいんですよ。
>そうすれば、pxA + kgX という式は
コンパイラがワーニングかエラー吐いてくれますよ。こんな機械に判定させておけば良い物に人間が煩わされるなんて馬鹿馬鹿しい。
普通ここまでやらないのはパフォーマンスがどうとか使い勝手がどうとかいう話が絡んでくるからで、アプリケーションハンガリアンなんてもんは所詮妥協の産物ってこった。
長さとか質量とか、物理量の場合には、異なる次元の物理量同士の加減は誤りである可能性が高いですが、乗除は誤りとは言えません。たとえば、速度を得るには長さを時間で割りますよね。
とはいえ、なんでもかんでも関数にしたら、そういう計算をしたい箇所の数が猛烈に多い場合には面倒だ。特にCみたいに関数リテラルとかが書けない言語だと悲惨。せめてLispくらい「関数」が便利な言語ならばまだいいんだけども。
Lispなら「xを足す関数」から「5を足す関数」を「作る」のは容易だけど、Cとかだと超面倒だ。LispよりCのほうが、関数の数にたいするコーディングの手間の処理量オーダーが大きい。(Cのように支援が乏しいと毎回丸々書く羽目になるからO(n)だが、Lispだともっと少ないのだろう)
とはいえ、次元計算の支援機能もまた無いCでは、「関数をあまり書
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
にわかな奴ほど語りたがる -- あるハッカー
ハンガリアン記法とか (スコア:0)
Re: (スコア:3, 参考になる)
char szHogeHoge[64]のようなシステムハンガリアンを使うことについては、僕も大嫌いですが。
Re: (スコア:0, すばらしい洞察)
同意しない。だって、そういう目的なら、それ用の型を準備して使えばいいわけで。
暗黙に決めた名前ルールでどうにかしようなんて馬鹿げてて、型でシステマティックに解決するべきです。Javaのような部類の言語(静的型付言語)ならそれができるよね。
けっきょく、ハンガリアン記法なんてものは、静的に型を明示できない言語で型名を変数名に入れているだけだよね。しかもアドホックに。
Re: (スコア:0)
例えば、X座標を保持する変数にはpx、重さを保持する変数にはkgというプリフィックスを付けましょうということです。
そうすれば、pxA + kgX という式は誤りである可能性が非常に高いということが字面だけでわかります。
これは型でどうこうできるものではないのは理解いただけると思います。
(むろん言語のほうでどうにかすべきで、curlではなんとかしていますが)
いや、存じてるでしょ (スコア:0)
>X座標を保持する変数にはpx、重さを保持する変数にはkg
用にそれぞれ別の型を宣言してやればいいんですよ。
>そうすれば、pxA + kgX という式は
コンパイラがワーニングかエラー吐いてくれますよ。こんな機械に判定させておけば良い物に人間が煩わされるなんて馬鹿馬鹿しい。
普通ここまでやらないのはパフォーマンスがどうとか使い勝手がどうとかいう話が絡んでくるからで、アプリケーションハンガリアンなんてもんは所詮妥協の産物ってこった。
Re: (スコア:0)
長さとか質量とか、物理量の場合には、異なる次元の物理量同士の加減は誤りである可能性が高いですが、
乗除は誤りとは言えません。たとえば、速度を得るには長さを時間で割りますよね。
Re:いや、存じてるでしょ (スコア:0)
違います。
速度を得るには、距離と時間から速度を計算する関数を呼ぶべきです。
異なる意味の数値どうしの演算をしている箇所を限定することでレビューやテストがやりやすくなるし、
異なる意味の数値どうしの演算や代入を機械的に排除することでバグを発見しやすくなります。
Re: (スコア:0)
とはいえ、なんでもかんでも関数にしたら、そういう計算をしたい箇所の数が猛烈に多い場合には面倒だ。
特にCみたいに関数リテラルとかが書けない言語だと悲惨。
せめてLispくらい「関数」が便利な言語ならばまだいいんだけども。
Lispなら「xを足す関数」から「5を足す関数」を「作る」のは容易だけど、Cとかだと超面倒だ。
LispよりCのほうが、関数の数にたいするコーディングの手間の処理量オーダーが大きい。
(Cのように支援が乏しいと毎回丸々書く羽目になるからO(n)だが、Lispだともっと少ないのだろう)
とはいえ、次元計算の支援機能もまた無いCでは、「関数をあまり書