tutorial mac language framework español elixir phoenix-framework

elixir - mac - phoenix framework tutorial



¿Cuál es la diferencia entre `def` y` defp` en Phoenix Framework? (2)

Entonces, mi pregunta es cómo sé cuándo usar defp y cuándo usar def al definir una función dentro de un controlador en Phoenix Framework.

def funciones def de un módulo pueden llamarse desde otros módulos, mientras que defp funciones defp son privadas o no pueden llamarse desde otros módulos. ¿Cómo sabes cuándo usar def y cuándo usar defp ? Depende de lo que otros módulos puedan o no necesitar saber. Un patrón de diseño común es que un módulo proporcione una función def primaria que envuelva todo el comportamiento de sus funciones 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

Aquí hay un ejemplo de esto con un analizador para las presentaciones de la SEC : Analizador de presentaciones de la empresa SEC . El método de def principal envuelve todas las funciones privadas que ningún otro módulo realmente necesita conocer.

Estoy revisando el libro Programming Phoenix y me pregunto cuál es la diferencia entre def y defp .

Hay varias funciones en mi controlador, la mayoría de ellas son acciones como esta:

def new (conn, _params) do ... end

El libro me hizo crear otra función en este controlador que no es una acción de controlador típica como esta:

defp user_videos(user) do ... end

Entonces, mi pregunta es cómo sé cuándo usar defp y cuándo usar def al definir una función dentro de un controlador en Phoenix Framework.


De la documentación de Elixir sobre funciones dentro de los módulos :

Dentro de un módulo, podemos definir funciones con def/2 y funciones privadas con defp/2 . Una función definida con def/2 puede invocarse desde otros módulos, mientras que una función privada solo puede invocarse localmente.

Si tiene más preguntas, no dude en leer esa documentación.