Questions tagged «functions»

函数是执行特定任务的代码块。

16
我的老板要求我停止编写小的函数,并在同一循环中完成所有操作
我已经读过罗伯特·C·马丁(Robert C. Martin)的一本名为《清洁代码》的书。在本书中,我看到了许多清理代码的方法,例如编写小的函数,仔细选择名称等。这似乎是迄今为止我所读过的最有趣的有关干净代码的书。但是,今天我的老板不喜欢我看完本书后写代码的方式。 他的论据是 编写小函数很痛苦,因为它迫使您进入每个小函数以查看代码在做什么。 即使主循环超过300行,也可以将所有内容放入主大循环中,以使其读取速度更快。 仅在必须复制代码时编写小型函数。 不要使用注释名称编写函数,而是将复杂的代码行(3-4行)放在注释上方;同样,您可以直接修改失败的代码 这与我读过的所有内容背道而驰。您通常如何编写代码?一个主要的大循环,没有小的功能? 我使用的语言主要是Javascript。由于我删除了所有小的明确命名的函数并将所有内容放入一个大循环中,因此我现在真的很难阅读。但是,我的老板喜欢这种方式。 一个例子是: // The way I would write it if (isApplicationInProduction(headers)) { phoneNumber = headers.resourceId; } else { phoneNumber = DEV_PHONE_NUMBER; } function isApplicationInProduction(headers) { return _.has(headers, 'resourceId'); } // The way he would write it // Take the right resourceId …

11
只调用一次的单行函数
考虑一个无参数(无需编辑)函数,该函数执行一行代码,并且在程序中仅被调用一次(尽管将来再次使用它并非不可能)。 它可以执行查询,检查某些值,执行涉及正则表达式的操作……任何晦涩或“ hacky”的操作。 其背后的理由是避免难以理解的评估: if (getCondition()) { // do stuff } getCondition()单行函数在哪里。 我的问题很简单:这是一种好习惯吗?对我来说似乎不错,但我不知道长期的事情...
120 functions 

11
是否有关于函数应接受多少个参数的准则?
我注意到我使用的一些函数有6个或更多参数,而在大多数我使用的库中,很少会找到一个需要3个以上参数的函数。 通常,这些额外的参数中有很多是二进制选项,可以更改功能行为。我认为其中一些参数设置的函数可能应该重构。有多少个数字的准则吗?

15
何时针对一种方法优化内存与性能速度?
我最近在亚马逊接受了采访。在编码会议期间,面试官问为什么我在方法中声明了变量。我解释了我的过程,他挑战我以更少的变量解决相同的问题。例如(这不是从采访),我开始与方法A然后提高它方法B,通过去除int s。他很高兴,并说这将通过这种方法减少内存使用。 我了解其背后的逻辑,但我的问题是: 什么时候适合使用方法A与方法B,反之亦然? 您可以看到,由于方法A被int s声明了,因此它将具有更高的内存使用率,但是它只需执行一次计算即可,即a + b。另一方面,方法B的内存使用量较低,但是必须执行两次计算,即a + b两次。什么时候比另一种使用一种技术?还是其中一种技术总是总是比其他技术更受青睐?评估这两种方法时要考虑什么? 方法A: private bool IsSumInRange(int a, int b) { int s = a + b; if (s > 1000 || s < -1000) return false; else return true; } 方法B: private bool IsSumInRange(int a, int b) { if (a + b …

6
一个函数的术语是什么,当它被反复调用时,具有与一次调用相同的作用?
(假设是单线程环境) 满足此条件的功能是: bool MyClass::is_initialized = false; void MyClass::lazy_initialize() { if (!is_initialized) { initialize(); //Should not be called multiple times is_initialized = true; } } 本质上,我可以多次调用此函数,而不必担心MyClass多次初始化 不满足此条件的功能可能是: Foo* MyClass::ptr = NULL; void initialize() { ptr = new Foo(); } initialize()多次调用将导致内存泄漏 动机 最好有一个简洁的词来描述此行为,以便可以适当地注释预期符合此条件的功能(在描述预期被覆盖的接口功能时特别有用)
96 naming  functions 

12
什么时候函数调用成本在现代编译器中仍然很重要?
我是一个虔诚的人,并努力不犯罪。这就是为什么我倾向于编写较小的函数(小于此值以重写Robert C. Martin)以符合Clean Code圣经所定的几条诫命。但是在检查一些东西的同时,我登陆了这篇文章,在下面我读到这个评论: 请记住,方法调用的成本可能很高,具体取决于语言。在编写可读代码和编写性能代码之间几乎总是要权衡取舍。 考虑到高性能现代编译器行业的丰富性,如今在什么条件下该引用语句仍然有效? 那是我唯一的问题。这与我应该编写长函数还是小函数无关。我只是强调,您的反馈可能会或不会有助于改变我的态度,使我无法抗拒亵渎神灵的诱惑。

5
为什么要将函数存储在python字典中?
我是python的初学者,我刚刚学习了一种涉及字典和函数的技术。语法很简单,看似微不足道,但是我的python感觉有点刺痛。有人告诉我这是一个深层的,非常Python化的概念,我不太了解它的重要性。有人可以给这项技术起个名字,并解释它为何/为什么有用吗? 该技术是当您拥有python字典和打算在其上使用的函数时。您在dict中插入一个额外的元素,其值是函数的名称。当您准备调用该函数时,可以通过引用dict元素而不是按名称引用该函数来间接发出该调用。 我正在使用的示例来自第2版的《学习Python的艰难方法》。(这是您通过Udemy.com注册时可用的版本;可惜的是,实时免费HTML版本当前是Ed 3,并且不再包含此示例)。 释义: # make a dictionary of US states and major cities cities = {'San Diego':'CA', 'New York':'NY', 'Detroit':'MI'} # define a function to use on such a dictionary def find_city (map, city): # does something, returns some value if city in map: return map[city] else: return …

4
函数式语言如何处理随机数?
我的意思是,在我阅读过的几乎所有有关函数式语言的教程中,都是关于函数的妙处之一,就是如果您两次调用具有相同参数的函数,那么总会得到同样的结果。 您究竟如何创建一个以种子为参数,然后基于该种子返回随机数的函数? 我的意思是,这似乎与功能方面的优势之一背道而驰,对吧?还是我在这里完全错过了什么?

10
仅将C ++编译器用于函数重载是不好的做法吗?
因此,我正在针对某个处理器使用C进行软件设计。该工具包包括编译C和C ++的功能。对于我正在做的事情,在这种环境下没有可用的动态内存分配,并且该程序总体上非常简单。更不用说该设备几乎没有处理器能力或资源。实际上,根本不需要使用任何C ++。 话虽这么说,我在一些地方进行函数重载(C ++的功能)。我需要发送几种不同类型的数据,并且不想使用printf带有某种%s(或其他任何一种)参数的样式格式。我见过有些人无法使用C ++编译器执行此操作printf,但就我而言,可以使用C ++支持。 现在,我确定可能会遇到一个问题,即为什么我需要重载一个函数。因此,我将尝试立即回答。我需要从串行端口传输不同类型的数据,所以我有一些重载,可以传输以下数据类型: unsigned char* const char* unsigned char const char 我只希望没有一种方法可以处理所有这些事情。当我呼吁我只是希望它传递出串行端口的功能,我没有很多资源的,所以我不想做几乎没有任何事情,但我的传送。 有人看到了我的程序,问我:“为什么要使用CPP文件?” 所以,这是我唯一的原因。那是不好的做法吗? 更新资料 我想回答一些问题: 解决您的困境的客观答案取决于: 如果使用C ++,可执行文件的大小是否会显着增加。 截至目前,可执行文件的大小占用了4.0%的程序内存(5248字节)和8.3%的数据内存(342字节)。也就是说,为C ++编译...我不知道对于C会是什么样子,因为我没有使用过C编译器。我确实知道该程序不会再增长了,所以对于资源的有限程度,我会说我还可以... 如果使用C ++,是否会对性能产生明显的负面影响。 好吧,如果有的话,我什么都没注意到...但是那又可能是为什么我问这个问题的原因,因为我不太了解。 代码是否可以在只有C编译器可用的其他平台上重用。 我知道,对此的答案肯定不是。实际上,我们正在考虑使用其他处理器,但仅考虑使用功能更强大的基于ARM的处理器(事实上,我所知道的所有处理器都具有C ++编译器工具链)。


9
您是否应该防止来自外部API的意外值?
可以说,您正在编码一个从外部API接收输入的函数MyAPI。 该外部API MyAPI的合同规定其将返回string或number。 它是推荐的防范之类的东西null,undefined,boolean等即使它不属于API的一部分MyAPI?特别是,由于您无法控制该API,因此无法通过诸如静态类型分析之类的方法来做出保证,因此,安全起来总比对不起好。 我在考虑稳健性原则。

6
为什么许多在C中返回结构的函数实际上返回结构的指针?
return与在函数的语句中返回整个结构相比,返回指向结构的指针有什么好处? 我说的是像fopen其他底层函数一样的函数,但是可能还有一些高层函数也返回指向结构的指针。 我相信这更多是一种设计选择,而不仅仅是编程问题,而且我很想知道更多关于这两种方法的优缺点。 我认为返回指向结构的指针的一个好处的原因之一是能够通过返回NULL指针更容易地判断函数是否失败。 我想返回一个完整的结构NULL会比较困难,或者效率较低。这是正当的理由吗?

5
我应该在哪里放置与类无关的函数?
我正在一个C ++项目中工作,其中有很多数学函数,这些函数最初是作为类的一部分编写的。但是,由于我一直在编写更多代码,所以我意识到我到处都需要这些数学函数。 放置它们的最佳位置在哪里?假设我有这个: class A{ public: int math_function1(int); ... } 当我写另一个类时,我不能(或者说我不知道​​如何)math_function1在那个其他类中使用它。另外,我已经意识到其中一些功能与A类并没有真正的联系。它们似乎只是开始,但现在我可以看到它们仅仅是数学功能。 在这种情况下有什么好的做法?现在,我一直在将它们复制粘贴到新类中,我敢肯定这是最糟糕的做法。
47 c++  functions  class 

3
布尔方法命名肯定与否定
布尔方法是否应该始终采用肯定形式,即使仅将它们用作否定形式也是如此? 假设我想在创建实体之前检查一个实体是否存在,我的论点是下面的第一种形式要好于第二种形式,无论该方法是否曾经以肯定形式使用过。 总而言之,我觉得if(!affirmative)比容易阅读if(negative)。我有一个不同意的同事,有何想法? 第一种形式: int entity_id = 42; if(!entity_exists(entity_id)) create_entity(entity_id); 第二种形式: int entity_id = 42; if(entity_not_exist(entity_id)) create_entity(entity_id);
43 naming  functions 

8
以函数名称开头的句子?[关闭]
有时在键入与区分大小写的编程语言有关的内容时,我最终会以函数名开头一个句子。现在,英语规则规定句子中的第一个单词必须大写。函数名称是小写的。如果您想知道我会说什么导致第一个单词成为函数名,请考虑以下示例: 您的恐惧实现已损坏。fread需要返回已读取的字节数。 我知道我可以将fread的第二个实例更改为It,但我想知道处理此错误的最佳方法,而不仅仅是重写句子。我应该大写功能名称吗?我想听到“重写句子”作为答案的唯一方法是,如果以函数名开头的句子违反了我不知道的某些英语规则。编辑:我真的很感谢大家的这些答案。他们已经改变并改善了我对该问题的见解。我从中学到了很多。我没有想到这些简单但好的解决方案,这让我感到非常惊讶。 我确实认为我对交替句子的立场太过苛刻,现在我意识到,由于这些好答案,整体更改句子似乎是处理这些情况的最佳选择,无论是在函数后面加上括号还是在函数之前说出函数函数名称,如果可用,请使用格式设置函数名称。
42 functions 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.