目次
ショートサーキット操作
三項演算子
switch case
オブジェクト構成/戦略モード
ケース 1 ショッピング モールのプロモーション価格
ケース2 年末賞与
ホームページ 見出し ヒントの共有: if-else の使用を減らし、コードの可読性を高めます。

ヒントの共有: if-else の使用を減らし、コードの可読性を高めます。

Oct 27, 2022 am 10:11 AM
javascript if-else

誰もが多かれ少なかれ、巨大な 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 レベルの 三項演算子のみをお勧めします。

例: 条件が true の場合は 1 を返し、それ以外の場合は 0 を返します:

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 よりも可読性は高いですが、書くのが面倒だと誰もが思うと思います (とにかく私は非常に面倒だと感じます) 。

例: A、B、C、D の 4 種類があります。A と B が出力されると 1 が出力され、C は 2 が出力され、D は 3 が出力されます。デフォルトの出力は 0 です。

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% オフ。

Use

if 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.9
ログイン後にコピー

Use 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 だけではないものがあることを願っています。

プログラミング関連の知識について詳しくは、

プログラミング ビデオをご覧ください。 !

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが