编程方法理论.何时编写单一用途的函数


Programming approach theory. When to write single-purpose functions?

我很抱歉,但我无法定义这个"东西",我想弄清楚。

在编写函数时,我们可以采用不同的方法,我做了一些"占位符"的例子:

--------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"中的数组是一个php数组,用于显示使用json的示例"E"之间的差异。

您可能会看到该方法如何逐渐从一种思维方式转变为另一种思维方式,其中函数定义转向信息交换。这并不意味着"get"函数是一个无所不能的主函数,它可能是一个调用其他函数的信使函数,它的唯一目的可能是把应用变成一个服务。

问题是:

  • 这种编码风格的转变叫什么?(主要问题)
  • 什么时候用哪个最好?
  • 我在哪里可以读到更多关于这个?

欢迎澄清和评论/问题/答案,以改进这个问题。

给函数命名和传递值一直是众多讨论的主题之一。我建议你看看通常所说的"干净代码"。它包含命名和构造函数的理论。这是一本值得一看的好书

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

和查看YouTube上的Clean Code,你可能会发现一些很好的演讲。

我的想法是,你可以做一个百万不同的方式在构造函数。理论上,除了你的例子之外,你还可以有一个名为Get的函数,它接受一个指向函数的指针,该函数返回要获取的东西的类型。但这只会增加复杂性。我们想要实现的基本上是自我注释代码,便于其他人阅读和理解。为此,每个函数都应该遵循关于如何根据其执行的内容,允许更改和返回的内容来命名的设置规则。这将使代码更容易被别人进入。

这适用于类。不要让某个类在它的构造函数中设置了无数个东西。如果需要,则创建函数来封装该行为,并从构造函数调用这些函数。

在你编辑了你的问题之后,我明白了你想要表达的意思。我要把这个贴出来,冒着被点赞的风险——我以后可能会编辑它。

看起来好像你试图通过你的函数建立一个路由层次结构;类似于Web API,甚至MVC应用程序中的路由。你正在构建一个树,基本上-在它的根,你有get(这是函数名),然后你可以传递参数给那个函数,可能或可能不依赖于对方。

沿着逻辑边界泛化你的API调用确实是一种不同的编码风格,但我不知道它是否适用于你选择的语言。

这种编程风格的转变被称为什么?(主要问题)

我不确定,但我会尽量找到它并重新编辑这篇文章。

何时最好使用哪个?

您的函数在列表中变得更加通用。因此,我将在特定范围内使用更特定的函数(例如,作为类中的helper),并且只将泛型函数作为更大的公共接口的一部分公开。

我在哪里可以读到更多关于这个?

我必须自己读一些书——我理解这个概念,但我不知道我是否见过正式的定义

C和D/E之间的差异根本不影响函数的逻辑,只是您调用它的方式。对于更简单的函数,我使用C,在少数情况下切换到D和E:

  1. 参数列表足够长,调用和定义都很笨拙。传递一个关联数组可以让你一块一块地构建参数。

  2. 你想要作为参数传递给你的值已经在一个数组或对象中了,所以传递它比先解包它更方便。

  3. 你的函数有很多可选参数。PHP不支持命名参数,所以如果你想调用一个有15个可选参数的函数,而你提供了5个,传递一个参数数组要比记住你的5个参数在15个位置中的哪个位置容易得多,并且在它们之间写很多null

对于使用少量全部或大部分必需参数的函数,C语言可能很有用,因为它使代码的其他读者更容易一目了然地看到函数的设计和需求。