誰もが多かれ少なかれ、巨大な if else
を含むプロジェクト コードに遭遇したことがあると思います。複数のネストされた if else
は、メンテナンス中に非常に煩わしいものです。バグのトラブルシューティングを行った後、場合によっては、深刻な虚無感を感じます。
この記事は、if else
を排除したり差別したりすることを目的としたものではありません。誰もが if else
の有用性を知っています。ここでは、特定のシナリオにおける全員を対象としています。コードの可読性を高めるための追加のアイデアを提供してください。
ショートサーキット操作
JavaScript のロジックまたは ||
のショートサーキット操作を使用して、より単純な # を置き換えることができる場合があります。 ##if else
- 論理和の短絡演算
- ||
: 左辺が true に変換できた場合、左辺の式の値が返され、それ以外の場合は右側の式の値が返されます。
let c if(a){ c = a } else { c = b }上記のコードを見ると誰もが不快に感じるでしょう (私は強迫性障害を患っています)。これは明らかに非常に単純な判断ですが、これを実現するには、数行のコードを記述する必要があります。現時点では、ショートサーキット操作を使用してコードを簡素化できます。
let c = a || bこれのほうがずっとシンプルだと思いませんか?
三項演算子
三項演算子は誰もがよく知っているはずです。多くの場合、三項演算子を使用して簡単な判断を行うことができます。if の代わりにelse では、複数レベルのネストされた三項演算子も可読性が低いため、ここでは
1 レベルの 三項演算子のみをお勧めします。
const fn = (nBoolean) { if (nBoolean) { return 1 } else { return 0 } } // 使用三元运算符 const fn = (nBoolean) { return nBoolean ? 1 : 0 }三項演算子は、条件付き代入、再帰など、多くの場所でも使用されます...
// num值在nBoolean为true时为10,否则为5 let num = nBoolean ? 10 : 5 // 求0-n之间的整数的和 let sum = 0; function add(n){ sum += n return n >= 2 ? add(n - 1) : result; }; let num = add(10);//55
switch case
上記 2 つの方法、短絡演算と三値演算は非常に便利で、コードも非常に簡潔ですが、単純な判断にしか使用できません。複数の条件を判定する場合には使用できません。switch case は、確かに
else if よりも可読性は高いですが、書くのが面倒だと誰もが思うと思います (とにかく私は非常に面倒だと感じます) 。
let type = 'A' //if else if if (type === 'A' || type === 'B') { console.log(1); } else if (type === 'C') { console.log(2); } else if(type === 'D') { console.log(3); } else { console.log(0) } //switch case switch (type) { case 'A': case 'B': console.log(1) break case 'C': console.log(2) break case 'D': console.log(3); break; default: console.log(0) }
オブジェクト構成/戦略モード
オブジェクト構成は戦略モードと似ていますが、どちらも異なるパラメーター/アルゴリズム/関数に従って異なるデータを使用します。 。
let type = 'A' let tactics = { 'A': 1, 'B': 1, 'C': 2, 'D': 3, default: 0 } console.log(tactics[type]) // 1次に、誰もがよりよく理解できるように、いくつかの例を使用します。
ケース 1 ショッピング モールのプロモーション価格
一般ユーザーは割引なし、一般会員は 10% オフ、15 割引など、ユーザーに応じて割引を使い分けます。年間会員は % オフ、スーパー会員は 20% オフ。 Useif elseAchievement
// 获取折扣 --- 使用if else const getDiscount = (userKey) => { if (userKey === '普通会员') { return 0.9 } else if (userKey === '年费会员') { return 0.85 } else if (userKey === '超级会员') { return 0.8 } else { return 1 } } console.log(getDiscount('普通会员')) // 0.9Use objectconfiguration/strategy pattern to達成?
// 获取折扣 -- 使用对象配置/策略模式 const getDiscount = (userKey) => { // 我们可以根据用户类型来生成我们的折扣对象 let discounts = { '普通会员': 0.9, '年费会员': 0.85, '超级会员': 0.8, 'default': 1 } return discounts[userKey] || discounts['default'] } console.log(getDiscount('普通会员')) // 0.9上記のケースから明らかです。オブジェクト設定は、if else を使用するよりも読みやすいため、後でユーザー割引を追加する必要がある場合は、割引オブジェクトを変更するだけで済みます。 オブジェクト構成では、キーと値のペアを管理するために必ずしもオブジェクトを使用する必要はありません。
Map を使用して管理することもできます。たとえば:
// 获取折扣 -- 使用对象配置/策略模式 const getDiscount = (userKey) => { // 我们可以根据用户类型来生成我们的折扣对象 let discounts = new Map([ ['普通会员', 0.9], ['年费会员', 0.85], ['超级会员', 0.8], ['default', 1] ]) return discounts.get(userKey) || discounts.get('default') } console.log(getDiscount('普通会员')) // 0.9
ケース2 年末賞与
会社の年末賞与は、従業員の給与水準と業績に応じて支給されます。例えば、業績Aの人は給与の4倍の期末ボーナスがもらえるのに対し、業績Bの人は給与の3倍、業績Cの人は給与の2倍しかありません。 財務部門から、この会計ロジックを実装するためのコードの提供を要求された場合、どのように実装すればよいでしょうか? これは非常に簡単ではありませんか? たった 1 つの関数で実行できます。const calculateBonus = (performanceLevel, salary) => { if (performanceLevel === 'A'){ return salary * 4 } if (performanceLevel === 'B'){ return salary * 3 } if (performanceLevel === 'C'){ return salary * 2 } } calculateBonus( 'B', 20000 ) // 输出:60000このコードは非常に単純ですが、
calculateBonus 関数は比較的大きく、すべての論理分岐が
if else ステートメントに含まれていることがわかります。新しいパフォーマンス レベル D を追加でプラントするか、レベル A の倍数を 5 に変更する場合は、変更を加える前にすべてのコードを読む必要があります。
let strategies = new Map([ ['A', 4], ['B', 3], ['C', 2] ]) const calculateBonus = (performanceLevel, salary) => { return strategies.get(performanceLevel) * salary } calculateBonus( 'B', 20000 ) // 输出:60000この時点で、この要件は完了しましたが、プロダクト マネージャーは部門の区別を追加する必要があると言いました。その会社には D 部門と F 部門があり、D 部門の業績が良いため、期末賞与は 1.2 倍に増額され、F 部門の業績が悪いため、期末賞与は 10% 割引されます。 上記のコードを変換し、ステータス値を結合し、マップに保存します。
// 以绩效_部门的方式拼接键值存入 let strategies = new Map([ ['A_D', 4 * 1.2], ['B_D', 3 * 1.2], ['C_D', 2 * 1.2], ['A_F', 4 * 0.9], ['B_F', 3 * 0.9], ['C_F', 2 * 0.9] ]) const calculateBonus = (performanceLevel, salary, department) => { return strategies.get(`${performanceLevel}_${department}`) * salary } calculateBonus( 'B', 20000, 'D' ) // 输出:72000
End
この記事は主に、次のことを伝えることを目的としています。コードを最適化し、コードの読みやすさを向上させる方法はたくさんあります。 はif else を差別するという意味ではありません。将来のコードには
if else だけではないものがあることを願っています。
プログラミング ビデオをご覧ください。 !

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
