【问题标题】:Objective C naming convention for method performs an action and returns a value方法的Objective C命名约定执行一个动作并返回一个值
【发布时间】: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


【解决方案1】:

听起来您让其他一些代码的限制阻止您编写干净的代码。不要让它。究竟是什么阻止你做这样的事情......?

NSNumber *myID = @(123);
[self updateCallRecordWithID:myID];
Record *myRecord = [self callRecordWithID:myID];

- (void)updateCallRecordWithID:(NSNumber *)recordID {
    history[number] = [[Record alloc] initWithNumber:recordID];
}

- (Record *)callRecordWithID:(NSNumber *)recordID {
    return history[recordID];
}

【讨论】:

  • 您好,再次更新我的问题,添加代码(简化版)。所以我不确定这里有两种方法好不好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 2011-04-21
  • 2012-10-23
相关资源
最近更新 更多