命名 —— 函数、类的命名

本文探讨了如何通过恰当的命名来清晰表达函数与类的功能和作用,包括避免使用模糊动词、合理运用介词以及类命名的原则等,旨在提高代码的可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命名对应着分类;命名是功能的体现;

  • load、fetch、make
    • load:本地(磁盘)加载
    • fetch:网络爬取
    • make:一些合成数据;

1. 函数名刻画全部的事情

  • 子程序的命名应描述所有的输出结果以及副作用(side effects)。

2. 避免不当的动词

  • 无意义或者模糊:
    • handleCalculation、performServeices、processInput,dealwithOutput,中文上,这些动词就叫做,万能动词;
    • 当然动词 handle 有时也非用不可,比如 eventHandling,用作事件处理这一特殊上下文时;
    • 将 handleOutput 改造为 formatAndPrintOutput

3. 动词后加不加宾语

  • 在面向对象语言中,不必在函数名中加入对象的名字,其对象本身已经包含在调用语句中了。
    • 举例:document.Print()、orderInfo.Check()、monthlyRevenues.Calc()
    • 而且,不加宾语,有时也能在继承关系中起到某种抽象的作用;
      • document.PrintDocument(),显然当有子类如 Check(支票)从 Document 类继承而来,check.PrintDocument() 就显得不伦不类了;

4. 介词

  • from

    • Scala:Source.io.fromFile
  • with/without

  • of

    • pathOf:从什么什么中取得路径(参数充当介词宾语)

      public String pathOf(Arfifact artifact) 
      {
      	StringBuilder path = new StringBuilder();
      	
      	path.append(artifact.getArtifactId()).append(PATH_SEPARATOR);		
      		// PATH_SEPARATOR = '/'
      	path.append(artifact.getBaseVersion()).append(PATH_SEPARATOR);
      	path.append(artifact.getArtifactId()).append(ARTIFACT_SEPARATOR)
      		.append(artifact.getVersion());
      				// ARTIFACT_SEPARATOR = '-'
      }	
      

6. 类的命名

  • 类的分类

    • 工具类:**Utils
    • 常量类:**Constants
    • 上下文:**Context/**Ctx
    • 微服务:
      • 服务:**Services
      • 控制器:**Controller
      • 应用:**Application
  • 用于操作的类

    • 操作类的命名:名词做宾语,但因为是类,宾语置前,动词在后;
      • OperatorAssignment
      • GridSpec

7. 形容词修饰类

  • Int.scala vs. RichInt.scala
### 关于计算思维训练中的函数教程 #### 函数定义与使用 在编程中,函数是一段具有特定功能的、可重用的代码块。通过定义函数可以提高代码的模块化程度和重复利用率。Python 中可以通过 `def` 关键字来创建自定义函数。 ```python def greet(name): message = f"Hello, {name}!" return message ``` 此例子展示了如何定义一个简单的函数并返回一条问候消息[^1]。 #### 参数传递方式 Python 支持多种参数传递形式,包括位置参数、关键字参数,默认参数等: - **位置参数**:按照顺序传入实参; - **默认参数**:给形参设置初始值,在调用时不提供该参数则采用默认值; - **不定长参数**:允许接收任意数量的位置或命名参数。 ```python def describe_pet(pet_name, animal_type='dog'): """显示宠物的信息""" print(f"\nI have a {animal_type}.") print(f"My {animal_type}'s name is {pet_name.title()}.") ``` 上述代码片段说明了带有默认参数的函数定义方法[^2]。 #### 递归概念介绍 当一个函数在其内部直接或间接地调用了自己,则称为递归。递归通常用于解决那些能够被分解成更小子问题的问题。为了防止无限循环,每次递归调用都应朝着终止条件前进。 ```python def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n - 1) ``` 这段代码实现了阶乘运算的功能,并且很好地体现了递归的思想。 #### 高斯函数实现案例 对于高斯分布的概率密度函数(PDF),其表达式如下所示: \[f(x|\mu,\sigma)=\frac{1}{\sqrt{2 \pi}\cdot\sigma}\exp{\left[-\frac{(x-\mu)^2}{2\sigma^2}\right]}.\] 下面是一个具体的 Python 实现版本: ```python from math import pi, sqrt, exp def gaussian_pdf(m, s, x): coefficient = 1 / (sqrt(2 * pi) * s) exponent = (-0.5)*((x-m)/s)**2 result = coefficient * exp(exponent) formatted_result = "{:<10.9f}".format(result) print(formatted_result) test_cases = [(0, 1, 0), (1, 2, 3)] for case in test_cases: gaussian_pdf(*case) ``` 这里不仅给出了完整的高斯 PDF 表达式的实现过程,还加入了格式化的输出处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值