タグ付けされた質問 「data-types」

5
C ++のすべてにオブジェクト(プリミティブ型ではなく)を使用するのは理にかなっていますか?
私が取り組んでいる最近のプロジェクトでは、次のような多くの関数を使用する必要がありました。 static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude, double plane_roll, double plane_pitch, double plane_heading, double gimbal_roll, double gimbal_pitch, double gimbal_yaw, int target_x, int target_y, double zoom, int image_width_pixels, int image_height_pixels, double & Target_Latitude, double & Target_Longitude, double & Target_Height); だから私はこのように見えるようにそれをリファクタリングしたい: static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle, PixelCoordinate …

4
なぜCでshort、int、longが発明されたのですか?
私は作成の正確な目的何であったか、トラブルの理解を抱えているshort、intとlongCのデータ型を? 私が尋ねる理由は、サイズが制限されているようには見えないことです- たとえば、shortより小さい限り、どんなサイズでも構いませんint。 では、バイナリの互換性が望めない場合、どのような状況で、たとえばの代わりにunsigned intまたはを使用する必要がありますか?unsigned longsize_t (サイズがわからない場合は、どれをいつ選択するかをどのように知りますか?)
16 c  data-types 

2
代数データ型の用途は何ですか?
私は代数データ型について読んでいます(Richard Minerichのおかげで、この概念のこの素晴らしい説明を見つけました)。私は和の種類や製品の種類などの概念を理解していると思いますが、パターンマッチングを指定する以外に、代数的データ型がどのように役立つかについてはあまり理解していません。パターンマッチングを超えたADTで他にできることは何ですか? 編集:私は開発者がオブジェクトで行うことができないADTで何ができるかを尋ねていません。ADTで許可されている他の操作があるかどうかを尋ねています。たとえば、ADTが採用されている場合、関係するタイプについて追加の推論を行うことができますか?ADTは、それなしでは不可能な、ある種の型分析を容易にしますか?

16
2点で長方形を定義する背後にある考え方は何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 これが意味をなさないということではありませんが、99%の時間でうまくいきません。 多くの場合、2Dグラフィックスでは、長方形はポイントのペアとして初期化、保存、および操作されます。特定の言語ではなく、 class Rect: p1, p2: point 次のように、長方形を2つのx値と2つのy値として定義する方が理にかなっています。 class Rect xleft, xright: int ytop, ybottom: int 2つのポイントで、ソースコードのどこかでトップのy値を使用したい場合は、rect.p1.y(hmmm、stop and think、p1またはp2)を言う必要がありますが、 4つの値をプレーンデータメンバーとして、明確かつ直接的なものにします。rect.ytop(思考は不要です!)2つのポイントを使用することは、垂直を扱う際に水平を絡ませる必要があることを意味します。独立した要素間には無関係な関係があります。 この2点のアイデアはどのようにして生まれたのですか?裸のx座標とy座標よりも利点がありますか? 追記:この質問は、ウィンドウマネージャーやGUIツールキットなどのXYに配置された四角形のコンテキストに関するものであり、描画および描画アプリの任意の図形のコンテキストではありません。

2
型理論の正しい用語:型、型コンストラクタ、種類/並べ替え、値
前の質問への回答では、特定の構成体の正しい用語について小さな議論が始まりました。私は(以外の質問見つからなかったので、このまたはその明確にこの問題に対処するため、非常に正しいことではない、)、私はこの新しいものを作っています。 疑わしい用語とその関係は、type、type constructor、type parameter、kinds or sorts、およびvaluesです。 また、ウィキペディアで型理論を確認しましたが、それでもそれほど明確にはなりませんでした。 したがって、適切な参照回答を得るために、自分の理解を確認するために: これらのことはどのように適切に定義されていますか? これらのそれぞれの違いは何ですか? それらは互いにどのように関連していますか?

4
データベースの日付データ型の十字軍について:有効ですか?価値がある?他の誰かがそれを感じますか?
SOに関するSQLの質問に答えるのに多くの時間を費やしています。私はこのilkのクエリに頻繁に出くわします: SELECT * FROM person WHERE birthdate BETWEEN '01/01/2017' AND '01/03/2017' SELECT * FROM person WHERE birthdate BETWEEN '2017-01-01' AND '2017-03-01' SELECT * FROM person WHERE birthdate BETWEEN 'some string' AND 'other string' つまり、指定されたパラメータの文字列から日付への暗黙的な変換(不良)に依存するか、データベースがx、000,000個のデータベース行値を文字列に変換し、文字列比較を実行します(悪い) 私は時々コメントをします。特に、スマートな回答を書くのが高回答ユーザーである場合、私は本当に自分のデータ型でだらしない/文字列を入力するべきではないと思う人 コメントは通常、to_date(Oracle)、str_to_date(MySQL)、convert(SQLSERVER)、または同様のメカニズムを使用して、文字列を明示的に日付に変換した方が良いと思われる形式を取ります。 --oracle SELECT * FROM person WHERE birthdate BETWEEN TO_DATE('20170101', 'YYYYMMDD') AND TO_DATE('20170301', 'YYYYMMDD') --mysql …

6
3値変数または3状態変数を格納するのに最適なデータ型
免責事項:私はデータ型が使用しているスクリプト/プログラミング言語に少し主観的であることを知っています。好みの問題としてPythonで記述したいのですが。私はどんな言語/実装についても聞いてうれしいです。 3状態変数を格納するのに最適なデータ型は何ですか?ポジティブ、ニュートラル、ネガティブを可能にする、または表す何か。 例:整数-1、0、1。 プロ:非常に簡潔です。 長所:潜在的に効率的、単一の2ビット符号付き整数として格納できます。 Pro:浮動小数点乗算器などのスケールとして使用できます。 実施例2: 、0、null(1または任意の順列) メリット:非中立的なユースケースは、バイナリの場合があります。 欠点:動的データ型が必要です 短所:簡潔ではない可能性があります。 例3:+、(空の文字列)、- プロ:非常に簡潔です。 欠点:文字列ロジックを利用して状態を判断する可能性があります。 プロ?:直感的なグラフィック表現。 おそらく、私が想像もできないような巧妙なことを実行できる巧妙なバイナリロジックがいくつかあるでしょう。 また、3値状態をデータベースエンジンに格納するように調整する場合の考慮事項はありますか?参考としてInnodbのように。

1
注目すべきC拡張には、動作がマシンのワードサイズに依存しない整数型が含まれますか
他のいくつかの言語と比較したCの興味深い特徴は、そのデータ型の多くが、絶対条件で指定されるのではなく、ターゲットアーキテクチャのワードサイズに基づいていることです。これにより、特定のタイプでは困難なマシンでコードを記述するために言語を使用できますが、異なるアーキテクチャで一貫して実行されるコードを設計することは非常に難しくなります。コードを考慮してください: uint16_t ffff16 = 0xFFFF; int64_t who_knows = ffff16 * ffff16; int16ビットのアーキテクチャでは(多くの小さなマイクロコントローラーに当てはまります)、このコードは明確に定義された動作を使用して値1を割り当てます。int64ビットのマシンでは、明確に定義された動作を使用して、値4294836225を割り当てます。int32ビットのマシンでは、-131071の値を割り当てる可能性があります(それが実装定義の動作か未定義の動作かはわかりません)。コードは名目上「固定サイズ」タイプであると想定されるもの以外は何も使用しませんが、標準では、現在使用されている2種類のコンパイラーが2つの異なる結果を生成し、今日の多くの一般的なコンパイラーが3番目を生成する必要があります。 この特定の例は、実際のコードでは2つの16ビット値の積を直接64ビット値に割り当てるとは思わないという点で、多少不自然ですが、3つの方法の整数を示す簡単な例として選ばれました。プロモーションは、固定サイズと思われるサイズの符号なしタイプと対話する場合があります。符号なしの型の数学を数学的な整数演算のルールに従って実行する必要がある現実の状況、モジュラー演算のルールに従って実行する必要のある状況、実際にそうでない状況があります問題ない。チェックサムなどの実世界のコードの多くは、算術に依存しており、少なくとも、未定義の動作をトリガーするのではなく、正確なmod 65536として定義されている結果を取得します。uint32_t算術ラッピングmod2³²におり、任意のを実行できます。uint16_t この状況は明らかに望ましくないと思われますが(多くの目的で64ビット処理が標準になると、より多くなります)、私が観察したC標準委員会は、いくつかの顕著な生産ですでに使用されている言語機能を導入することを好みます環境を「ゼロから」作成するのではなく、C言語には、型を格納する方法だけでなく、可能なプロモーションを含むシナリオでの型の動作をコードで指定できる顕著な拡張機能がありますか?コンパイラー拡張機能がそのような問題を解決する可能性がある少なくとも3つの方法を見ることができます。 特定の「基本的な」整数型を特定のサイズに強制するようにコンパイラーに指示するディレクティブを追加します。 ターゲットアーキテクチャ上の型の実際のサイズに関係なく、マシンの型が特定のサイズを持っているかのように、さまざまなプロモーションシナリオを評価するようコンパイラーに指示するディレクティブを追加します。 添加;(特定の特性を有するタイプに関係なく、基礎となるワードサイズの、MOD-65536ラッピング代数環として振る舞うべきであり、他のタイプに暗黙的に変換すべきではないこと、例えば宣言をタイプを宣言する手段を可能にすることによってwrap32には、int得られるはずが16ビットより大きいwrap32かどうかに関係なく、型の結果。ただしint、にwrap32直接aを追加するwrap16ことは不正です(どちらも他方に変換できないため)。 私自身の好みは3番目の選択肢です。なぜなら、異常なワードサイズのマシンでさえ、変数が2のべき乗サイズの場合と同じように「ラップ」する多くのコードで動作できるからです。コンパイラは、型を適切に動作させるためにビットマスキング命令を追加する必要がありますが、コードがmod 65536をラップする型を必要とする場合、ソースコードを乱雑にするよりも、それを必要とするマシンでコンパイラにそのようなマスキングを生成させる方が良いですまたは、そのようなマスキングが必要なマシンで使用できないため、単純にそのようなコードを持っています。しかし、上記の手段のいずれかを介して、または私が考えていない手段を介してポータブルな動作を実現する一般的な拡張機能があるかどうか、私は興味があります。 私が探しているものを明確にするために、いくつかのことがあります。最も顕著な: 望ましいセマンティクスを確保するためにコードを記述する方法は多数ありますが(たとえば、特定のサイズの符号なしオペランドで数学を実行して、明示的にラップするかしないかの結果を得るために実行するマクロを定義する)、または少なくとも望ましくないセマンティクス(たとえば、a が昇格しないコンパイラーで条件付きで型wrap32_tを定義し、その型が昇格するマシンでコンパイルに失敗する必要があるコードの方が、実行して偽の動作をもたらすよりも優れていると考える)将来の言語拡張機能で最も有利に動作するコードを記述する方法がある場合、それを使用することは、独自のアプローチを考案するよりも優れているでしょう。uint32_tuint32_twrap32_t 多くの整数サイズの問題を解決するために言語をどのように拡張できるかについて、かなり堅実なアイデアがあり、コードが異なるワードサイズのマシンで同一のセマンティクスをもたらすことを可能にしますが、それらを書くのにかなりの時間を費やす前にその方向でどのような努力が既に行われたかを知るため。 私は、C標準委員会または彼らが作成した作業を軽disするような見方を決して望みません。ただし、「自然な」プロモーションタイプが32ビットであるマシンと64ビットであるマシンで、数年以内にコードを正しく動作させることが必要になると思います。言語の控えめな拡張(C99 nnd C14間の他の多くの変更よりも控えめ)を使用すると、64ビットアーキテクチャを効率的に使用するクリーンな方法を提供できるだけでなく、バ​​ーゲンでも標準が歴史的に後方に曲げてサポートするために「異常なワードサイズ」のマシン(例えば、12ビットのマシンを可能にするchar、uint32_tmod2³²をラップする]。将来の拡張機能の方向に応じて、デフォルトの整数型が「期待される」ように動作する今日のコンパイラで使用できるマクロを定義できるようになると期待していますが、整数の将来のコンパイラでも使用できますタイプのデフォルトの動作は異なりますが、必要な動作を提供できる場所です。

1
HaskellのMaybeコンストラクターを「Just」と呼ぶことをサポートする直観は何ですか?
のようなオプションの型の直感は、Int Maybe Intがない(つまり、そこにNothingある)か、Int があるということです。そこに何かがあります。 それは私たちが「負」の場合の型コンストラクタを呼び出すように私には理にかなってNothing何もありませんということ-それは正確にすることを意味するので、Intそこに。しかし、なぜ実際にそこにある何かに重点が置かれている場合にだけ、単語を使用するのですか? 私にとって、「Just」という言葉には、説明しているものが代替品よりも少ないという意味が含まれています。実際にそこにある何かの反対。例えば、 A:今夜何かしますか? B:いいえ。私はただ滞在してテレビを見ます。 A:あなたの家の周りの不気味な幽霊の音を調査しましたか? B:ええ、実際には単なるフクロウでした。 明らかに、この命名の選択の根拠となった直感が欠けています。それは何ですか?私にとって、「Just」という言葉は、Maybeタイプでの使用方法の反対を意味します。

3
データ型のインターフェースの使用はアンチパターンですか?
モデルに(EFを使用して)さまざまなエンティティがあるとします(ユーザー、製品、請求書、注文など)。 エンティティが事前に決定されたセットに属しているアプリケーションでエンティティオブジェクトの要約を印刷できるユーザーコントロールを作成しています。この場合、ユーザーと製品の要約を要約できると言います。 要約にはすべてIDと説明しか含まれないため、このための簡単なインターフェースを作成します。 public interface ISummarizableEntity { public string ID { get; } public string Description { get; } } 次に、問題のエンティティについて、このインターフェイスを実装する部分クラスを作成します。 public partial class User : ISummarizableEntity { public string ID { get{ return UserID.ToString(); } } public string Description { get{ return String.Format("{0} {1} is from {2} and is …

4
整数はデータ型として使いすぎていませんか?
ほとんどのアプリケーション開発者は、本当に符号なし整数を使用するつもりで符号付き整数を使用していますか?私はいつもそれをしているので、同僚もそうします。他の多くの広範なコードベース(Delphi VCL以外)は見たことがなく、インターネット上の例では通常整数を使用しています。一方、VCL開発者は独自のデータ型を使用します(これは、変数を宣言するための最も非遅延的な方法です)。 このようなコードは少し恐ろしいようです TStuffRec = record recordID : Integer; thingID : Integer; otherThingID : Integer; end; それが次のように書けるとき TStuffRec = record recordID : Cardinal; thingID : Cardinal; otherThingID : Cardinal; end; 機能的には、これらのレコードはほぼ同じように機能します(64ビットDelphiでも同じように機能し続けることを期待しています)。ただし、非常に大きな数では変換の問題が発生します。 ただし、unsigned intを使用することにも欠点があります。主に2つを混合することがいかにうるさいかから生じます。 本当の質問は、これは実際にベストプラクティスについて考えられたり、ベストプラクティスに含まれたりすることですか?通常は開発者次第ですか?

2
言語設計では1つの数値タイプのみ
私は現在、コンパイラの構築と言語設計について学び、自分の言語でサポートしたいネイティブデータ型について考えています。現在、整数と実数を区別する多くの言語があります。しかし、私は彼が言ったダグラス・クロックフォードによる講演を見たのを覚えています。 システムに単一の数値タイプがあることは、間違った数値タイプを選択してバグを発生させることができないことを意味します 彼はまた、一般的に使用されているIEEE-754とは異なる数値表現をお勧めします(間違っている場合は修正してください)。したがって、私の質問:主に教育に重点を置いている汎用言語の場合、どの数値表現を使用する必要がありますか? 編集:教育的焦点を当てて、私は他の人を教育するためではなく、コンパイラについて学ぶ私の自身の進歩について話しています。

3
設計により異なるビット長によるITの制限の例[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 私は1年生向けにコース「プログラミング入門」を教えています。設計によって選択されたビット単位のデータ型サイズが特定の既知の制限または重要な値につながる興味深い例を見つけたいと思います。 ここではいくつかの例を示します。 Bellテレプリンターは7ビットコード(後でASCIIとして受け入れられる)を使用していたため、電子メッセージの添付ファイルを7ビットデータのみを含むようにエンコードすることがよくありました。 32ビットアドレス空間の従来の制限により、32ビットシステムで使用可能な最大4GbのRAMサイズと、FAT32で最大4Gbのファイルサイズが発生します。 データ型の選択(特にそのバイナリ長)が現代のITの世界にどのように影響したか、他に興味深い例をいくつか知っていますか。 コメントでいくつかの議論の後に追加されました: 制限を克服する方法を教えるつもりはありません。1バイトで-127..0 .. + 127 o 0..255の値を保持できること、2バイトで0..65535の範囲をカバーできることを彼らに知ってもらいたい。上記のbase64エンコーディングなど。基本的なデータ型を学習しているだけなので、これらの型の「大きさ」についての適切なリファレンスを見つけようとしています。

4
構造とクラスの起源
プログラマーが最初に構造とクラスを使用することを決定したときに、プログラマーが解決しなければならない設計と実装の問題は何ですか? これはいつ起こり、これらのアイデアの先駆者は誰でしたか? 構造とクラスは関連しているため、これは二重の質問です。構造はクラスよりもかなり古いことに気づきました。答えがそれらの両方について別々に話し、いくつかの出典を引用することは素晴らしいことです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.