検索
ホームページバックエンド開発PHPチュートリアルIf ステートメントを使用しないプログラミング例

If ステートメントを使用しないプログラミング例

Feb 01, 2018 pm 02:27 PM
プログラミング声明

今後は、私たちのビジネスを実装する際に if ステートメントを使用しないようにしてください。

if を使用しないことでどのようなメリットがあるのか​​疑問に思うかもしれません。そうですね~、明らかなメリットはなく、考え方を変えて問題を解決するだけかもしれません。 if-else に問題はありませんが、場合によっては、if-else の数が多いとコードが読みにくくなる可能性があります。以下に、その謎を感じるのに役立ついくつかの例を示します。

コーディングのヒント: if ステートメントを使用せずにコーディングしてみてください

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函数,根据输入不同,做如下处理:

  1. 若输入是number类型, 做翻倍处理(5 => 10, -10 => -20)

  2. 若输入是string类型,重复每个字符('hello' => 'hheelloo')

  3. 若输入是function类型,调用执行两次函数

  4. 若输入是array类型,对数组的每个元素做doubler处理

  5. 若输入是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

課題 #2: 日付が週末か営業日かを判断する


日付オブジェクト new Date() を入力として受け取り、その日が であるかどうかを返す関数を実装します。別の日付に基づく営業日 > まだ週末です。

if実装rrreee非if実装

rrreee

if文内の数字は週末を表しており、判定条件の分布が比較的分散していることに気づきましたか。必要なのは、数値を結合することです。例 2 のように、weekend または Weekday タイプに対応させるには、オブジェクトまたはマップを使用して、対応する関係を保存できます。 上の 2 つの例を比較すると、non-if code 実装の方が可読性とスケーラビリティが優れていることが明確にわかります

課題 #3: doubler 関数 (ここではドラゴン)、翻訳は次のとおりです。出てこない~気まずい~ doubler 関数を実装し、さまざまな入力に応じて次の処理を実行します:

  1. 🎜 入力が number 型の場合、Double 処理を実行します (5 => 10、-10 => -20)🎜
  2. 🎜 入力が string 型の場合、各文字を繰り返します('hello' => ; 'hheelloo')🎜
  3. 🎜 入力が function 型の場合、関数を 2 回呼び出して実行します🎜
  4. 🎜入力が array code> タイプの場合、配列の各要素に対して <code>doubler 処理を実行します🎜
  5. 🎜入力が object タイプ、オブジェクトの各属性に対して <code>doubler 処理を実行します code>doubler は 🎜
🎜switch 実装を処理します🎜rrreee 🎜非 switch 実装🎜rrreee🎜 課題 #2 と同様に、条件値が統合処理のために集約されます。 🎜🎜まとめ🎜🎜 if-else の判定条件が多い場合、条件を一元的に処理します(対応関係をオブジェクトに格納し、条件をキーにして処理を行います)値)。利点は、特定の条件の追加または削除が簡単になり、コードが読みやすくなることです。if-elsekey-value 対応を使用することをお勧めします。 /code> 条件判定。 🎜🎜関連する推奨事項: 🎜🎜🎜🎜 if ステートメントの現状、展望、機会について話す🎜🎜🎜🎜 PHP に基づく elseif ステートメントのコード例の概要🎜🎜🎜🎜 SQL の if ステートメントの詳細な説明🎜🎜

以上がIf ステートメントを使用しないプログラミング例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHP:データベースとサーバー側のロジックの処理PHP:データベースとサーバー側のロジックの処理Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPおよびPython:コードの例と比較PHPおよびPython:コードの例と比較Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

アクション中のPHP:実際の例とアプリケーションアクション中のPHP:実際の例とアプリケーションApr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:インタラクティブなWebコンテンツを簡単に作成しますPHP:インタラクティブなWebコンテンツを簡単に作成しますApr 14, 2025 am 12:15 AM

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPython:2つの一般的なプログラミング言語を比較しますPHPとPython:2つの一般的なプログラミング言語を比較しますApr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの永続的な関連性:それはまだ生きていますか?PHPの永続的な関連性:それはまだ生きていますか?Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール