問題タブ [null]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 「as」と正確性、柔軟性、およびパフォーマンスのための特殊な方法を使用した C# の Equals のオーバーライド
C# で正確で柔軟かつ高速な Equalsを実装する最善の方法について考えてみました。パフォーマンスのためには、特殊な Equals (実際のクラスのオブジェクトをパラメーターとして受け取る) が必要であると考えました。コードの重複を避けるために、一般的な Equals は特殊化された Equals を呼び出す必要があります。継承されたクラスであっても、null チェックは 1 回だけ実行する必要があります。
私は最終的にこのデザインを思いつきました:
重要なアイデア:
- 「as」演算子の使用。このようにして、一般的な Equals で null をチェックする必要がなくなります。間違ったクラス タイプは null に縮小され、特殊化された Equals に分類されます。
- 派生クラスであっても、正確に 1 点で Null チェックを行います。
- 属性を次々に確認すると、明確な構造が得られます。
この概念に欠陥はありますか、それとも条件を逃しましたか?
javascript - JavaScript に「null」値があるのはなぜですか?
JavaScript には、基本的に「存在しない」という 2 つの値があります -undefined
とnull
.
プログラマーが何も割り当てていないundefined
プロパティは になりますが、プロパティが になるnull
にnull
は、明示的に割り当てられる必要があります。
プリミティブな値であり、オブジェクトであるため、 null
becauseの必要性があると考えたことがあります。実際には、どちらもプリミティブ値です。つまり、どちらも空のオブジェクトに変換されるため、コンストラクター関数から返すことも返すこともできません (コンストラクターで失敗を宣言するにはエラーをスローする必要があります)。undefined
null
typeof null
'object'
undefined
null
また、どちらもfalse
ブール値のコンテキストで評価されます。私が考えることができる唯一の本当の違いは、一方が に評価されNaN
、もう一方0
が数値コンテキストで評価されることです。
では、なぜ両方が存在し、プロパティが設定されているかどうかを調べようとするときにundefined
誤っnull
てチェックしているプログラマーを混乱させるだけなのでしょうか?null
私が知りたいのは、代わりにnull
使用して表現できなかったものを使用する必要がある合理的な例を誰かが持っているかどうかです。undefined
したがって、一般的なコンセンサスは、undefined
「そのようなプロパティは存在しない」ことをnull
意味し、「プロパティは存在しますが、値を保持しない」ことを意味するようです。
JavaScript 実装が実際にこの動作を強制する場合、私はそれundefined
を受け入れることができますが、完全に有効なプリミティブ値であるため、既存のプロパティに簡単に割り当ててこの契約を破ることができます。したがって、プロパティが存在するかどうかを確認したい場合は、in
演算子を使用する必要がありhasOwnProperty()
ます。undefined
繰り返しになりますが、との個別の値の実用的な用途は何null
ですか?
私は実際にはundefined
、もう使用していないが、したくないプロパティの値を設定解除したいときに使用しますdelete
。null
代わりに使うべきですか?
c++ - エラー: 'NULL' はこのスコープで宣言されていません
gcc 4.3 で C++ をコンパイルすると、このメッセージが表示されます
現れたり消えたりして、その理由がわかりません。なんで?
ありがとう。
xml - i:nil="true" とはどういう意味ですか?
私は xml を持っており、その中に i:nil="true" を含むノードがあります。どういう意味ですか?
例えば:
それは以下とは異なる意味ですか?
もしそうなら、違いは何ですか?
.net - リフレクションを使用してプロパティ値を Nothing (Null) に設定する
編集: LoveMeSomeCode からの回答に基づいて、この問題は VB.Net でのみ発生すると思います。
変更されたプロパティの古い値を辞書に保存し、元に戻す必要があるときにリフレクションを介して設定することにより、クラスを以前の状態に戻そうとしています。古い値が Nothing (null) の場合、プロパティを設定しようとすると null 参照例外が発生するという問題があります。これが私が試したことです。
次のような for each ループを想定します。
方法 1:
方法 2:
方法 3:
これらのメソッドごとに、pair.Value が null の場合に null 参照例外が発生します。セッターは null 値を保持できます (多くの場合、プロパティは文字列です)。何が間違っているのか、どうすれば回避できますか?
編集: null を直接渡すと、各メソッドは失敗します。
編集:誰かに役立つ場合のスタックトレースは次のとおりです。
方法 1 System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。Microsoft.VisualBasic.CompilerServices.Symbols.Container.InvokeMethod (メソッド TargetProcedure、オブジェクト [] 引数、ブール値 [] CopyBack、BindingFlags フラグ) で Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet (オブジェクト インスタンス、型の種類、文字列 MemberName、オブジェクト[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean OptimisticSet, Boolean RValueBase, CallType CallType) Microsoft.VisualBasic.CompilerServices.Versioned.CallByName(Object Instance, String MethodName, CallType UseCallType, Object[] Arguments) at myProject myfileの .Presenter.CustomerDetailPresenter.RevertCustomer() : 378 行目
方法 2 System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。---> System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。私のプロジェクトで.Presenter.CustomerDetailPresenter.set_City(String value) --- 内部例外スタック トレースの終了 --- System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle .InvokeMethodFast (オブジェクト ターゲット、オブジェクト [] 引数、シグネチャ sig、MethodAttributes methodAttributes、RuntimeTypeHandle typeOwner) で System.Reflection.RuntimeMethodInfo.Invoke(オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [] パラメーター、CultureInfo カルチャ、ブール値の skipVisibilityChecks) でSystem.Reflection.RuntimeMethodInfo.Invoke(オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、Object[] パラメーター、CultureInfo カルチャ) System.RuntimeType.InvokeMember(文字列名、BindingFlags bindingFlags、バインダー バインダー、System.Type.InvokeMember(文字列名、BindingFlags invokeAttr、バインダー バインダー、オブジェクト ターゲット、Object[] args)myProject .Presenter.CustomerDetailPresenter.RevertCustomer()
方法 3 System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。---> System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。私のプロジェクトで.Presenter.CustomerDetailPresenter.set_City(String value) --- 内部例外スタック トレースの終了 --- System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、Binder バインダー、Object[] パラメーター、CultureInfo カルチャ、ブール値の skipVisibilityChecks) での .InvokeMethodFast(Object ターゲット、Object[] 引数、シグネチャ sig、MethodAttributes methodAttributes、RuntimeTypeHandle typeOwner)
System.Reflection.RuntimeMethodInfo.Invoke (オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、Object [] パラメーター、CultureInfo カルチャ) で System.RuntimeType.InvokeMember (文字列名、BindingFlags bindingFlags、バインダー バインダー、オブジェクト ターゲット、Object [] providedArgs、 ParameterModifier[] 修飾子、CultureInfo カルチャ、String[] namedParams) の System.Type.InvokeMember(String 名、BindingFlags invokeAttr、Binder バインダー、オブジェクト ターゲット、Object[] args) at myProject .Presenter.CustomerDetailPresenter.RevertCustomer()
mysql - MySQL テーブルで NULL を使用する場合
false や空の文字列 '' とは異なる、データベース テーブル内の NULL 値のセマンティックな意味を理解しています。ただし、フィールドが null 可能である場合のパフォーマンスの問題についてよく読んでおり、NULL が実際に意味的に正しい場合は空の文字列を使用するようにアドバイスされています。
null 許容フィールドと NULL 値を使用するのに適切な状況は? トレードオフは何ですか?単純に NULL を完全に使用することを避け、空の文字列、false または 0 を使用して値がないことを示すのは賢明でしょうか?
アップデート
OK - '' と NULL のセマンティックの違い、および NULL が適切なフィールド値である (パフォーマンスに依存しない) 状況を理解しています。ただし、示唆されたパフォーマンスの問題について詳しく説明します。これは、Schwartz、Zeitsev らによる優れた「High Performance MySQL」からのものです http://www.borders.co.uk/book/high-performance-mysql-optimization-backups-replication-and-more/857673/ :
インデックス、インデックス統計、および値の比較がより複雑になるため、MySQL が null 許容カウントを参照するクエリを最適化するのは困難です。null 許容カラムは、より多くのストレージ スペースを使用し、MySQL 内部で特別な処理を必要とします。null 許容列がインデックス化されると、エントリごとに余分なバイトが必要になり、MyISAM で固定サイズのインデックス (単一の整数列のインデックスなど) が可変サイズのインデックスに変換される可能性さえあります。
詳細はこちら: Google ブックスのプレビュー
これが決定的な答えである可能性が非常に高く、私は第一線からのセカンドオピニオンと経験を探していました.
sql - SQLの「または」演算子。次のシナリオではどのように機能しますか?
私はクエリの最適化に取り組んでおり、SQLのOR演算子を常にどのように使用しているか疑問に思う状況に遭遇しました。(SQL Server 2000も)
条件付き(WHERE)句が次のようになっているクエリがあります。
これで、SQLのORが両方の式を評価することを常に理解しました。したがって、左の式でtrueと評価されたすべてのレコードが、右の式でtrueと評価されたすべてのレコードとともに返されます。例えば:
これにより、COL1が「テスト」であるすべてのレコードと、Col2が「データ」であるすべてのレコードが返されます。
上記の例では、次の条件でColumn2を変更しました。
突然、0行が返されました。
ORは、TRUEの結果が見つかるまで式を評価するだけであると誤解したことがありますか、それとも2つの異なる結果が異なる結果を返す原因となる条件がありますか?
javascript - jQueryでnullオブジェクトをチェックする方法
jQuery を使用しており、ページ内の要素の存在を確認したいと考えています。次のコードを書きましたが、機能しません。
要素の存在を確認するにはどうすればよいですか?
java - nullセーフなcompareTo()実装を簡素化するには?
compareTo()
このような単純なクラスのメソッドを実装しています ( Collections.sort()
Java プラットフォームによって提供されるその他の機能を使用できるようにするため):
これらのオブジェクトの自然な順序付けを次のようにしたいと考えています。1) 名前で並べ替え、2) 名前が同じ場合は値で並べ替えます。どちらの比較も大文字と小文字を区別しない必要があります。両方のフィールドで null 値は完全に許容されるためcompareTo
、これらのケースで壊れてはなりません。
頭に浮かぶ解決策は、次のようなものです (ここでは「ガード句」を使用していますが、他の人は単一のリターン ポイントを好むかもしれませんが、それは重要ではありません)。
これでうまくいきますが、私はこのコードに完全に満足しているわけではありません。確かにそれほど複雑ではありませんが、非常に冗長で退屈です。
問題は、(機能を維持しながら)どのようにこれを冗長にしないかということです。役立つ場合は、Java 標準ライブラリまたは Apache Commons を自由に参照してください。これを(少し)簡単にする唯一のオプションは、独自の「NullSafeStringComparator」を実装し、それを両方のフィールドの比較に適用することでしょうか?
編集 1-3 : Eddie の権利。上記の「両方の名前が null」の場合を修正
採用された回答について
もちろん、2009年にJava 1.6でこの質問をしましたが、当時、Eddieによる純粋なJDKソリューションが私の好みの受け入れられた回答でした。私は今まで(2017年)それを変えようとはしませんでした。
2009 Apache Commons Collections のものと 2013 Guava のもので、どちらも私が投稿したサードパーティのライブラリ ソリューションもあります。
私は今、Lukasz Wiktor によるクリーンなJava 8 ソリューションを受け入れられた答えにしました。Java 8 を使用している場合は、これが確実に優先されます。最近では、ほぼすべてのプロジェクトで Java 8 を使用できるはずです。