标签:有一个 blank 程序员 输入参数 client 好处 效率 一致性 html
这一节我们转向关注“方法/函数/操作”是如何定义的,即讨论编程中的动词,规约。
行为等价性就是站在客户端的角度考量两个方法是否可以互换
参考下述两个函数:
1 static int findFirst(int[] arr, int val) {
2 for (int i = 0; i < arr.length; i++) {
3 if (arr[i] == val) return i;
4 }
5 return arr.length;
6 }
7
8 static int findLast(int[] arr, int val) {
9 for (int i = arr.length - 1 ; i >= 0; i--) {
10 if (arr[i] == val) return i;
11 }
12 return -1;
13 }
findFirst
返回arr的长度,findLast
返回-1; findFirst
返回较低的索引,findLast
返回较高的索引。 static int findExactlyOne(int[] arr, int val)
requires: val occurs exactly once in arr
effects: returns index i such that arr[i] = val
两个函数附和同一个规约,故二者等价
【规约的结构】
【mutating methods(可变方法)的规约】
规约评价的三个标准
【规约的确定性】
确定的规约:给定一个满足前置条件的输入,其输出是唯一的、明确的
1 static int findExactlyOne(int[] arr, int val)
2 requires: val occurs exactly once in arr
3 effects: returns index i such that arr[i] = val
欠定的规约:同一个输入可以有多个输出
1 static int findOneOrMore,AnyIndex(int[] arr, int val)
2 requires: val occurs in arr
3 effects: returns index i such that arr[i] = val
未确定的规约:同一个输入,多次执行时得到的输出可能不同;但为了避免分歧,我们通常将不是确定的spec统一定义为欠定的规约。
【规约的陈述性】
举一个栗子:
static String join(String delimiter, String[] elements)
effects : returns the result of adding all elements to a new : StringJoiner(delimiter) // Operational specs
effects:returns the result of looping through elements and alternately appending an element and the delimiter // Operational specs
effects: returns concatenation of elements in order, with delimiter inserted between each pair of adjacent elements // Declarative specs
【规约的强度】
举一个栗子:
1 static int findExactlyOne(int[] a, int val)
2 requires: val occurs exactly once in a
3 effects: returns index i such that a[i] = val
1 static int findOneOrMore,AnyIndex(int[] a, int val)
2 requires: val occurs at least once in a
3 effects: returns index i such that a[i] = val
1 static int findOneOrMore,FirstIndex(int[] a, int val)
2 requires: val occurs at least once in a
3 effects: returns lowest index i such that a[i] = val
【如何设计一个好的规约】
【是否使用前置条件】
标签:有一个 blank 程序员 输入参数 client 好处 效率 一致性 html
原文地址:https://www.cnblogs.com/hithongming/p/9125628.html