質問

サブ関数を作成してすべてを1つのファイルに入れることと、パッケージを作成することの違いは何ですか?Perlに関しては、オブジェクト指向は手続き型よりも優れていますか?

基本的に、OOが手続き型よりも優れているシナリオの例を探しています。

ありがとう!

役に立ちましたか?

解決

最初に明確にするために、手続き型とOOの違いは、すべてのコードを1つのファイルに入れることと別々のモジュールに入れることの違いと同じではありません。手続き的に呼び出す関数でいっぱいの個別のモジュールを持つことができます。

モジュール(OOまたは手続き型)を使用することが有利なのは、コードを再利用する場合、またはコードベースが大きい場合です。 10種類のCGIスクリプトを備えたCMSがあり、ユーザーセッションの検証など、すべて同じことを行う場合は、すべてのCGIでコードを書き換えるのではなく、そのコードを別のモジュールに配置するのが理にかなっています。そのスクリプトに固有の20行の関数の場合は、同じファイルに残します。

OOと手続き型のどちらを使用するかは、何をしているかによって異なります。最近のほとんどの人はOOを好むでしょう。コードについて論理的に考え、後で管理や更新が簡単になるように適切な方法でグループ化するのに役立つと思うので、私は彼らに同意します。

他のヒント

できるだけ多くのコードをモジュールに入れるのが好きです。モジュールの良いところは、Perlのテストツール(proveおよびTest :: More)を使用して、単体テストを簡単に作成および管理できることです。したがって、ほとんどすべてのコードがモジュール内にある場合、ほとんどすべてがテスト可能です。

スクリプトを作成するときは、スクリプトの構成オプションとコマンドラインオプションを解析する薄いラッパーが必要です(おそらくConfig :: AnyやGetopt :: Longなどのモジュールを使用します)。スクリプトには、usageサブルーチンも含まれています。次に、mainサブルーチンを追加します。 mainは非常に単純です: ジェネラコディセタグプレ

サポートするサブルーチンのほとんどすべてが1つ以上のモジュールに存在します。

OOPは、データと動作を関連付けるための優れた方法です。これにより、コードが読みやすくなり、煩雑さが軽減されます。 ジェネラコディセタグプレ

より理解しやすい: ジェネラコディセタグプレ

余分ながらくたはすべて、便利な$fooオブジェクト属性にまとめられており、サブコールを乱雑にすることなく移動します。

もちろんできます: ジェネラコディセタグプレ

ここで、$ fooは好みの好みの通常のハッシュです。とにかく、これは本質的にPerlOOが行うことです。呼び出し元(オブジェクトまたはクラス名)は、各メソッドの最初の引数として渡されます。便利な名前空間、継承、動的メソッド呼び出しは失われます。 3つのコストのうち、便利な名前空間が最も見落とされます。 IMO、継承は過大評価されており、まれにしか使用されません。ディスパッチテーブルが便利であるのと同じ理由で、動的メソッド呼び出しが便利です。

OO Perlで実行できないことは、手続き型Perlで実行できないことはありません。しかし、OOは特定のものを非常に便利にします。

神話のスクリプトをOOスタイルで書き直して締めくくります(説明のために、OOについて少し説明します):

サブメイン{ 私の$ cfg=シフト; ジェネラコディセタグプレ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top