1. Objective C / Говнокод #13463

    −120

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    - (NSManagedObject *)entityForName:(NSString *)entityName withServerID:(NSString *)serverID inContext:(NSManagedObjectContext *)context
    {
        if ((entityName==nil) || ([entityName isEqualToString:@""]) || (serverID==nil) || ([serverID isEqualToString:@""]))
        {
            return nil;
        };
    
        NSFetchRequest *fr=[[NSFetchRequest alloc] init];
        [fr setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:context]];
        [fr setPredicate:[NSPredicate predicateWithFormat:@"server_id == %@", serverID]];
        [fr setIncludesPropertyValues:YES];
        NSError *err;
        NSArray *res=[context executeFetchRequest:fr error:&err];
        if (err!=nil)
        {
            NSLog(@"PANIC: PTDataFetchHelper: entityWithName:serverID:inContext: an error occured while gathering objects. %@ | %@ | %@", err.localizedDescription, err.localizedFailureReason, err.localizedRecoverySuggestion);
            return nil;
        }
        else
        {
            if ([res count]<=0)
            {
                NSLog(@"[res count]<=0");
                //NSLog(@"PTDataFetchHelper: findEntity:%@ withServerID:%@ inContext: not found", entityName, serverID);
                return nil;
            }
            else if([res count]>1)
            {
                NSLog(@"PANIC: PTDataFetchHelper: entityWithName:serverID:inContext: unable to fetch single object. server_id uniqueness error");
                return nil;
            }
            else //[res count] == 1
            {
                return [res objectAtIndex:0];
            };
        };
    }

    Фетч

    Запостил: stanislaw, 21 Июля 2013

    Комментарии (20) RSS

    • Это не говнокод, это говноструктура бд - не выставлен флаг уникальности поля в редакторе.
      Ответить
      • Не согласен, говнокода здесь полно - в каждом ифе по кучке.
        Ответить
        • Хотя, пожалуй, таки да = не рассмотрел
          (entityName==nil) || ([entityName isEqualToString:@""])

          Аффтор ещё не понал, что nil'у можно слать сообщения. Это нормально :)
          А вообще код похож на автосгенерированный, а если так - кого-то ждёт большой сюрприз при обновлении CoreData-биндингов.
          Ответить
          • Оно то так, но если можно отмести сразу, то зачем весь длинный метод по nil-ам прогонять? Да еще следить, чтобы он вернул, что надо, в такой ситуации. Да и потом он в логи насрет за зря.
            Ответить
            • Да можно гораздо короче просто написать.
              Например,
              if ((entityName==nil) || ([entityName isEqualToString:@""]) || (serverID==nil) || ([serverID isEqualToString:@""]))

              я бы заменил на
              if (entityName.length * serverID.length > 0)
              Ответить
              • А почему не так?
                if (entityName.length && serverID.length)
                Ответить
                • Потому что имею привычку NSUInteger'ы сравнивать с другими целочисленными типами, а не применять к ним логику. Хотя ваш вариант тоже верно отработает, да.
                  Ответить
                  • > Потому что имею привычку NSUInteger'ы сравнивать с другими целочисленными типами
                    Ну тогда вот такой вариант еще. Просто мне использование умножения тут кажется немного странным...
                    if (entityName.length == 0 && serverID.length == 0)
                    Ответить
                    • Это все мое темное прошлое студента матфака.
                      Ответить
              • 1. Вы инвертировали условие в своем варианте.
                2. Почему бы не накатить категорию для NSString, а-ля

                @interface NSString (StringUtils)
                + (BOOL)isNilOrEmpty:(NSString *)string;
                @end
                
                // usage
                if ([NSString isNilOrEmpty:entityName] || [NSString isNilOrEmpty:serverID]) { /* stuff */ }


                Сравните по читаемости.
                Ответить
                • 1) Угу, согласен. Суть не меняется, "==" вместо ">".
                  2) Категории - стильно, модно и объективно, но "isNilOrEmpty" пованивает какой-то грязной жабой.
                  Ответить
                  • > Категории
                    А что такое категории в терминологии объективного си?
                    Ответить
                    • Расширение функционала класса без наследования.
                      Удобно, когда нужно дописать пару методов к стандартному классу.
                      Ответить
                  • > "isNilOrEmpty" пованивает какой-то грязной жабой.
                    Вы таки что-то имеете пrотив Java?
                    Ответить
                    • Мне таки все равно, кто какой язык использует, я достаточно взросл, дабы не вступать в холивары.
                      Олсо, возникло непреодолимое желание на досуге поковырять Скалку. Не знаю, что со мной.
                      Ответить
                      • > поковырять Скалку
                        Пока не приходит желание ковырять Хаскель - все в порядке ;)
                        Ответить
    • Меня еще позабавило слово PANIC в NSLog :)
      Ответить

    Добавить комментарий