ホームページ >バックエンド開発 >PHPチュートリアル >If ステートメントを使用しないプログラミング例
今後は、私たちのビジネスを実装する際に if ステートメントを使用しないようにしてください。
if を使用しないことでどのようなメリットがあるのか疑問に思うかもしれません。そうですね~、明らかなメリットはなく、考え方を変えて問題を解決するだけかもしれません。 if-else に問題はありませんが、場合によっては、if-else の数が多いとコードが読みにくくなる可能性があります。以下に、その謎を感じるのに役立ついくつかの例を示します。
コーディングのヒント: if ステートメントを使用せずにコーディングしてみてください
整数型の配列が与えられた場合、その中の奇数の数を数えますarray
const arrayOfIntegers = [1, 4, 5, 9, 0, -1, 5];
if実装
let counter = 0; arrayOfIntegers.forEach((integer) => { const remainder = Math.abs(integer % 2); if (remainder === 1) { counter++; } }); console.log(counter);
Non-if実装
let counter = 0; arrayOfIntegers.forEach((integer) => { const remainder = Math.abs(integer % 2); // 偶数除2的余数为零,奇数的余数为一 counter += remainder; }); console.log(counter);
注: 上記の 2 つの例では、forEach は元の配列を変更し、メソッドは variable
であり、現在の関数型プログラミングに違反します。 不変の概念については心配しないでください。この記事の焦点ではありません。 2 つの例を比較すると、if ステートメント
の実装の方が互換性が高く、配列要素が 10 進数
である状況にも適応できます。配列要素が浮動小数点型の場合、2 番目の例は正しく動作しません。 可变的
,违背了当下所提倡的函数式编程immutable
理念,不用在意,不是本文关注点。两个例子比较而言,if语句
的实现可能更具兼容性,可以适应于数组元素是小数
的情况。若数组元素为浮点类型,第二个例子就无法正常使用。
实现一个函数,日期对象 new Date()
作为输入,根据不同日期返回当天是工作日
还是周末
。
if实现
const weekendOrWeekday = inputDate => { const day = inputDate.getDay(); if (day === 0 || day === 6) { return 'weekend'; } return 'weekday'; // Or, for ternary fans: // return (day === 0 || day === 6) ? 'weekend' : 'weekday'; }; console.log(weekendOrWeekday(new Date()));
非if实现
const weekendOrWeekday = (inputDate) => { const day = inputDate.getDay(); return weekendOrWeekday.labels[day] || weekendOrWeekday.labels['default']; }; weekendOrWeekday.labels = { 0: 'weekend', 6: 'weekend', default: 'weekday' }; console.log(weekendOrWeekday(new Date()));
有没有注意到,if语句
中的数字代表哪天是周末,判定条件分布的较为零散,我们需要做的是将数字和周末或工作日
类型对应起来,如例子2,可以使用一个对象或者map来存储对应关系。
上述两个例子对比,可以明显看出非if代码
实现具有更好的可读性和扩展性
实现一个doubler函数,根据输入不同,做如下处理:
若输入是number
类型, 做翻倍处理(5 => 10, -10 => -20)
若输入是string
类型,重复每个字符('hello' => 'hheelloo')
若输入是function
类型,调用执行两次函数
若输入是array
类型,对数组的每个元素做doubler
处理
若输入是object
类型,对对象的每个属性做doubler
处理
switch
实现
const doubler = (input) => { switch (typeof input) { case 'number': return input + input; case 'string': return input .split('') .map(letter => letter + letter) .join(''); case 'object': Object.keys(input) .map(key => (input[key] = doubler(input[key]))); return input; case 'function': input(); input(); } }; console.log(doubler(-10)); console.log(doubler('hey')); console.log(doubler([5, 'hello'])); console.log(doubler({ a: 5, b: 'hello' })); console.log( doubler(function() { console.log('call-me'); }), );
非switch
实现
const doubler = (input) => { return doubler.operationsByType[typeof input](input); }; doubler.operationsByType = { number: (input) => input + input, string: (input) => input .split('') .map((letter) => letter + letter) .join(''), function: (input) => { input(); input(); }, object: (input) => { Object.keys(input) .map((key) => (input[key] = doubler(input[key]))); return input; }, }; console.log(doubler(-10)); console.log(doubler('hey')); console.log(doubler([5, 'hello'])); console.log(doubler({ a: 5, b: 'hello' })); console.log( doubler(function() { console.log('call-me'); }), );
和Challenge #2类似,将条件值聚合在一起做统一处理。
当if-else
的判断条件较多时,将条件做集中处理(用object存储其对应关系--条件做key,处理做value)。好处是增删某个条件变得容易,代码更加可读,提倡使用key-value
对应来取代一部分的if-else
日付オブジェクト new Date()
を入力として受け取り、その日が であるかどうかを返す関数を実装します。別の日付に基づく営業日
> まだ週末
です。
if実装rrreee非if実装
rrreee if文
内の数字は週末を表しており、判定条件の分布が比較的分散していることに気づきましたか。必要なのは、数値を結合することです。例 2 のように、weekend または Weekday
タイプに対応させるには、オブジェクトまたはマップを使用して、対応する関係を保存できます。 上の 2 つの例を比較すると、non-if code
実装の方が可読性とスケーラビリティが優れていることが明確にわかります
課題 #3: doubler 関数 (ここではドラゴン)、翻訳は次のとおりです。出てこない~気まずい~ doubler 関数を実装し、さまざまな入力に応じて次の処理を実行します:
number 型の場合
、Double 処理を実行します (5 => 10、-10 => -20)🎜string
型の場合、各文字を繰り返します('hello' => ; 'hheelloo')🎜function
型の場合、関数を 2 回呼び出して実行します🎜array code> タイプの場合、配列の各要素に対して <code>doubler
処理を実行します🎜
object タイプ、オブジェクトの各属性に対して <code>doubler
処理を実行します code>doubler は 🎜switch
実装を処理します🎜rrreee 🎜非 switch
実装🎜rrreee🎜 課題 #2 と同様に、条件値が統合処理のために集約されます。 🎜🎜まとめ🎜🎜 if-else
の判定条件が多い場合、条件を一元的に処理します(対応関係をオブジェクトに格納し、条件をキーにして処理を行います)値)。利点は、特定の条件の追加または削除が簡単になり、コードが読みやすくなることです。if-elsekey-value
対応を使用することをお勧めします。 /code> 条件判定。 🎜🎜関連する推奨事項: 🎜🎜🎜🎜 if ステートメントの現状、展望、機会について話す🎜🎜🎜🎜 PHP に基づく elseif ステートメントのコード例の概要🎜🎜🎜🎜 SQL の if ステートメントの詳細な説明🎜🎜以上がIf ステートメントを使用しないプログラミング例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。