6

大変申し訳ありませんが、私が理解しようとしているこの「もの」を定義することができません。

関数を書くとき、さまざまなアプローチを取ることができます。いくつかの「プレースホルダー」の例を作成しました。

--------A---------
getImageSmall();
getImageLarge();
getTextSmall();
getTextLarge();
--------B---------
getImage('small');
getImage('large');
getText('small');
getText('large');
--------C---------
get('image','small');
get('image','large');
get('text','small');
get('text','large');
--------D---------
get(array('type'=>'image','size'=>'small'));
get(array('type'=>'image','size'=>'large'));
get(array('type'=>'text','size'=>'small'));
get(array('type'=>'text','size'=>'large'));
--------E---------
get('{"type":"image","size"=>"small"}');
get('{"type":"image","size"=>"large"}');
get('{"type":"text","size"=>"small"}');
get('{"type":"text","size"=>"large"}');

オブジェクトを含めることもできますが、今のところは単純にすることを好みます。

「D」の配列は、json を使用する例「E」との違いを示すための php 配列です。

関数の定義が情報交換に変わるという、ある考え方から別の考え方へとアプローチが徐々に変化している様子がわかるでしょう。これは、「get」関数がすべてを行うマスター関数であることを意味するわけではありません。他の関数を呼び出すメッセンジャー関数である可能性があり、その唯一の目的はアプリをサービスに変えることです。

質問は次のとおりです。

  • このコーディング スタイルの変化を何と呼びますか? (主な質問)
  • どちらをいつ使用するのが最適ですか?
  • これについての詳細はどこで確認できますか?

この質問を改善するための説明とコメント/質問/回答を歓迎します。

4

3 に答える 3

2

関数に名前を付け、関数に値を渡すことは、常に多くの議論のトピックの1つです。一般的に「クリーンコード」と呼ばれるものを確認することをお勧めします。関数の命名と構築に関する理論が含まれています。これは一見するのに良い本です

http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

YouTubeでCleanCodeをチェックすると、おそらくいくつかの良い話が見つかるでしょう。

私の考えでは、関数を作成するときに何百万もの異なる方法を実行できます。理論的には、例のほかに、取得するものの型を返す関数へのポインターを受け取るGetという関数を使用できます。しかし、これが追加する唯一のことは複雑さです。私たちが達成したいのは、基本的に、他の人が読みやすく理解しやすい自己コメントコードです。このため、すべての関数は、実行内容、変更および返却が許可されているものなどに応じて名前を付ける方法に関して、設定されたルールに従う必要があります。これにより、誰かがコードにアクセスしやすくなります。

これはクラスに当てはまります。コンストラクターに100万ものものを設定するクラスはありません。それが必要な場合は、動作をカプセル化する関数を作成し、コンストラクターからこれらの関数を呼び出します。

于 2013-03-15T19:57:37.193 に答える
1

質問を編集した後、ここで何をしようとしているのか理解できました。これを回答として投稿し、反対票を投じる危険を冒します-後で編集する可能性があります。

関数を通じてルーティング階層を構築しようとしているようです。Web API や MVC アプリケーションのルーティングに似ています。基本的にツリーを構築しています-そのルートにはget(関数名です)があり、互いに依存している場合と依存していない場合があるその関数にパラメーターを渡すことができます。

論理的な境界に沿って API 呼び出しを一般化することは、確かに異なるコーディング スタイルですが、ここで選択した言語で機能するかどうかはわかりません。

このプログラミング スタイルの変化を何と呼びますか? (主な質問)

よくわかりませんが、見つけてこの投稿を再編集してみます。

どちらをいつ使用するのが最適ですか?

あなたの関数は、リストの下でより一般的になります。そのため、特定のスコープ内で (たとえば、クラス内のヘルパーとして) より具体的な関数を使用し、より大きなパブリック インターフェイスの一部としてジェネリック関数のみを公開します。

これについての詳細はどこで確認できますか?

私は自分でいくつか読まなければなりません - 概念は理解していますが、正式な定義を見たかどうかはわかりません。

于 2013-03-15T20:11:32.187 に答える
0

C と D/E の違いは、関数のロジックにはまったく影響しません。呼び出し方だけです。より単純な機能には C を使用し、いくつかの状況では D と E に切り替えます。

  1. 引数のリストが長すぎて、呼び出しと定義が扱いにくくなります。連想配列を渡すと、引数を少しずつ構築できます。

  2. 引数として渡したい値は、配列またはオブジェクトで既に渡されているため、最初に展開するよりも、それを渡す方が便利です。

  3. 関数にはオプションの引数がたくさんあります。PHP は名前付き引数をサポートしていないため、15 個のオプション引数を持つ関数を呼び出したい場合に、5 個を指定する場合、5 個の引数が 15 個の位置のどの位置にあるかを覚えておくよりも、引数の配列を渡す方がはるかに簡単です。 、nullそれらの間にたくさんの sを書きます。

少数のすべてまたはほとんど必須の引数を取る関数の場合、C は、コードの他の読者が関数の設計とその要件を一目で簡単に確認できるため、便利です。

于 2013-03-15T19:59:48.160 に答える