首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有“继续”的命名函数

带有“继续”的命名函数
EN

Software Engineering用户
提问于 2020-11-13 13:52:28
回答 3查看 268关注 0票数 4

我想知道命名函数是否是一个很好的实践,因为它的主要逻辑是“进行”+ "functionName“。

如果有支票,我会用这个名字(如果-S,试捕,等等)。在函数开始的时候,我想把主逻辑分离成单独的功能。

示例:

代码语言:javascript
复制
private void function() {

    if(someCondition1) {
        throw Error1;
    }
    if(someCondition2) {
        throw Error2;
    }
    
    try {
        proceedFunction(); // <-- Name of the function here
    } catch(Exception e) {
         // Error handling
    }
}

private void proceedFunction() {
    // Main logic
}
EN

回答 3

Software Engineering用户

回答已采纳

发布于 2020-11-13 14:25:29

你所谓的proceedFunction的内容实际上是由function描述的。您在proceedFunction之外所做的(但仍在function中)是一些初步验证。

现在,你会这样想:

代码语言:javascript
复制
myFunction = method body + [proceedMyFunction]

我建议重新设计你的思维方式,所以这个名称(“功能”)更接近于描述正在执行的实际功能,即:

代码语言:javascript
复制
myFunction = [validateMyFunction] + method body

换句话说,您的代码应该如下所示:

代码语言:javascript
复制
private void Foo()
{
    ValidateFoo();

    // do the Foo work here
}

private void ValidateFoo()
{
    if (x == 5)
        throw new Exception("x is 5!");
}

现在,FooValidateFoo都恰当地描述了它们的方法体中正在发生的事情。

您需要将验证与实际工作分开吗?这是有关联的。

如果这两个部分都是琐碎的和短小的,那么可能没有必要将它们实际分开。

如果任何一个部分都不是琐碎的,那么拆分它们可以显著提高可读性。在需要的时候,它也明显地增加了可重用性。

票数 5
EN

Software Engineering用户

发布于 2020-11-13 14:31:22

虽然这是相对主观和固执己见的,并且可能是这样结束的,但我将尝试回答,不是直接的是或否,而是一个更一般的标准。

当您发现自己在讨论命名约定时,您需要问的第一个问题是“谁将阅读此代码”。试着超越目前正在阅读代码的人以及谁可能需要理解代码。

  • 你是团队的一员吗?在开发软件的公司里?与您的团队交谈,检查现有的样式指南、命名指南和现有的代码基,以获得类似的模式。遵循本地约定有助于您的队友、其他员工和未来的维护人员更好地理解您的代码。
  • 您可能不是第一个使用编程语言、框架或库的人。找到通用的语言风格指南,比如python的PEP或者C#的微软命名指南,看看它是否回答了你的问题。使用您的语言或框架查找其他项目,并查看它们如何命名它们的功能和模式。坚持这一点意味着其他开发人员进入您的代码--无论是新员工、开源贡献者,还是仅仅是您请求帮助的人--都可以很容易地理解您。
  • 您的应用程序是否位于特定的域上?比如金融,网络安全,密码货币,什么的?请查看此域上的项目,以查看是否存在通用的跨语言命名约定。出于与上面相同的原因:您希望您的代码尽可能地为正确的人所读。

至于您的具体问题--我不太熟悉方法对命名为DoXProceedDoX的风格,从我的经验来看,它们的含义对我来说并不直观,但是特定的语言或域可能正在使用它们。

我不能随手想到这方面的具体命名模式,但我看到了DoXDoXNoChecksDoXInternalDoXImpl匹配的对,它们各有优缺点。

票数 1
EN

Software Engineering用户

发布于 2020-11-13 14:26:42

作为代码的读者,我希望有一个具有特定名称的函数来完成名称所建议的事情。我会惊讶地发现,这个函数只验证是否可以调用实际的函数。

它也很容易出错,因为执行这项工作的实际函数可以从其他地方调用,不会执行验证。

通过分解大型功能来清理它们是一种很好的做法,但是分解那些有意义的部分是好的做法。在您的示例中,对someCondition1和someCondition2的检查更适合提取到单独的函数中。

代码语言:javascript
复制
private void doWork() {

    checkCondition1(...);
    checkCondition2(...);
    
    try {
        // handle actual doWork logic
    } catch(Exception e) {
         // Error handling
    }
}

private void checkCondition1(...) {
    // perform checks
}

private void checkCondition2(...) {
    // perform checks
}
票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/418946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档