7

ウィキペディアによると、COMEFROM フロー制御は冗談、判読不能、またはまったく有害であると見なされています。このような機能は、AOP シナリオ (つまり、ロガー呼び出しをメソッドに追加せずにメソッドにロガーを追加する) で非常に役立つと思います。

そのような制御構造が非自明であることのマイナス面は、潜在的な有用性を上回っていますか? 他に考慮すべき欠点はありますか?

このため、この質問をするように促されました。

4

2 に答える 2

1

手始めに、次のいずれかが必要なため、現代の言語では基本的に役に立ちません。

  • ジャンプする位置を行番号で参照し、これらは揮発性です。
  • コードにマーカーまたはラベルを配置して、ジャンプできる位置を示します。これにより、これを行う必要がないという利点が失われます。

また:

  • 検査によるあらゆる種類のデバッグを本質的に役に立たなくします。
  • 変数を永続化しない限り、ジャンプした場所からコンテキストを実際にキャプチャすることはできません。これは問題を引き起こしています。

代わりに、より良いアイデアは次のとおりです。

  • フック API を作成します。
  • 関数を呼び出してください!
于 2011-05-24T15:20:24.350 に答える
0

あなたが言及した目的のために、Aspect Oriented Programming (wikipedia) はより組織化されたソリューションのようですcomefrom。別のテキスト単位でメソッドにロギングを追加する方法の例については、動機と基本概念(同書)の下部を参照してください。

十分に動的な言語では、メソッドに「ラップアラウンド」修飾子を使用して、この種の処理を行うことができます。

  def do_something
    ...
  end
  log :do_something, "Something got done"

この不自然な例では、logマクロによってdo_somethingメソッドが新しいメソッドに置き換えられ、最初に元のdo_somethingメソッドが呼び出され、次にログに何かが書き込まれます。

于 2011-05-24T18:21:53.490 に答える