跳到正文

编码规范与结构化

低頻约 32 分钟7 个术语过去问 4 题

本单元目标

  • 能够区分用行首空白显示处理块的缩进,与表示嵌套层数的嵌套深度。
  • 能够说明规定命名方式的命名规则和把程序拆成部件的模块划分,如何让程序更容易修改。
  • 能够说明主例程与子例程之间调用方与被调用方的关系。
术语总表(7 个)
术语一句话着眼点主要效果
字下げ在行首加入空白,显示处理块的写法外观一眼看出代码块的范围
インデンテーション缩进的英文名称外观与缩进相同
ネストの深さ嵌套重叠的层数结构层数越浅越不易读错
命名規則关于命名方式的约定名称能从名称推测作用
モジュール分割按功能拆成部件再组装的方法结构修改范围变小,部件可以复用
メインルーチン最先运行并统筹整体流程的处理结构能读出整体步骤
サブルーチン被调用来使用的一段处理结构同样的处理不必重复编写

术语

缩进(字下げ)是在行首加入空白,让处理块和嵌套层次在外观上一目了然的写法。

条件分支或循环内部的行向右移一级,同一层的行则让行首位置对齐。在多数语言中,改变缩进不影响处理结果,但也有像 Python 这样用缩进决定代码块范围的语言。无论哪种情况,代码块的分界都一目了然,读错的情况也会减少。

类比就像写提纲时把小项目稍微往右缩进写在大项目下面,一看就知道哪个小项目属于哪个大项目。

记法日语写作「字を下げる」,意思是把行首的字往右推下去,这个动作直接成了名称。

インデンテーションindentation(缩进的英文)

在术语表中打开 インデンテーション

indentation(インデンテーション)是缩进的英文名称,所指内容与缩进相同。

加在行首的空白本身或其宽度称为 indent(缩进量),用空格或制表符做出一级的宽度。如果整个程序中一级的宽度不统一,代码块之间的界线反而更难看清。

记法英语的 indent 指文字从纸边向内退进去形成的「凹进处」。

考点

  • 易混indentation(インデンテーション)和缩进(字下げ)是同一种排版方式的英文叫法和日文叫法,并不是两种不同的方法。

ネストの深さ嵌套深度

在术语表中打开 ネストの深さ

嵌套深度(ネストの深さ)表示在条件分支或循环里面再放入条件分支或循环的嵌套(nest)重叠了几层。

  • 循环(第 1 层)
    • 条件分支(第 2 层)
      • 条件分支(第 3 层)

在那个条件分支中再放 1 个条件分支就成了 3 层,越靠内侧的行,越难追踪它在什么条件下执行。

3 / 3

例如,循环中有条件分支,其中又有一个条件分支,嵌套就是 3 层。层数越深,要确认某一行在什么条件下执行,就得往回追溯越多的层,容易读错或改错。对于变深的部分,可以把它拆出来作为单独的处理等,设法保持较浅的层数。

类比就像套娃式的盒子,盒中有盒、盒中再有盒,越里面的盒子,要取出来就得多开几层。

记法nest 在英语中是「鸟巢」。就像蛋安放在巢里一样,处理里面安放着处理。

考点

  • 易混嵌套深度(ネストの深さ)是嵌套层数这一结构上的性质,缩进(字下げ)是把层次在外观上表现出来的手段,所以把每一级的宽度统一加宽,深度也不会改变。

「缩进」与「嵌套深度」的区别

比较点缩进嵌套深度
关键表示的内容由行首空白形成的外观层次嵌套重叠的层数
性质写法(排版)上的规范处理组织方式(结构)的性质
改变的方法改变空白宽度拆出处理等,改变组织方式

命名规则(命名規則)是事先定好给变量、函数等起名方式的约定。

规则示例名称示例
用大写字母标出单词分界orderCount
用下划线标出单词分界order_count
常量全部用大写字母书写TAX_RATE

例如,规定使用能看出作用的英文单词、用大写字母或下划线标出单词分界、常量全部大写等。命名规则通常与缩进宽度等规定一起,作为统一程序写法的编码规范的一部分来制定。命名方式统一后,编写者以外的人也能从名称推测出它的作用。

类比就像把文件柜里的文件名统一成「年月_客户_内容」的顺序,不管谁来找都能猜到里面是什么。

考点

  • 常考用命名规则(命名規則)等统一写法,主要目的是让日后阅读和修改的工作更轻松,也就是提高可维护性(保守性)。

该术语的过去问 1 题 命名規則

モジュール分割模块划分

在术语表中打开 モジュール分割

模块划分(モジュール分割)是把大型程序按功能拆成一个个部件(模块),再组装起来的方法。

  • 工资计算程序
    • 读取考勤记录
    • 计算发放金额
    • 打印工资明细

让 1 个模块只承担 1 项职责,模块之间先定好要传递的信息再组合起来。即使需要修改,影响范围也容易限制在该模块内部,做好的部件还能在别的程序中复用。另外,模块一词也用来指源代码在编译、链接阶段产生的程序单位。

类比就像用板材、桌腿、抽屉这些部件组装家具,坏了的抽屉可以单独换掉。

记法module 指「规格统一、可以互换的单位」,就像宇宙飞船的居住舱模块,是可以替换、追加的部件。

考点

  • 常考把编译后的程序链接起来,成为计算机可以直接执行的机器语言形式,这样的程序称为装入模块(ロードモジュール)。

该术语的过去问 2 题 モジュール分割

主例程(メインルーチン)是程序运行时最先启动、统筹整个处理流程的核心处理。

  1. 主例程开始
  2. 调用下层处理
  3. 处理结束,返回调用方
  4. 从返回处进入下一步

处理返回后,主例程进入下一步。

4 / 4

细节的个别处理不由自己编写,而是调用下层处理来完成,处理返回后再进入下一步。因此,只要读主例程,就能把握整个程序按什么顺序做什么。

类比就像工地的现场负责人决定作业顺序,把各道工序交给各自的师傅,收到完工报告后再推进下一道工序。

子例程(サブルーチン)是把特定的一段处理归为一体,使其他处理能够调用它的部件。

メインルーチン

サブルーチン1

サブルーチン2

被调用后执行处理,结束后回到调用方接着往下执行。同样的处理不必在多处重复编写,只改 1 处,所有调用它的地方都会反映出来。根据语言不同,它也称为函数或过程,子例程还可以再调用别的子例程。

类比就像菜谱里写着「熬高汤的方法见另页」,需要时随时翻到那一页去看。

记法sub 是表示「下面的、从属的」的前缀,与 submarine(在水面下行进的船)中的 sub 相同。

考点

  • 易混主例程(メインルーチン)作为运行的起点决定整体顺序,子例程(サブルーチン)只在被调用时才运行,并返回调用方。

「主例程」与「子例程」的区别

比较点主例程子例程
职责统筹整体流程承担特定的一段处理
关键开始运行的契机程序开始运行来自其他处理的调用
处理之后走向程序结束回到调用方接着执行

要点

  • 缩进和 indentation 指同一种排版方式,用行首空白显示代码块的范围。
  • 嵌套层次越深越容易读错,所以要把深的部分拆成别的处理,保持较浅的层数。
  • 统一命名规则等写法约定,编写者以外的人也容易读懂,日后也容易修改。
  • 模块划分按职责制作部件,缩小修改的影响范围,并使部件可以复用。
  • 归入子例程的处理可以反复调用,修改时只需改 1 处。

确认题

从本单元的过去问中选 4 题

开始做确认题

查看这个领域的全部过去问