创建过于简单的函数是一种糟糕的风格吗
Is it bad style to create overly simple functions?
我只是想知道,为相对简单的任务创建函数(分解)是不是一种糟糕的编程风格?
例如,在PHP中,我发现session、post、get和cookie的首字母是"$_",然后是大写字母,这很烦人。所以,如果我制作了一个名为setSesVar('key','value')的函数,它会为我创建一个会话变量,那糟糕吗?每次为它调用一个函数的开销值得吗?或者它是无关的/自己的偏好?
其他一些例子:
- c++(和java)中的printLn函数
- Javascript中getElementBydId的简写形式(假设我不使用jQuery或其他库)
- 重定向以代替PHP中的标头('Location:'.url)
还有一个稍微偏离主题的问题——我习惯于使用更"严格"数组的语言;在PHP中,只需说myArray[]="newElement",就可以在end buy中添加一个元素。我觉得我应该做myArray[sizeof(myArray)],但我敢打赌,添加非二进制代码可能是一种糟糕的风格。
这取决于函数的作用以及执行的量。如果你把所有的东西都取出来,用它做一个单行函数,那么你还没有真正摆脱任何复杂性。事实上,您已经通过两种方式添加了复杂性:
-
首先,任何没有内置在PHP中的东西都是你的代码新手必须弄清楚的。如果我看到
$_SESSION['stuff'] = "some value";
,我就知道它在做什么——任何使用PHP超过一个小时的人都知道。另一方面,如果我看到setSessionVar('stuff', 'some value');
,我必须去确定setSessionVar
的作用。我的意思是,它必须做一些的事情,而不仅仅是在$_SESSION
中设置一些东西;否则,为什么不只是这样做 -
第二,如果这些函数最终相互调用,那么你最终会得到一个函数调用的老鼠窝。跟随一个10行(甚至30行)函数比跟踪一个调用另一个2行函数的2行函数更容易,该2行函数调用整个另一个可能调用也可能不调用另一条2行函数。你必须在文件中来回切换(或者更糟的是,在一堆不同的文件之间切换),才能追踪代码。
在我看来,任何内置在PHP中的东西——可以用一行简单的代码来表达——都不配拥有自己的功能。我建议将函数限制在至少3行,但有一个例外:需要访问对象内部的方法,例如getter或setter,可以更小。但大多数函数应该做一些PHP还没有做的事情;如果他们不这样做,那么你就违背了函数的目的,毫无理由地增加了复杂性。
只有当你的名字不够详细时——如果它们太短,你最终会无意中混淆你的代码,以供未来的维护人员使用。另一方面,如果它们足够冗长,那么一半的时间使用原始代码会更快。如果为了避免"多余"的键入而使用过短的函数名,那么分解是个坏主意。
我想这取决于情况。你会把这些函数放在哪里?最重要的是,如果你要在每个类中复制这些内容,那么这可能是个坏主意。如果你把它们放在一些utils类中,那么这个目的可能无论如何都会失败:
System.out.println(" ... ");
vsMyUtils.println(" ... ");
真的没有多大意义。(与其他相同)
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 一种在C++中读取TXT配置文件的简单方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 是否有一种替换C风格的Bool数组的标准方法
- 在C++代码中使用C风格的注释是不是一种糟糕的做法
- 在find()中提供布尔值是一种糟糕的风格吗
- 使用 lambda 函数定义非常小的帮助程序函数是一种好风格吗?
- 创建过于简单的函数是一种糟糕的风格吗
- 在代码中修改预处理器宏是一种好的风格吗
- 有没有一种方法可以从镶嵌图中提取文档的风格信息
- c++枚举类型可以作为函数调用吗?或者它只是一种不同风格的类型转换
- 使用这个来引用类中的私有成员是一种好的风格吗?
- 一种使用不同风格的私有成员的方法