这种编码风格有什么好处?

时间:2011-06-03 13:22:47

标签: objective-c cocoa-touch ios macos coding-style

最近我遇到了这种Objective-C编码风格:

- (NSFetchedResultsController *)fetchedResultsController
{
    NSFetchRequest      *fetchRequest;
    NSEntityDescription *entity;
    NSSortDescriptor    *sortDescriptor;
    NSArray             *sortDescriptors;
    NSError             *error;

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    entity = [NSEntityDescription entityForName:@"Deck" inManagedObjectContext:self.managedObjectContext];

    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
    sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    fetchRequest = [[NSFetchRequest alloc] init];

    [fetchRequest setEntity:entity];
    [fetchRequest setFetchBatchSize:20];
    [fetchRequest setSortDescriptors:sortDescriptors];

    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
    _fetchedResultsController.delegate = self;

    error = nil;

    if (![self.fetchedResultsController performFetch:&error]) {
        DLog(@"Failed fetching decks: %@, %@", [error localizedDescription], [error userInfo]);
    }

    // etc...

我正在谈论的是方法顶部的声明。那个有什么用途?这是好习惯吗?它似乎为代码增加了一些清晰度,因为你可以立即看到方法将使用哪些变量,对吧?

3 个答案:

答案 0 :(得分:8)

一方面,当您立即看到该方法将使用哪些变量时,它会增加清晰度。它是C的遗产,你必须在括号块的顶部声明所有变量,因为在块的中间不允许声明。

另一方面,有人可能会争辩说变量声明有时候远离它们第一次使用的地方,所以它无助于理解变量的用途。我认为这只是一个品味问题。

答案 1 :(得分:3)

我无法想象“立即看到该方法将使用哪些变量”会带来好处,而我看到在使用它们时声明变量的巨大好处,并在声明的同一行初始化它们。

答案 2 :(得分:0)

这种风格不再需要,已经不再使用了。但是,如果方法顶部的这组声明后面跟着一组相应的版本,我可以看到一些好处,但正如其他人所指出的那样,这是以可读性为代价的。