Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Меня, если честно, в большее недоумение ставят 7 слов после знака минус. Т.е. какое-то из них - явно название метода, а остальные 6 - его тип? пространство имен в котором он объявлен? генерики такие?
А заодно и вопрос к знатокам Obj-C: а в языке есть какие-нибудь средства / техники для того, чтобы уменьшить количество слов на погонный метр? Просто с чисто типографской точки зрения, Obj-C больше всего на 1С похож изза длиннющих строчек и названий. Даже Ява не такой многословной кажется в сравнении. Ну, чтобы, например задефайнить типа:
тут все просто. Тип метода указывается сразу после знака - или + в круглых скобках. Каждый параметр метода идет после двоеточия, а слово перед двоеточием – это метка параметра и она входит в имя метода. Это сделано для улучшения читабельности – в большинстве случаев можно прочитать имя метода и понять что он делает. В данном случае имя метода:
tableView:cellForRowAtIndexPath:
Обычно, если параметров больше двух-трех, описание метода разбивается по параметрам и получается примерно так:
А можно, например, для той же читабельности, не писать метки аргументов, а оставить только имена? Просто это ж писанины сколько!.. да и вообще расписать название метода с тремя параметрами на 3 строчки - я думал, что такое ток по неопытности в С++ бывает, когда кто-то переусердствует с const.
Т.е. в Питоне и Лиспе есть похожие вещи, но там они не обязательны, и собственно, используется для того, чтобы не приходилось забивать аргументы null'ами если нужно использовать только последний из списка.
Выглядит немного странно, да, но опять же, вызовы все же проще читаются. В первом случае будет не сразу понятно, создается ли прямоугольник из координат левой верхней точки и ширины с высотой или из координат двух противоположных точек:
И весь этот boilerplate только ради того, что кто-то может захотеть видеть переменную внутри функции не так, как ее хотелось бы называть снаружи? Так для таких случаев можно было бы использовать width:(float)w, а для всех остальных по дефолту предположить, что :(float)width имеет метку width...
[Rectangle makeRectWithX:10 y:20 width:30 height:40]
Если честно - смотрится как говно.
[Rectangle makeRect x:10 y:20 width:30 height:40]
Имхо, смотрелось бы намного приятней и наглядней...
P.S. Все меньше желания заниматься изучением ObjectiveC...
на самом деле "смотрится" практически одинаково 🙂
Повторюсь: метка входит в имя метода и это сделано для повышения читабельности – вызов можно буквально прочитать как предложение. И мы говорим о методе с именем makeRectWithX:y:width:height:
> и это сделано для повышения читабельности
Ну вот моему взгляду, не привыкшему к ObjC, легче читать с пробелом. И сигнатуру я бы прочел как makeRectWith:x:y:width:height. Имхо (и это моё имхо), первая метка слитая с именем смотрится ужасно. Мы же, в конце концов, говорим о методе, который выставляет все 4 свойства, а не только Х. Тогда почему Х как-то выделяется среди них?
x выделяется из-за camelCase. Просто вы просто воспринимаете "метки", как дополнительные штуки в сигнатуре, а это всего лишь части имени, которые располагаются перед соответствующими параметрами
читается как add observer selector name object? Что-то скрытого смысла я тут не вижу ;(
Видимо плохой пример?
> Просто вы просто воспринимаете "метки", как дополнительные штуки в сигнатуре
Да, вы правы. Идею я понял, но видимо надо еще привыкнуть к таким названиям.
Странно, я вчера точно отправлял комментарий...
Пример нормальный, это я, пожалуй, немного преувеличил, говоря "буквально". Предлоги все же иногда опускаются, когда они достаточно очевидны. Данный метод читается так: add observer x with selector y for name z from object o.
о боги! за что нам такое счастье?))) после индусов лопатами надо "счищать" все эти капролиты кода) сам сейчас работаю над проектом который от такого же гения достался...void методы пытающиеся постоянно что-то вернуть и в противовес им -(someObj*){...} в котороых return something; просто отсутствует)
А заодно и вопрос к знатокам Obj-C: а в языке есть какие-нибудь средства / техники для того, чтобы уменьшить количество слов на погонный метр? Просто с чисто типографской точки зрения, Obj-C больше всего на 1С похож изза длиннющих строчек и названий. Даже Ява не такой многословной кажется в сравнении. Ну, чтобы, например задефайнить типа:
?
Обычно, если параметров больше двух-трех, описание метода разбивается по параметрам и получается примерно так:
Аналогично, с вызовами метода:
Т.е. в Питоне и Лиспе есть похожие вещи, но там они не обязательны, и собственно, используется для того, чтобы не приходилось забивать аргументы null'ами если нужно использовать только последний из списка.
Выглядит немного странно, да, но опять же, вызовы все же проще читаются. В первом случае будет не сразу понятно, создается ли прямоугольник из координат левой верхней точки и ширины с высотой или из координат двух противоположных точек:
А во втором да:
[Rectangle makeRectWithX:10 y:20 width:30 height:40]
Если честно - смотрится как говно.
[Rectangle makeRect x:10 y:20 width:30 height:40]
Имхо, смотрелось бы намного приятней и наглядней...
P.S. Все меньше желания заниматься изучением ObjectiveC...
[Rectangle makeRectWith x:10 y:20 width:30 height:40]
Повторюсь: метка входит в имя метода и это сделано для повышения читабельности – вызов можно буквально прочитать как предложение. И мы говорим о методе с именем makeRectWithX:y:width:height:
Ну вот моему взгляду, не привыкшему к ObjC, легче читать с пробелом. И сигнатуру я бы прочел как makeRectWith:x:y:width:height. Имхо (и это моё имхо), первая метка слитая с именем смотрится ужасно. Мы же, в конце концов, говорим о методе, который выставляет все 4 свойства, а не только Х. Тогда почему Х как-то выделяется среди них?
читается как add observer selector name object? Что-то скрытого смысла я тут не вижу ;(
Видимо плохой пример?
> Просто вы просто воспринимаете "метки", как дополнительные штуки в сигнатуре
Да, вы правы. Идею я понял, но видимо надо еще привыкнуть к таким названиям.
Пример нормальный, это я, пожалуй, немного преувеличил, говоря "буквально". Предлоги все же иногда опускаются, когда они достаточно очевидны. Данный метод читается так: add observer x with selector y for name z from object o.