• ベストアンサー

ObjectPascalの型の認識について

全く基本的な質問だと思いますが 全然解りませんのでお聴きします。 Delphi3のお話なのですが たとえば TDateTime型は実際はDoubleと同じだと思いいますが, type TDateTime = type Double; ですから。(ここから間違えてますか?) Doubleがキチンと日付で表示されますが, TdateTimeを日付を表すと解釈するのは, どこでやっているのでしょうか? DateTimePickerなどでDoubleが日付を表すと解釈するのは どこでやっていますか? Doubleが日付を表すと解釈するのは,各ユーザープログラムが 勝手にやればいいのに,そうすれば型が減ってプログラミング が返って楽になりそうに思えるのですが・・・ この辺プログラマーがやることとコンパイラーがやることの切り分けが 曖昧模糊としています。

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

type TDateTime = type Double; これは合ってます。どちらも浮動小数点データ型です。 なので、 S1: TDateTime; S2: Double; と定義して、 S1 := S2; S2 := S1; と代入したり、 FloatToStr(S1); DateToStr(S2); としてもエラーにはなりません。 >Doubleがキチンと日付で表示されますが,TdateTimeを日付を表すと解釈するのは,どこでやっているのでしょうか? >DateTimePickerなどでDoubleが日付を表すと解釈するのはどこでやっていますか? それぞれのクラスで判断しています。 >Doubleが日付を表すと解釈するのは,各ユーザープログラムが >勝手にやればいいのに,そうすれば型が減ってプログラミング >が返って楽になりそうに思えるのですが・・・ 「楽になる」の意味が「自由にプログラミングできる」の意味であればそうかもしれません。 しかし、「楽になる」の意味が「開発効率が上がる」であれば、逆です。 「各ユーザープログラムが勝手にやればいいのに」ということは、プログラマに判断を任せるということです。つまり、それだけプログラマに負担がかかります。 日付の型が決まっていれば、プログラマはそこに入っている値が単なる数値なのかそれとも日付なのかを迷うことなくプログラミングできます。 また、後から見直したとき、型が決まっていれば、それだけよけいなことを考えなくても済みます。 大規模システムの場合、プログラミングテクニックよりも、開発効率やプログラムの見やすさを優先します。マニアックなテクニックはできるだけ避けたほうがいいのです。

dogbin
質問者

お礼

ありがとうございます。 私が化石のようなプログラマだからでしょうね。 ついついプログミングテクニックに走りたくなるのは 事実。 だってプラグラマ-ってそれがレゾンデートルでしょう? 少なくとも20年以上前は。 大規模システムは経験がないし,今も趣味でプログラミング しているだけなので,贅沢な悩みで失礼しました。 でも教えていただいたことはどれも非常に有益で, これからのプログラミングがますます楽しくなりそうです。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

type TDateTime = type Double; そうです、ここから間違っています どんな言語でもそうですが 4バイト整数、4バイト浮動小数は どちらも4バイトの領域を使ってデータを表現していますが中身は異なります つまり、本来4バイト整数として扱う領域なのに、4バイト浮動小数として表示してしまうととんでもない値が表示されてしまいます 変数(実際はオブジェクト)の型判定を間違えないようにするのは 結構神経を使って面倒です たぶん質問者は大規模なシステムを作ったことがないと思いますが 仮に扱うデータの個数が1000個あった場合に それらすべての型を記憶できますか?、できませんよね そんなことはコンパイラーに任せたほうが楽できます だから変数宣言には型が必要なんです

dogbin
質問者

お礼

ありがとうございます。 おっしゃる通りですが,ただ余りにもお仕着せの型が 多すぎるように感じてしまいます。 つい大きなお世話だと怒鳴りたくなってしまいます。 型は,今までのコンパイラー言語のように 整数,実数,文字列でたくさんだと思ってしまいます。 まあそのうちには慣れるでしょうが・・・

すると、全ての回答が全文表示されます。