If ステートメントを使用しないプログラミング例
今後は、私たちのビジネスを実装する際に if ステートメントを使用しないようにしてください。
if を使用しないことでどのようなメリットがあるのか疑問に思うかもしれません。そうですね~、明らかなメリットはなく、考え方を変えて問題を解決するだけかもしれません。 if-else に問題はありませんが、場合によっては、if-else の数が多いとコードが読みにくくなる可能性があります。以下に、その謎を感じるのに役立ついくつかの例を示します。
コーディングのヒント: if ステートメントを使用せずにコーディングしてみてください
課題 #1: 数値配列内に奇数がいくつあるか数えてください
整数型の配列が与えられた場合、その中の奇数の数を数えます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语句
的实现可能更具兼容性,可以适应于数组元素是小数
的情况。若数组元素为浮点类型,第二个例子就无法正常使用。
Challenge #2: 判断一个日期是周末还是工作日
实现一个函数,日期对象 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代码
实现具有更好的可读性和扩展性
Challenge #3: The doubler function (here be dragons),翻译不出来~尬~
实现一个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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









正規表現を使用して PHP 配列から重複値を削除する方法: 正規表現 /(.*)(.+)/i を使用して、重複値を照合して置換します。配列要素を反復処理し、preg_match を使用して一致をチェックします。一致する場合は値をスキップし、一致しない場合は重複値のない新しい配列に追加します。

1. プログラミングは、Web サイト、モバイル アプリケーション、ゲーム、データ分析ツールなど、さまざまなソフトウェアやアプリケーションの開発に使用できます。その応用分野は非常に幅広く、科学研究、医療、金融、教育、エンターテイメントなど、ほぼすべての業界をカバーしています。 2. プログラミングを学ぶことは、問題解決スキルと論理的思考スキルを向上させるのに役立ちます。プログラミング中、問題を分析して理解し、解決策を見つけてコードに変換する必要があります。この考え方は、分析能力と抽象能力を養い、実際的な問題を解決する能力を向上させることができます。

Golang を使用してブラウザベースのアプリケーションを構築する Golang は JavaScript と組み合わせて、動的なフロントエンド エクスペリエンスを構築します。 Golang をインストールする: https://golang.org/doc/install にアクセスします。 Golang プロジェクトをセットアップします。 main.go というファイルを作成します。 GorillaWebToolkit の使用: HTTP リクエストを処理するための GorillaWebToolkit コードを追加します。 HTML テンプレートの作成: template サブディレクトリに、メイン テンプレートであるindex.html を作成します。

C++ プログラミング パズルは、フィボナッチ数列、階乗、ハミング距離、配列の最大値と最小値などのアルゴリズムとデータ構造の概念をカバーします。これらのパズルを解くことで、C++ の知識を強化し、アルゴリズムの理解とプログラミング スキルを向上させることができます。

Python は、学習の容易さと強力な機能により、初心者にとって理想的なプログラミング入門言語です。その基本は次のとおりです。 変数: データ (数値、文字列、リストなど) を保存するために使用されます。データ型: 変数内のデータの型 (整数、浮動小数点など) を定義します。演算子: 数学的な演算と比較に使用されます。制御フロー: コード実行のフロー (条件文、ループ) を制御します。

Python は、問題解決の初心者に力を与えます。ユーザーフレンドリーな構文、広範なライブラリ、変数、条件文、ループによる効率的なコード開発などの機能を備えています。データの管理からプログラム フローの制御、反復的なタスクの実行まで、Python が提供します

GoGet を使用すると、Go モジュールをすばやく簡単に取得できます。手順は次のとおりです: ターミナルで goget[module-path] を実行します。ここで、 module-path はモジュール パスです。 GoGet は、モジュールとその依存関係を自動的にダウンロードします。インストールの場所は、GOPATH 環境変数によって指定されます。

C は、初心者がシステム プログラミングを学習するのに最適な選択肢です。ヘッダー ファイル、関数、メイン関数のコンポーネントが含まれています。 「HelloWorld」を印刷できる単純な C プログラムには、標準入出力関数宣言を含むヘッダー ファイルが必要で、main 関数で printf 関数を使用して印刷します。 C プログラムは、GCC コンパイラーを使用してコンパイルして実行できます。基本をマスターしたら、データ型、関数、配列、ファイル処理などのトピックに進み、熟練した C プログラマーになることができます。
