トピックの目的(および即座の免責事項)は、 初心者が次のようなものを見たときに緊張性up迷に陥らないようにすることです。
user[(os[((user.microsoft_adept ? microsoft : apple).system || "linux")].install_carma <= user.carma) ? "install" : "cant_install"](os[((user.microsoft_adept ? microsoft : apple).system || "linux")].name);
そしてもう一つの免責事項。 決してソースコードをこの方法でフォーマットすることを強くお勧めします。そうしないでください。 しかし、人生の状況はさまざまであり、さまざまなモンストロイド構造を読み取ることができると便利な場合があります。 彼らが言うように、敵は自分で知る必要があります。 しかし、それにもかかわらず、このおridgeの成分のいくつかは、特定の状況で非常に役立つ可能性があります。
進み、祈り、順番に
オブジェクト、プロパティ、およびメソッド
var obj = { property: 0, method: function() {} }
これは、プロパティプロパティとメソッドメソッドを持つオブジェクトであり、いくつかの方法でアクセスできます。
obj.property; //, obj.method(); obj["property"]; // , obj["method"]();
三項演算子
単純な条件付き構成の単純な記録が必要です。 したがって、たとえば、次の条件 if (a > b) { console.log("a b"); } else { console.log("a b"); }
短く書くことができます:
(a > b) ? console.log("a b") : console.log("a b");
またはさらに短くなり、三項演算子の優先度が低くなります。
console.log( (a > b) ? "a b" : "a b" );
条件演算子||
Javascriptは、デフォルト値を設定するのに便利な最初のゼロ以外の値を返すという点で興味深いです。 function get_object(id) { return document.getElementById(id) || " "; // id « », }
function do_something() { return false || 0 || Math.PI || " ?"; // }
ラムに戻る
上記に照らして、元の例の何かがより明確になりますが、それを分析します。 パズルは次のとおりです。
user[(os[((user.microsoft_adept ? microsoft : apple).system || "linux")].install_carma <= user.carma) ? "install" : "cant_install"](os[((user.microsoft_adept ? microsoft : apple).system || "linux")].name);
var user = { microsoft_adept: false, // carma: 10, // install: function(system) { console.log("I'am installing " + system + "!"); }, cant_install: function(system) { console.log("I can't install " + system + "..."); } } var os = { windows: { name: "Windows", install_carma: 30 //, }, macos: { name: "Mac OS", install_carma: 50 }, linux: { name: "Linux", install_carma: 70 } } var microsoft = { system: "windows" } var apple = { system: "macos" }
第一に、私たちは有名なイタリアの彫刻家として行動し、不必要なものをすべてカットします。 次の構成が判明します。
user[ () ? "install" : "cant_install"]();
何らかの条件の結果に応じて、ユーザーオブジェクトの対応するメソッドが呼び出されることはすぐに明らかです。 つまり、条件がtrueの場合はインストールし、falseの場合はcant_installです。 どちらのメソッドにもパラメーターとして何かが渡されます。 私はこれに対処することを提案します:
os[((user.microsoft_adept ? microsoft : apple).system || "linux")].name;
何かは、ユーザーの好みに応じて、目的のオペレーティングシステムの名前です。 私はそれを綴ります:ユーザーがマイクロソフト製品を好むなら、マイクロソフトオブジェクトのシステムプロパティを読みます。 そうでない場合、プロパティはAppleオブジェクトでも読み取られます。 そのようなプロパティが存在しない場合(Vendekapetsなど)、Linux以外のユーザーには何も残りません。 したがって、次の3つのオプションのいずれかを取得します(オブジェクトモデルを参照)。
os[microsoft.system].name; // . . Windows os[apple.system].name; // . . Mac OS os["linux"].name; // . . Linux
ユーザーオブジェクトでinstallメソッドを呼び出すかcant_installを呼び出すかを決定する条件では、ユーザー設定と「市場の状況」に応じて同じ方法でinstall_carmaプロパティを取得し、このプロパティの値をcarmaプロパティとユーザーオブジェクトの値と比較します。 ユーザーのカルマが十分である場合、すべてが正常です-ユーザー["install"]メソッドを呼び出します。 そうでない場合は、すべて順調ですが、ユーザー["cant_install"]メソッドを呼び出して、パラメーターとして呼び出されたシステムの名前を渡します。
例のソースコードは完全です(コピーアンドペースト用)
var user = { microsoft_adept: false, // carma: 10, // install: function(system) { console.log("I'am installing " + system + "!"); }, cant_install: function(system) { console.log("I can't install " + system + "..."); } } var os = { windows: { name: "Windows", install_carma: 30 //, }, macos: { name: "Mac OS", install_carma: 50 }, linux: { name: "Linux", install_carma: 70 } } var microsoft = { system: "windows" } var apple = { system: "macos" } user[(os[((user.microsoft_adept ? microsoft : apple).system || "linux")].install_carma <= user.carma) ? "install" : "cant_install"](os[((user.microsoft_adept ? microsoft : apple).system || "linux")].name);
おわりに
繰り返しになりますが、この記事は主に、読む必要のあるさまざまな「エイリアンコード」に対処しなければならない初心者のJavascriptプログラマを対象としています。 さらに、いくつかの非自明なjs構文の例が役立つ場合もありますが、(原文のまま!)記事ではその方法の例を示していることを何度も思い出します! 常に美しく読みやすいコードを書くようにしてください。 そして、私は有名な格言を引用することを控えることができません:「あなたのプログラムに同行するすべてのプログラマはあなたが住んでいる場所を知っている暴力的なサイコパスであるという仮定に基づいてコードを書きます。」