112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
ObjectiveC предикаты, упрощенный метод09.07.2013, 12:58. Показов 3073. Ответов 18
Метки нет (Все метки)
Предикаты в Obj C, как известно, используются там, где нужно фильтровать или найти, сравнить данные
Остановимся на наиболее распространненых случаях использования предикатов - фильтр строкового массива - сравнение строк заглянем в документацию http://macbug.ru/cocoa/predformat#.URul8OjoRGM после прочтения становиться ясно что в том виде к каком предикаты существуют в ObjC использовать не вполне удобно. Проведем классификацию типов выражений с предикатами в макросы // Предикаты
fs - чувствительны к регистру fi - не чувствительны к регистру Расшифровка названий start - совпадание по началу строки end - совпадение по концу строки like - похож на SQL like, ? соответствует 1-му символу, * соответствует 0 или более символов include - совпадение по подстроке (строка содержит строку) regular - совпадение по регулярному выражению Исходный код функций SimplePredicate.h
если нужно сравнить строку с другой строкой то
Мануал по регуляркам тут http://userguide.icu-project.org/strings/regexp однако можно воспользоваться более "понятным" мануалом например по php или JavaScript, выражения практически идентичны пример с регулярным выражением
Тестовая программа
0
|
09.07.2013, 12:58 | |
Ответы с готовыми решениями:
18
Нужен самоучитель по ObjectiveC С чего начать вводную в программирование, и дойти до ObjectiveC? Упрощенный метод Симпсона Предикаты и метод резолюции |
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|
09.07.2013, 13:35 | 2 |
Я вот что непонимаю:
Вам прошлых мыслей сообщества не хватило по поводу многомерных ваших словарей? А я напомню. Опять с велосипедом? Прикрутили гудок и трещалку и считаете что это бонус? Упс, нет. На чем основано Ваше суждение? Какие ваши доказательства?(с) У меня еще один вопрос: На кой черт эти дефайны? Вы где вообще "упрощение" увидели? Напишите мне предикат сложный с вложенными предикатами используя свое упрощение. С реальной моделью данных. Сами убедитесь в несостоятельности Ваших предложений.
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
09.07.2013, 13:35 | 3 |
Снова здорово. Вместо того, чтобы один общеупотребительный язык изучить, давайте свой какой-нибудь изобретем. Опять обострение?
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
09.07.2013, 19:00 [ТС] | 4 |
самую тривиальную задачу со "вложенными" предикатами опишите Добавлено через 17 минут 1) они выделяются коричневым цветом на фоне переменных, что какбы намекает на их постоянство и важность в коде 2) xcode их подсказывает в автодополнении
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
09.07.2013, 19:02 | 5 |
Согласен. Коричневый цвет - он именно на важность и намекает. На постоянство - в меньшей степени, но вот на важность - несомненно!
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
09.07.2013, 19:05 [ТС] | 6 |
сарказм?
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
09.07.2013, 19:06 | 7 |
Разумеется
1
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
10.07.2013, 00:26 | 8 |
Серьезно, был же такой изобретатель, вместо NSDictionary советовал использовать макросы dict и все маломальские конструкции на 1 строку оборачивал в макросы, то ли с ооп знаком не был, то ли про методы не слышал или про то, что код должен быть читаемым в первую очередь, а не просто кучей кастомных макросов горе-программиста.
Вы же пишите одноразовые методы, которые можно использовать в очень узких и конкретных целях, зачем выставлять это на показ, мы же все каждый день пишем какие-то методы для упрощения и удобочитаемости своего кода, но с чего вы взяли что они везде и всем подойдут? Это очередная обертка над итак простым существующим инструментом. Зачем мне учить все эти ваши start end fi fs и держать эту кучу мусора в голове, если есть общеизвестный и принятый формат?
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
10.07.2013, 09:13 [ТС] | 9 |
получается что ВСЕ повсеместно что то используют, причем об этом никто не говорит, ибо стесняются что не так поймут но такие инструменты могут называться "быдлокодом" до тех пор, пока на них нет документации, именно это отличает их от стандартных методов! Подтверждение этому тонны проектов на github, некоторые из них переросли из вот таких маленьких и незаурядных утилит в полноценные инструменты, и ими все пользуются, так как на них есть документация в каком либо виде ---- по прежнему жду пример тривиальной задачи в которой используются вложенные предикаты, для улучшения инструмента
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
10.07.2013, 10:50 | 10 |
Уважаемый, неужели вы не видите, что возражения вызывает не само стремление облегчить работу, а исключительно ПУТЬ. Ну не упрощают дефайны жизнь. Особенно окружающим. Поймите, наконец, что скорость РАЗРАБОТКИ очень слабо связана со скоростью НАБОРА текста (или его длиной, что в общем-то одно и то же). Поэтому простым ПЕРЕИМЕНОВАНИЕМ сущностей можно только запутать коллегу, но никак не облегчить себе жизнь. Вы сейчас напоминаете географа, который вместо того, чтобы выучить названия городов слабо знакомой страны, берет карту и поверх старых имен коричневым карандашиком старательно вписывает свои. А вы подумали о тех, кто и без этих нововведений отлично ориентируется по старым именам? Им же придется заново карту учить и к новым именам привыкать. Когда Vorona писал фразу, которую вы процитировали, уверен, он имел в виду совсем не то, что вы. Хотя бы потому, что упомянул удобочитаемость
А вообще, найдите человека по имени alexpac26 и начните с ним какой-нибудь совместный проект. Если это не ваш второй ник, вы с ним сработаетесь. Если это тоже вы, сработаетесь тем более Только не подеритесь если у вас обнаружится 2 разных макроса для обозначения, ну например, NSString.
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
||||||||||||||||
10.07.2013, 11:42 [ТС] | 11 | |||||||||||||||
давайте ваще не будем еще ими пользоваться! --- поставлю вопрос по другому. Очевидно что чтобы например сравнить строку другой строкой на вхожение подстроки без учета регистра требуется написать следущий код:
что если все операции будут сразу в условии? как лучше это сделать? так?
еще такой вариант
- предикат составлен строго по правилами - название функции использует "стандартные" слова из названий похожих функций - и самое главное все умещается в одну строку
0
|
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|
10.07.2013, 12:28 | 12 |
noname_club, вам уже целая страница конструктива была, это не учитывая прошлую тему про "упрощение обращений к многомерным словарям", а воз и ныне там.
Да, а Ваша выдумка намного удобнее и понятнее, давайте использовать ее и еще 100500 дефайнов в pch файле, ибо не стандарт же, но как же без "упрощения". Если бы Вы предложили чтото реально стоящее, я первый бы написал что да, это правда круто, и правда стоит использовать. Однако сейчас я вижу как Вы встали в "позу", и совершенно не прислушиваете к общественности. Банально, переведите пост и поместите на stackoverflow, gist. Может подержат? Если да, обещаю вдумчиво все пересмотреть, ознакомится с комментариями я перед Вами извинится за то, что сразу не увидел блестящего решения на мой взгляд несуществующей проблемы. Но как мне подсказывает здравый смысл - этого(@"Может подержат?") не будет.
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
10.07.2013, 12:37 [ТС] | 13 |
нет такого не будет. будет один файл который будет туда подключаться и "создавать удобства", не только с предикатами вообще идея класса с абстрактными инструментами, которые не зависят от типа приложения не нова я думаю и имеет уже некоторые реализации. И как я выше говорил, нужно лишь написать документацию к классу чтобы сделать его понятным для остальных.
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
10.07.2013, 13:39 | 14 |
А вот сейчас не понял. Неужели в моем сообщении мало конструктива? И где в нем переход на личности? Или я был прав в своем предположении относительно вашего единства в двух лицах и слово "Переименование" вас так задело? Так я имел в виду переименование методов, а не людей
В общем, я бы на вашем месте извинился за необоснованное оскорбление.
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
10.07.2013, 13:54 [ТС] | 15 |
еще раз
тут уж кому как удобно тут больше подходит проезд в тоннеле под горой, вместо того чтобы лезьть на нее или обходить ее
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
10.07.2013, 15:31 | 16 |
Стремление верное. Верным путем будет написание методов, облегчающих жизнь, прячущих какие-то длинные последовательности, которые приходится каждый раз заново писать. Беда в том, что iOS SDK писали тоже достаточно умные люди, у которых было на это достаточно много времени. Поэтому как-то еще больше оптимизировать их работу достаточно трудно. Не невозможно, но трудно. И фокусы с дефайнами вида #define GOOD = TRUE тут точно не помогут.
В подавляющем большинстве случаев тут много дешевле обойтись строковой константой. Дефайн заставит каждый раз создавать объект, что в циклических операциях может привести к перерасходу памяти и аккумулятора. Если строка используется 1-2 раза за жизненный цикл приложения, можно обойтись дефайном. Но точно не для того, чтобы переименовать уже имеющиеся константы. Не передергивайте. Это некрасиво. Вы писали о переименовании СУЩЕСТВУЮЩИХ сущностей. Уже поименованных. Сравнение очень верное. Его корректность вы поймете, когда встретитесь с таким же подходом у другого программиста, который уже придумал, как и вы, свой собственный язык и лихо нафигачил на нем проект в пару сотен тысяч строк. Только вот беда - он придерживался других правил именования. Своих каких-то. А вам надо как можно скорее в этот проект включиться. Так вот, ваш метод лично мне не кажется удобнее. О чем я и написал довольно пространно и, на мой вгляд, доходчиво и аргументированно. На самом деле, я очень рад за вас видя, что вы мыслите нестандартно и обладаете недюжинной энергией. Я просто стараюсь направить ее в нужное русло. По крайней мере, вывести из ненужного. А интересы - самые что ни на есть шкурные: шарик у нас маленький и с каждым годом все меньше. Вдруг мы с вами один проект писать будем? Или с вашим последователем? Мне не хотелось бы, чтобы он был написан так, как вы призываете. Вот как-то так...
0
|
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
|
|
10.07.2013, 16:34 [ТС] | 17 |
То есть количество макросов не влияет на скорость компиляции, а только на скорость работы препроцессора которую можно не учитывать вообще То есть fs_start и fs_end являются переименованными "сущностями" по отношению BEGINSWITH и ENDSWITH ? согласен чтото мне тоже в них теперь не нравится
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
10.07.2013, 21:21 | 18 |
уж извините меня, но быдлокодированием я не занимаюсь и всех остальных отучиваю от этого
ваш пример попросту никому не нужен, сегодня вам запятую нужно обернуть в кавычки, завтра сделать так, чтобы где-то экранировались определенные символы, но это настолько конкретные и простые задачи, что попросту нет смысла заниматься таким вот пожертвованием в сторону развития, так сказать, комьюнити ибо я вам могу привести 300 примеров как можно по-разному решить эту проблему в различных ситуациях и вы поймете что все это чисто конкретика да и нельзя просто взять и все готовые решения выложить в интернет, потому что проблемы всегда разные и вы будете дольше искать решения и разбираться в них, чем их можно написать допустим, хочу чтобы после каждого запроса с пятым айдишником, отсылался имеил мне на почту и где-то на третьем элементе массива, который вы перебираете пусть пишется в лог какой-то анекдот, чтобы кодилось веселее, так что мне прийдется разобраться в вашем коде и перелопатить этот ущербный метод, чтобы добиться такого результата? без проблем, создайте что-то действительно универсальное и уникальное, что кому-то пригодится, вот например AFNetworking, JSONKit, RestKit, ReactiveCocoa или Reachability, вот это действительно универсальные инструменты, которые нужны почти всегда
0
|
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
|
|
10.07.2013, 23:07 | 19 |
Нельзя не учитывать. Пример: макрос вида #define FIELD = @"fieldName". Если в цикле 100 раз встречается макрос field, то во время выполнения 100 раз создастся объект типа NSString со строкой fieldName. Просто потому, что препроцессор заменит его на @"fieldName". И 100 таких объектов попадет в release pool. А если использовать константу вида NSString * const kFieldName = "fieldName"; будет использован один единственный объект, который будет жить пока жив процесс, но при этом не размножится. Теперь разница понятна?
Значит, я не зря по клаве барабанил Добавлено через 5 минут Я бы в этот список еще MKNetworkKit добавил. Тоже достойная вещь. К сожалению, навскидку не могу выдать аналогичную по полезности идею. Но тут дело за вами. Дерзайте, ищите. Благо, энергии, похоже, вагон. Направьте же ее на полезное дело.
0
|
10.07.2013, 23:07 | |
10.07.2013, 23:07 | |
Помогаю со студенческими работами здесь
19
Встроенные предикаты. Предикаты взаимодействия, размещение данных упрощенный RegexKitLite Windows 7 - упрощенный стиль упрощенный тернарный оператор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |