Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.64
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
#1

Быстрое обращение к данным многомерных словарей - Objective-C

15.06.2013, 11:24. Просмотров 3196. Ответов 39
Метки нет (Все метки)

предлагаю на рассмотрение следующий метод работы с данными многомерных словарей

рассматриваются словари, чья многомерная структура состоит из словарей и массивов

1) сокращенные методы получения данных из словарей и массивов
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// DKeyClass test version
 
#import <Foundation/Foundation.h>
 
@interface NSDictionary (NSDictionaryDkey)
 
-(id) key: (id) key;
 
@end
 
@interface NSArray(NSArrayDkey)
 
-(id) index: (int) index;
 
@end
данные методы зеркально отражают стандартные objectForKey: и objectAtIndex:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// DKeyClass test version
 
#import "DkeyClass.h"
 
@implementation NSDictionary(NSDictionaryDkey)
 
-(id)key:(id)key {
    return  [self objectForKey:key];
}
@end
 
@implementation NSArray(NSArrayDkey)
 
-(id)index:(int)index {
    if (index>=self.count || index<0) {
        NSLog(@"DkeyClass ARRAY ERROR index at %d (max=%d) \n %@",index,self.count-1,self);
        return nil;
    }
    return [self objectAtIndex:index];
}
@end
дополнительно в метод index: добавлен логический блок проверки индекса, который не допускает внезапного завершения приложения из-за неверного индекса

2) примеры кода, показывающие удобство использования сокращенных конструкций key-index
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// уровень 1
 
[_dict1 objectForKey:@"s1"];
 
[_dict1 key:@"s1"];
 
// уровень 2
 
[[_dict1 objectForKey:@"k1"] objectAtIndex:1];
 
[[_dict1 key:@"k1"] index:1];
 
// уровень 3
 
[[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"s3"];
 
[[[_dict1 key:@"k1"] index:0] key:@"s3"];
 
// уровень 4
 
[[[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"k3"] objectForKey:@"s4"];
 
[[[[_dict1 key:@"k1"] index:0] key:@"k3"] key:@"s4"];
3) тестовая программа

Быстрое обращение к данным многомерных словарей

состоит из кнопок на которые назначены действия показа данных через NSLog

в программе заполняется многомерный словарь состоящий из 4 уровней

1 - словарь
2 - массив
3 - словарь
4 - словарь

структура

Быстрое обращение к данным многомерных словарей

исходный код программы

ViewController.h
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//
//  ViewController.h
//  test_dict4
//
//  Created by Mac on 6/15/13.
//  Copyright (c) 2013 Mac. All rights reserved.
//
 
#import <UIKit/UIKit.h>
#import "DkeyClass.h"
 
@interface ViewController : UIViewController<UIAlertViewDelegate>
- (IBAction)b1:(id)sender;
- (IBAction)b2:(id)sender;
- (IBAction)b3:(id)sender;
- (IBAction)b4:(id)sender;
- (IBAction)indexerror:(id)sender;
 
- (IBAction)obj1:(id)sender;
- (IBAction)obj2:(id)sender;
- (IBAction)obj3:(id)sender;
- (IBAction)obj4:(id)sender;
- (IBAction)indexobjError:(id)sender;
 
@property NSMutableDictionary* dict1;
 
@end
ViewController.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//
//  ViewController.m
//  test_dict4
//
//  Created by Mac on 6/15/13.
//  Copyright (c) 2013 Mac. All rights reserved.
//
 
#import "ViewController.h"
 
@interface ViewController ()
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _dict1 = [NSMutableDictionary new];
    NSMutableArray * a2 = [NSMutableArray new];
    NSMutableDictionary * d3 = [NSMutableDictionary new];
    NSMutableDictionary * d4 = [NSMutableDictionary new];
    
    
    // дерево словарей заполнено
    [_dict1 setObject:a2 forKey:@"k1"];
    [a2 addObject:d3];
    [d3 setObject:d4 forKey:@"k3"];
    
    // заполняем словари строковыми данными
    
    [_dict1 setObject:@"level1" forKey:@"s1"];
    [a2 addObject:@"level2 array"];
    [d3 setObject:@"level3" forKey:@"s3"];
    [d4 setObject:@"level4" forKey:@"s4"];
 
    
    NSLog(@"текущая структура словарей %@",_dict1);
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
#pragma mark черезКлючи
 
- (IBAction)b1:(id)sender {
    id obj = [_dict1 key:@"s1"];
   
    NSLog(@"KEY МЕТОД строка уровень 1 \n%@", obj);
}
 
- (IBAction)b2:(id)sender {
    id obj = [[_dict1 key:@"k1"] index:1];
    
    NSLog(@"KEY МЕТОД строка уровень 2 \n%@", obj);
}
 
- (IBAction)b3:(id)sender {
    id obj = [[[_dict1 key:@"k1"] index:0] key:@"s3"];
    
    NSLog(@"KEY МЕТОД строка уровень 3 \n%@", obj);
}
 
- (IBAction)b4:(id)sender {
    id obj = [[[[_dict1 key:@"k1"] index:0] key:@"k3"] key:@"s4"];
    
    NSLog(@"KEY МЕТОД строка уровень 4 \n%@", obj);
}
 
- (IBAction)indexerror:(id)sender {
    // запрашиваем ошибочный индекс
    [[_dict1 key:@"k1"] index:2];
    
}
 
#pragma mark стандартный метод
 
- (IBAction)obj1:(id)sender {
    id obj = [_dict1 objectForKey:@"s1"];
    
    NSLog(@"СТАНДАРТНО строка уровень 1 \n%@", obj);
}
 
- (IBAction)obj2:(id)sender {
    id obj = [[_dict1 objectForKey:@"k1"] objectAtIndex:1];
    
    NSLog(@"СТАНДАРТНО строка уровень 2 \n%@", obj);
}
 
- (IBAction)obj3:(id)sender {
    id obj = [[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"s3"];
    
    NSLog(@"СТАНДАРТНО строка уровень 3 \n%@", obj);
}
 
- (IBAction)obj4:(id)sender {
    id obj = [[[[_dict1 objectForKey:@"k1"] objectAtIndex:0] objectForKey:@"k3"] objectForKey:@"s4"];
    
    NSLog(@"СТАНДАРТНО строка уровень 4 \n%@", obj);
}
 
- (IBAction)indexobjError:(id)sender {
    UIAlertView *a = [[UIAlertView alloc] initWithTitle:nil message:@"приложение сейчас прекратит работу из-за неверного индекса массива" delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
    [a show];
    
}
 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
   // запрашиваем ошибочный индекс
   [[_dict1 objectForKey:@"k1"] objectAtIndex:2];
}
 
@end
лог после запуска программы

Bash
1
2
3
4
5
6
7
8
9
10
11
12
2013-06-15 09:46:43.865 test_dict4[709:c07] текущая структура словарей {
    k1 =     (
                {
            k3 =             {
                s4 = level4;
            };
            s3 = level3;
        },
        "level2 array"
    );
    s1 = level1;
}
0
Вложения
Тип файла: zip test_dict4.zip (38.4 Кб, 4 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2013, 11:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быстрое обращение к данным многомерных словарей (Objective-C):

обращение к данным uiviewcontroller - Программирование iOS
как взять текст из label.text из одного uiviewcontroller в другой? как обращаться к обьектам других вьюшек?

Вывод русских словарей и массивов в читаемом виде - Objective-C
Вывод русских словарей и массивов в читаемом виде ext_log.h //* расширенный вывод */ #import...

Обращение к данным 1С Предприятия - 1С Битрикс
Доброго времени суток. Подскажите, пожалуйста, как в php обращаться к выгруженным данным из 1С Предприятия? Добавлено через 32 минуты ...

обращение к данным структуры - Assembler
Ideal model small STACK 256 dataseg struc daymonthstruc day db 4 month db 08 years dw 1995 ends daymonthstruc

Обращение к данным из базы - C#
Есть база данных на MS SQL из которой нужно получить данные в переменную из текущей записи из определенного поля! Подключение: String...

Обращение к данным класса. - C++
Доброе время суток. Начал самостоятельно изучать классы. Хотел выполнить задание, но возникла первая трудность. #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
23.07.2013, 23:35 #16
Цитата Сообщение от noname_club Посмотреть сообщение
довод против СИ констант : макрос имеет цвет отличающийся по цветовой гамме от обычных переменных -> лучше читаемость
я вам про Фому, а вы мне про Ерему, говорю же – статические константы, какая разница Си\неСи
какой в ж**у цвет!? это что еще за ересь, меняйте себе цвет в настройках хоть на красный и будете видеть то, что вам надо на другом конце комнаты, если это так важно для написания понятного и грамотного кода...

Цитата Сообщение от noname_club Посмотреть сообщение
довод за СИ константы: константы на уровне компилятора работают быстрее так как память уже под нее выделена и передается чисто указатель
фух, надежда еще не умерла, ноо ...

Цитата Сообщение от noname_club Посмотреть сообщение
есть 3-й путь
вызов СИ константы через макрос, однако тогда размер кода "инициализации ключей помощи" увеличиться в 2 раза,
что неприемлемо, если только не использовать какую нибудь утилиту для автоматизации процесса и не заполнения этого дела вручную
не приймите это лично, но вы что головой ударились или долго не спали?
ну зачем изобретать тут велосипеды ....
Цитата Сообщение от noname_club Посмотреть сообщение
да просто короче чем буква d_ трудно представить. Никакие синглтоны, объекты с полями не сравнить с быстротой реакции подсказки Xcode на ввод этих 2-3 символов!
а завтра Xcode умрет и будет, например, AppCode, в котором ваши дефайны "плохо" подсвечиваются, а пете или васе больше sublime по душе
да и при чем тут синглтоны...
и почему нельзя установить правила наименования статических констант таким же макаром (надеюсь не d_, а что-то потолковей, да и ключи обычно c k начинаются) ?

а если еще и подумать а не говнокодить в стиле новичка в php или javascript с глобальными переменными, то авось и надобность пропадет в таком списке макросов на 50 строк

так вы получитесь в тройном выигрыше – и подсказки вам выплывают так же красиво и эффектно, и работает быстрее, и никто не проклинает вас за необычайно огромное количество каких-то понятных только вам и понравившихся только вам дефайнов

21 век, ООП ...
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.07.2013, 00:09  [ТС] #17
какой в ж**у цвет!? это что еще за ересь, меняйте себе цвет в настройках хоть на красный и будете видеть то, что вам надо на другом конце комнаты, если это так важно для написания понятного и грамотного кода...
надо опираться на цвет по-умолчанию, так как он у ВСЕХ.
Пользовательские настройки среды такие как сниппеты и цвет кода не будут работать на соседнем ПК, где например их нет.
ну зачем изобретать тут велосипеды ....
надо понимать разницу между идеей велосипеда и ее воплощением
причем я сам привел доводы против.

а завтра Xcode умрет и будет, в котором ваши дефайны "плохо" подсвечиваются
Если "Xcode умрет" с ним и умрет NSMutableDictionary и прочие длиннющие и избыточные конструкции языка, которые без автодополнения использовать практически нереально.

и почему нельзя установить правила наименования статических констант таким же макаром (надеюсь не d_, а что-то потолковей, да и ключи обычно c k начинаются) ?
можно и k_

чисто мой довод в пользу d_ так как это первая буква в #define
надобность пропадет в таком списке макросов на 50 строк
не пропадет, ибо приложение работает с JSON словарем, полученным с сервера. Который модифицируется и сохраняется в NSUserDefaults и весь ввод/вывод данных идет по его веткам

в самом первом сообщении топика есть Excel скриншот подобных структур

и подсказки вам выплывают так же красиво и эффектно, и работает быстрее
а теперь о быстродействии.

Задумаемся на мгновение, что уже тысячи приложений написаны в стиле

Objective-C
1
id element = [dictionary objectForKey:@"elementKey"];
и что, все они написаны неверно?
у всех них приложение жрет тонны памяти?

и ведь препроцессор тоже заменяет макросы на [dictionary objectForKey:@"elementKey"], самый стандартный способ получить объект из словаря!

РАЗВЕ ОН НЕПРАВИЛЬНЫЙ?
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
24.07.2013, 00:24 #18
Цитата Сообщение от noname_club Посмотреть сообщение
Если "Xcode умрет" с ним и умрет NSMutableDictionary и прочие длиннющие и избыточные конструкции языка, которые без автодополнения использовать практически нереально.
т.е. такие текстовые редакторы как саблайм не смогут автодополнять длинные слова или AppCode от JetBrains не справится с такой трудоемкой задачей?
Цитата Сообщение от noname_club Посмотреть сообщение
надо опираться на цвет по-умолчанию, так как он у ВСЕХ.
слышал бы вас кто-то еще ....
надо опираться на граммотность написанного кода и его читаемость а не цвет подсветки в очередной IDE

Цитата Сообщение от noname_club Посмотреть сообщение
Задумаемся на мгновение, что уже тысячи приложений написаны в стиле
Код Objective-C
id element = [dictionary objectForKey:@"elementKey"];
и что, все они написаны неверно?
у всех них приложение жрет тонны памяти?
и ведь препроцессор тоже заменяет макросы на [dictionary objectForKey:@"elementKey"], самый стандартный способ получить объект из словаря!
РАЗВЕ ОН НЕПРАВИЛЬНЫЙ?
он-то как раз и правильный, ибо зачем выделять глобально макрос для замены какого-то значения, а вот если эта строка повторяется, то стоит задуматься о выделении переменной, если же вызывается она в разных методах, то стоит подумать или можно передать ее параметром или вынести в отдельный метод, например:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
static const NSString *elementKey = @"elementKey";
 
- (id)someElement
{
    return [self.dictionary objectForKey:elementKey];
}
 
- (void)setSomeElement:(id)someElement
{
    [self.dictionary setObject:someElement forKey:elementKey];
}
с таким подходом вы больше двух раз одну и ту же строку не будете использовать вообще
плюс такой код легко поддается рефакторингу, он гибкий для изменений и без труда будет покрыт юнит тестами, что не скажешь про ваш макрос, а ведь мы пишем высокоуровневые приложения, пишем их граммотно и правильно, в объектно-ориентированном стиле в 2013 году, когда некоторые программы сами себя пишут, а мы все еще пытаемся впихнуть изжитки далекого С
неужели это хуже чем какой-то болтающийся в воздухе макрос, которых будет потом под две сотни и ваш d_ ничем не поможет, а только заставит перелопатить 200 макросов

Цитата Сообщение от noname_club Посмотреть сообщение
можно и k_
я имел ввиду не k_, а k, так как это общепринятый подход, а d_ я бы на вашем проекте долго искал бы и еще дольше плевался бы на ваше "творчество"

макросы годятся для каких-то глобальных для фреймворка или SDK флажков, для каких-то может настроек тоже глобальных, а не для повседневной жизни в высокоуровневом полудинамическом объектно-ориентированном языке
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.07.2013, 00:56  [ТС] #19
плюс такой код легко поддается рефакторингу
это в случае того если мы рассматриваем словарь как "модель" для получения данных. Но это не всегда применимо. Ибо иногда сам словарь не является моделью вообще, а используется как База Данных для их считывания. И если логика требует просто взять данные без обработки по почему нет?

Или они УЖЕ обработаны и готовы к считыванию? зачем плодить модели там где они не нужны? абстракция ради абстракции?

Однако если все же нужна гибкость, оформление как модель это хорошо, однако тогда никчему вообще константы с макросами достаточно @"строки"

--

скриншот тестирования вида констант на примере Xcode

Быстрое обращение к данным многомерных словарей
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.07.2013, 01:01  [ТС] #20
макросы годятся для каких-то глобальных для фреймворка или SDK флажков, для каких-то может настроек тоже глобальных, а не для повседневной жизни в высокоуровневом полудинамическом объектно-ориентированном языке
то что он высокоуровневом полудинамическом объектно-ориентированном языке не отменяет того факта что ему нужны синглтоны и константы (и в виде макросов тоже). без них ни одно приложение не обходится.

я лишь показал каким образом обеспечить вывод подсказок ключей которых даже если и 50 (в вашем представлении) то это даже хорошо, ибо чем больше тем выше необходимость в этом.

Для приложений ориентированных на работу с многомерными словарями только и всего.
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
24.07.2013, 01:44 #21
Цитата Сообщение от noname_club Посмотреть сообщение
абстракция ради абстракции?
про какую абстракцию речь?
я вам показал довольной конкретный пример, конкретную реализацию, не больше, не меньше
говорю, что такое удобно рефакторить, соответствует оо-подходу, покрывается юнит-тестами

если в одном классе нужно порядка 50 макросов констант, то стоит задуматься об архитектуре, если это не какой-то базовый класс с настройками фреймворка или чего-то в таком духе

Цитата Сообщение от noname_club Посмотреть сообщение
конструкции со знаком подчеркивания легче читаются
ну тут уж извините, в каждом языке свои конвенции написания кода, и желательно соблюдать их, дабы не оказаться дураком
в Objective-C с подчеркиванием пишутся низкоуровневые конструкции или часть на С, думаю это нетрудно заметить наблюдая за Foundation хотя бы.
Плюс снова повторюсь, во всем мире зачастую макросы константы пишутся начиная с k (kSomeValue), потому людям, работающим с вашим кодом будет легко и привычно.

думаю, тут вы найдете что-то полезное, а так же по простому запросу 'objective-c naming conventions'
http://developer.apple.com/library/m...d/10000146-SW1

Цитата Сообщение от noname_club Посмотреть сообщение
[[[self.dictionary key:d_elementKey] key:d_elementKey] key:d_elementKey]
это что еще за фигня, не нравятся длинные конструкции - разбивайте на короткие, тут как бы очевидно, что чем длиннее конструкция, тем ее тяжелее читать, а то что везде коричневые слова будут маячить вместо зеленых, это погоды не меняет
в C# в Visual Studio вообще все слова бирюзового цвета, так что, там скажете неудобно работать?
это тут вам и розовенький и фиолетовенький и коричневенький лишь бы разработчик не хныкал, и все равно находятся такие, ну насчет цвета это все очень печально, надеюсь вы попадете хорошему тимлиду, который вас быстро в чувство приведет, иначе никак ... вы либо с какого-то php или javascript начинали (простите, наболевшее), либо просто не видели массивные серьезные проекты, где работает по 10-15 человек только на клиенте

вы то ли перевоплощение alexpac26, то ли он и есть, потому что так же упрямо стоите на своем, невзирая на то, что вам везде советуют
пишете наверное сами для себя в кладовке, куда никакая культура кодирования не проникнет, как бы и не старалась, выкладываете на всеобщее пользование корявые и ненужные обрывки кода, то прислушивались бы к всеобщим канонам, раз все-таки хотите вести какую-то деятельность среди других разработчиков, а не наедине с собой
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.07.2013, 02:08  [ТС] #22
в C# в Visual Studio
там язык существенно отличается и строки пишутся без знака собаки @

Плюс снова повторюсь, во всем мире зачастую макросы константы пишутся начиная с k (kSomeValue), потому людям, работающим с вашим кодом будет легко и привычно.
вы тоже частенько пишите kSomeValue? или не пишите вовсе ничего подобного.

либо просто не видели массивные серьезные проекты, где работает по 10-15 человек только на клиенте
опять возвращаемся к тому что "стандарты" программирования становяться жестче по мере увеличения количества разработчиков, вам наверно не знакомо такое чувство как "вдохновение" при написании программы. Для вас это скучная рутина. В которой нельзя ничего поменять в лучшую сторону, даже с архитектурной точки зрения.
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
24.07.2013, 02:42 #23
как раз таки, для меня это интересный коллективный проект, который очень хорошо написан, легко поддерживается и конфигурируется, в который не стыдно привести коллегу или передать его ему и который без меня смогут поддерживать другие программисты зная только логику самого проекта, не углубляясь в детали
для меня творчество - это красота и простота, мне приятно когда другие люди могут без труда вникнуть в мой код, не зацикливаясь на мелочах и не спотыкаясь на костылях

Цитата Сообщение от noname_club Посмотреть сообщение
вы тоже частенько пишите kSomeValue? или не пишите вовсе ничего подобного.
естественно пишу, все мы такое пишем, только вопрос в том, как и где это писать
например файлик констант для каких-то путей в директории проекта, их использует весь проект, их легко конфигурировать и они лежат по назначению

Цитата Сообщение от noname_club Посмотреть сообщение
опять возвращаемся к тому что "стандарты" программирования становяться жестче по мере увеличения количества разработчиков
лучше сразу привыкать писать правильно, потом программировать будет одно удовольствие

например юнит тестирование – поначалу казалась ужасно рутинной работой, зато когда наловчился хоть немного, пишешь функциональность ни разу не компилируя код и в процентах 70-80 он работает сходу, плюс сам код написан красиво и правильно, доступен для рефакторинга больше чем обычный код да и рефакторить можно не боясь что-то сломать, ничего лишнего не пишешь, что потом вызовет кучу головной боли, одно удовольствие
все чисто и ясно, как божий день, дописал что-то, подправил что-то, результат сразу на лицо, в плане регрессивного тестирования больше доверяю машине, чем человеку да и тестировщику меньше головной боли перепроверять или старый функционал не свалился, больше позитива, чем головняка и проблем (сам рад, что все как хотелось да и денег больше получаешь за богатый опыт и хороший, рабочий код), вот это я называю наслаждением

просто оставлю это здесь
http://qualitycoding.org/objective-c-code-smells/
а особенно это
http://qualitycoding.org/preprocessor/#macro

вообще интересный дядька, советую перечитать его блог
1
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.07.2013, 02:49  [ТС] #24
Все это прекрасно, но пока #define выделяются на фоне остальных переменных, и плюс прибавим сюда следование "стандартам" названия констант kDefineValue
Ни enum ни static const, не смотря на кажущиеся преимущества, не смогут так выглядеть как они, а следовательно что с константами что без них, код будет бирюзовой гаммой

а ведь !методы! объявления что у enum и static const, что у #define ИНДЕТИЧНЫ

Оба сидят в хедере и оба прозрачны для изменений.

Так почему не использовать? Банальное не хотение ?
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
24.07.2013, 03:20 #25
Цитата Сообщение от noname_club Посмотреть сообщение
Так почему не использовать? Банальное не хотение ?
семантика

Цитата Сообщение от noname_club Посмотреть сообщение
а ведь !методы! объявления что у enum и static const, что у #define ИНДЕТИЧНЫ
не совсем, вы бы если потрудились прочитать вторую статью, вы бы заметили существенную разницу не только в принципе работы и применении, а и в самом объявлении

ну то что enum может группировать числовые константы и это удобней чем макросы, надеюсь спорить вы не станете
насчет C# я так и не понял, чем там бирюзовые вперемешку со светло-зелеными оттенками не мешают разработчикам и никто там не использует директивы, а тут вот без директив плохо
да и я же дал вам ссылку на шикарнейший источник, это не просто скучающий дядя, а один из тех, на кого весь мир равняется и вам советую того же, тем более объясняет он убедительней меня

смею предположить, что вы выбираете красивое подсвечивание в одной из IDE, грамотности, правильности и чистоте кода и банальное нехотение как раз относится к вам
тут просто уже столько доводов приведено, а вы все стоите на коричневеньком подсвечивании в одной из безгранично многих настроек, одной из многих IDE и текстовых редакторов

кстати текст читать удобней, когда он монотонного цвета, а не пляшет как светофор
в правильно написанном методе никогда не будет путаницы по поводу "откуда эта переменная", так как методы должны быть краткими, выполнять одну и только одну функцию и не быть больше 5-10 строк, и если придерживаться конвенции выделения констант, статических переменных и т.д., то вы сразу заметите что из себя представляет переменная

тут если сразу учиться программировать правильно, можно заметить что все между собой взаимосвязанно и в итоге получается чистый и красивый код, который легко поддерживать

прекрасно сказано
We work in an object-oriented language, so let’s use OO patterns, shall we?
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.07.2013, 09:57  [ТС] #26
насчет C# я так и не понял
ну например там метод объекта вызывается просто как
C#
1
object.method(param1,param2);
и тп что уже позволяет вытворять различные длинные вещи в очень малом количестве букв

в отличие от objc где метод вынужден избыточно называть себя как ENG предложение

Objective-C
1
[object methodWithParam1: param1 AndParam2: param2];
к тому же там строки пишутся быстрее и выглядят в коде лучше, за счет отсутствия знака @, что расширяет их применение, как параметров ассоциативных структур

смею предположить, что вы выбираете красивое подсвечивание в одной из IDE, грамотности, правильности и чистоте кода и банальное нехотение как раз относится к вам.
возмем код с макросом

[object methodWithParam1: kParam1 AndParam2: kParam2];

возмем код без макроса

[object methodWithParam1: kParam1 AndParam2: kParam2];

а теперь угадай какой из фрагментов кода я щас напишу ниже? нижний или верхний?

[object methodWithParam1: kParam1 AndParam2: kParam2];
не знаешь? а почему? а потому что они одинаковые!

Да, код не грамотный с точки зрения того что макрос надо заменить константами и тд и тп.
А в остальном он чистый и правильный с какой стороны не глянь.
Чем то приходится жертвовать...

в одной из безгранично многих настроек, одной из многих IDE и текстовых редакторов
Эта та самая IDE одна единственная с языком ObjC и сравнивать ее не с чем. Текстовые редакторы это просто редакторы, компилировать они не умеют.
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
24.07.2013, 10:16 #27
Цитата Сообщение от noname_club Посмотреть сообщение
Эта та самая IDE одна единственная с языком ObjC и сравнивать ее не с чем.
AppCode от Jetbrains, кстати во многом лучше чем Xcode
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.07.2013, 12:25  [ТС] #28
осталось выяснить каким цветом там раскрашиваются макросы и константы.

Вообще если у них цвет одинаковый (как в C#) то нет смысла использовать #define.
0
Xavier
in god we trust
74 / 74 / 8
Регистрация: 20.04.2012
Сообщений: 201
24.07.2013, 12:35 #29
вам не кажется что пора завязывать? а то вся дискуссия свелась к тому кому какой цвет нравиться.
0
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
24.07.2013, 12:45 #30
Ааааа.

ПРОСТО_ЗАКРОЙТЕ_ТЕМУ.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2013, 12:45
Привет! Вот еще темы с ответами:

Обращение к определенным данным в таблице - PHP БД
Есть такой код: $result = mysql_query(&quot;SELECT name FROM people&quot;); $myrow = mysql_fetch_array($result); $rows =...

Обращение к данным ibQuery запроса - Delphi БД
народ скажите пожалуйста как обратится к результату запроса в ibQuery ,те есть таблица мне нужно узнать сумму значений одного из столбцов

Обращение к данным класса из нескольких - Java
Подскажите, как реализовать, статический класс в котором находятся переменные. класс который будет раз в 5 секунд изменять значения в...

Обращение к данным из другой книги - VBA
привет! у меня небольшой и кажется довольно простой вопрос (сильно упростил задачу, потому что проблема, как мне кажется в этом) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.07.2013, 12:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru