プログラミングフェニックスの本を読んでいますが、def
とdefp
の違いは何なのでしょうか。
私のコントローラーにはいくつかの機能があります-それらのほとんどはこのようなアクションです:
def new (conn, _params) do
...
end
この本では、このコントローラーに別の関数を作成しましたが、これは次のような典型的なコントローラーアクションではありません。
defp user_videos(user) do
...
end
したがって、私の質問は、Phoenix Frameworkでコントローラー内の関数を定義するときに、いつdefp
を使用するか、いつdef
を使用するかを知ることです。
モジュール内では、
def/2
で関数を定義し、defp/2
でプライベート関数を定義できます。def/2
で定義された関数は他のモジュールから呼び出すことができますが、プライベート関数はローカルでのみ呼び出すことができます。
さらに質問がある場合は、そのドキュメントをお読みください。
したがって、私の質問は、Phoenix Frameworkのコントローラー内で関数を定義するときにdefpを使用するタイミングとdefを使用するタイミングをどのように知るかです。
モジュールのdef
関数は他のモジュールから呼び出すことができますが、defp
関数はプライベートであるか、他のモジュールから呼び出すことはできません。 def
をいつ使用し、defp
をいつ使用するかをどのように知っていますか?それは、他のモジュールが知る必要があるかどうかに依存します。一般的な設計パターンは、モジュールがdef
functionsのすべての動作をラップする親defp
関数を提供することです。
defmodule MyModule do
def function do
# call all the defp functions below to do something
end
defp function2 do
# do something that no other module cares about or needs to know about
end
defp function3 do
# do something that no other module cares about or needs to know about
end
defp function4 do
# do something that no other module cares about or needs to know about
end
end
以下に、SECファイリング用のパーサーを使用した例を示します。 SEC Company Filings Parser 。メインのdef
メソッドは、他のモジュールが実際に知る必要のないすべてのプライベート関数をラップします。