【发布时间】:2014-08-01 00:45:59
【问题描述】:
我有一个执行操作并返回值的方法。例如,根据输入的数字,它将更新类的输入历史,然后生成并返回输入记录。那么如何命名这个方法呢?
我认为即使 C 也有这个问题,例如fopen 函数确实打开一个文件并返回一个处理程序。但是使用 Objective C 约定似乎很难命名该方法。
来自可可的苹果文档name convention 和这篇文章cocoa with love 他们都说“如果一个方法执行一个动作,第一个词应该表明那个动作”和“如果方法返回一个值第一个单词通常表示将返回什么"
所以,如果我命名类似callRecordFromNumber:(NSString*) number,它只表示返回值,而不是它执行的操作。如果我命名为updateCallRecordFromNumber:(NSString *) number 之类的名称,则它仅表示操作,而不是返回值。
顺便说一句,我确实考虑将其分为 2 个方法,但问题是新记录是在执行操作的同时生成的。代码如下:如果不存在则创建一个新的,然后更新历史记录。并且实际的代码有几种类型的历史记录(例如,未接来电历史记录、被拒绝呼叫历史记录、总历史记录),并为自己的历史记录生成和更新记录。所以把它分成2个方法会引入太多的重复代码。这里似乎不是一个好的选择。
Record *record = totalHistory[number];
if (record !=nil ) return record;
record = [[Record alloc] initWithNumber:number];
record.type = [self callType:number];
totalHistory[number] = record;
switch (record.type) {
case -1: /*missed call*/ {
missedHistory[number] = record;
break; }
case 0: /*normall call*/ {
acceptedHistory[number] = record;
break; }
case 1: /*rejected call*/ {
rejectedHistory[number] = record;
break; }
...
}
return record.
---- 更新----
以下 2 次讨论也很有帮助。
How to name a method that both performs a task and returns a boolean as a status?
Naming functions that retrieve a value
现在我正在使用这样的方法名称,valueByPerformed...,例如recordByUpdatedCallHistoryFrom:
罗嗦:(我希望有一个更好的名字!
----更新----
swift 3.0 naming guideline,例如Verbs vs Nouns Naming Convention, like sort vs sorted 给了我一些关于这个问题的新想法。现在我确实认为 valueByPerformed 可能是个好名字 :D
【问题讨论】:
-
为什么不能是两个独立的方法?听说过单一责任原则吗?难以命名的方法通常做得太多。
-
谢谢。我确实考虑过。更新了我的问题。
-
该代码并不总是更新您的历史字典。它更像是“addRecordWithNumberToHistoryIfItDoesntAlreadyExist”。
-
那么返回值呢?
-
查看我的更新答案。
标签: objective-c cocoa methods naming-conventions naming