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

    −407

    1. 1
    http://habrahabr.ru/post/244487/

    Очень жаль всех этих людей, которые вынуждены писать на этом выхлопе от Apple.
    "Мыши плакали, кололись, но продолжали грызть кактус."

    Запостил: cyperh, 30 Ноября 2014

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

    • Это что, в некоторых языках ВООБЩЕ нет ни именованных параметров, ни каррирования, ни возврата нескольких значений, ни вложенных функций.
      Или есть но через жуткие костыли - и ведь все равно едят.
      Ответить
      • Я не знаю про какие костыли говоришь, но не понимаю как это все можно называть более читаемым. Как можно нызвать читаемым вот это?
        func hello(name name: String) {
            println("hello \(name)")
        }

        зачем нужно вот это вот личшее name якобы для именования параметра, это больше похоже на костыль, мол делали делали они Swift, обкурившись травы, сделали, а потом начали судорожно добавлять костылей, о которых ты говоришь. Swift еще более менее читаемым сделали, по сравнению с objective-c, имхо.
        Ответить
        • И дальше по тексту следующее: "Вместо этого, просто добавьте # перед именем параметра для сокращения", да, мне нужно еще знать, надо поставить # или _ для этих именованых параметров, тем более что дальше.
          Про init вообще убило: "Заметим, что в противоположность другим методам, имя первого параметра init метода всегда требует внешнего имени при получении экземпляра класса."
          Ответить
          • Ну, для меня как постороннего человека что ObjC, что Smalltalk выглядят как куча квадратных скобок, которые надо напрягая мозг парсить. Для человека разбирающегося в ObjC - возможно будет наоборот, но эппл видимо решило на это не рассчитывать.
            А swift - вполне понятен без знания языка. Ну да, #. А в примере на ObjC в начале статьи вообще какие-то загадочные плюсы и минусы, да еще и указатели в 21 веке.
            А про костыли - это языки типа крестов имел в виду.
            Ответить
        • func hello(name name: String) {
          println("hello \(name)")
          }
          This code you can use!
          hello(name:"MyNameIsShit");
          Or
          hello("MyNameIsShit")

          if you will implement code
          func hello(# name:String) {
          println("Hello \(name)")
          }
          the sharp will inform compiler that external name of variable is the same.

          You can implement
          func hello(name:String) {
          println("Hello \(name)")
          }
          But in this case you cannot call the method
          hello(name:"MyNameIsShit")

          Xcode will warning you if external name is the same with local name and will suggest you to put sharp prefix.
          Ответить
    • На чем же ты зарабатываешь себе на жизнь, друг?
      Ответить
      • Явно не на яблоках.
        Ответить
        • Но ведь яблочники - одна из самых платежеспособных аудиторий... Или нет?
          Ответить
          • Этого я не знаю) Тем более что тема именно о кривости синтаксиса самого яблочного языка и том, как они делают костыли, про которые потом говорят как о средствах повышения читабельности. Ну да, посреди этой кривости, может быть это и правда средство для повышения читаемости, вопрос лишь в том, почему сразу нельзя было сделать код читаемым, чтобы потом не городить весь этот зоопарк.
            Ответить
          • Думаю, что лобать на яве для банков еще выгоднее. Но ява куда хуже.
            Ответить
            • куда хуже чем что?
              javaee и ios это несколько разные ниши, принципиально
              Ответить
              • собственно, javaee разная бывает
                есть замечательные ejb/ws/jpa (но, скучноватые)
                а есть полный ад и израиль jsf
                Ответить
                • О уважаемый в прошлом С++ маг... Расшифруй для нас эти обревиатуры.
                  Ответить
                  • ejb - Предприимчивые Кофейные Бобы
                    ws - Паутинная Служба
                    jpa - Зодчество Кофейного Упорства
                    jsf - Лица Кофейного Подноса
                    Ответить
                    • Вам следует работать в Microsoft. Лет десять назад было такое развлечение: читать MSDN/TechNet на русском и угадывать что значит "веб узел", "обозреватель" и "система имен ответственности"
                      Ответить
                  • в ынтерпрайзной жабке дофига "технологий"-кирпичей, которыми высирается очередной щедевр

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

                    об этом ты можешь почитать и на педивикии в javaee/Технологии

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

                    причем настолько проста, что вовлечение новичка в процесс не занимает много времени, налажать сложно, при желании можно нанять армию обезьянок и всё равно получить вменяемое масштабируемое решение

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

                    один софт, который мы сопровождаем (и интегрируем) имеет бекофис на JSF
                    я жду по 60 секунд открытия страниц, где можно конфигурять те или иные бизнес-объекты
                    это просто маразм
                    Ответить
                    • Смешно что при этом цветет и пахнет апокрифический мир спринга, который вскоре и вовсе перейдет на OSGI и
                      JavaEE станет ему не нужна.
                      Ответить
                      • osgi давно пора, а то спринговый монолит для серьезного решения иногда напрягает целиком редеплоить
                        всё никак не принужу своих жавоёбов освоить, жалуются, что времени у них нет
                        Ответить
                        • >> жабоёбов
                          _    _
                             (o)--(o)
                            /.______.\
                            \________/
                           ./        \.
                          ( .        , )
                           \ \_\\//_/ /
                            ~~  ~~  ~~


                          Впринципе, можно и без OSGI редеплоить по частям. При наличии SOA/ESB можно редеплоить кусочек
                          Ответить
      • Судя по бугурту Вы программируете под IOS?)
        Ответить
    • Привет SwiftGovno
      Ответить
    • А слона то я и не заметил. Там, оказывается, еще одна статья имеется, http://habrahabr.ru/post/244575/ Switch обработка ошибок. Си стайл? И это позиционируется как что то новое и воспринимается как хорошее?
      Ответить
      • Это не си-стайл, это ФП-стайл, как в каком-нибудь хаскеле. Так что да, позиционируется как новое и преподносится как хорошее.
        Ответить
        • Один-в-один как в Хексе. Ну только там не ошибки так обрабатывают, но swtich используют таким образом, и синтаксис такой же. Я даже сначала подумал, что это код на Хексе.
          Все-таки, поскольку на Хексе я таки написал что-то порядка 20К-30К строк, то могу честно сказать, что это не удобно. Все те же проблемы с композицией и расширяемостью. Снижается возможность повторного использования кода (энумератор уже никак не дополнить после того, как он существует, только править исходники). Вобщем, буэ.
          Ответить
      • Очень жаль всех этих людей, которые не пробовали монадическую обработку ошибок, но при этом любят кричать с колокольни и кидаться какашками. К слову, в Rust обработка ошибок построена аналогично.
        Ответить
        • Не пробовал, да и не тянет). Да меня больше смущает нагромождение синтаксиса, которое трактуется как способ повышения читаемости. Я человек далекий от яблок, но прочитав эти посты на хабре, мне реально стало противно. Похоже на очередную попытку яблок сделать что то "особенное" из того, что им не является. Я правда не понимаю зачем все эти усложнения и какую цель приследовали разработчики. Раз это инструмент разработчика, почему бы не сделать его простым и понятным? Не знаю специально или нет, но ведь в целом языки, многие, имеют схожий синтаксис и семантику и в этом есть смысл. Когда впервые увидел Obj-C, ничего не понял. Понятное дело что все это дело привычки, но первые впечатления явно отталкивающие.
          Ответить
          • Мне всё же кажется что лучше попробовать язык прежде, чем говорить что "не тянет":)

            Я вовсе не защищаю Apple, но фраза "не пробовал, да и не тянет" напоминает как раз крики типа "виндус мастдай" которые мы тут недавно обсуждали)
            Ответить
          • > Я правда не понимаю зачем все эти усложнения и какую цель приследовали разработчики.

            А мне вот всё прекрасно понятно. Взяли модные течения из современных языков вроде Scala/Go и поставили их на рельсы отлаженной платформы.

            Люди, писавшие на Scala или других гибридных/мультипарадигменных языках, врядли удивятся хоть одной фиче языка, введённой в Swift.

            Маком не пользуюсь, на свифте не пишу. Статьи открыл, ничего особо плохого в свифте не увидел.
            Есть какие-то конкретные претензии к языку? Потому что пока это выглядит как "ололо тут не так, как я привык, значит - говно!".
            Ответить
            • Вот у меня претензии по именованию: во-первых, зачем писать name1 name2 type и использовать как #name2 value вместо того, чтобы писать name type и использовать как #name value.
              Плюс какая-то асимметричность этой записи относительно первого параметра. Где-то его писать нельзя, где-то нужно, из-за чего возникают какие-то странные традиции именования.

              Больше претензий нет.
              Ответить
              • >Вот у меня претензии по именованию: во-первых, зачем писать name1 name2 type и использовать как #name2 value вместо того, чтобы писать name type и использовать как #name value.
                Совместимость с obj c, я полагаю. В нем методы
                - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {} // Objective-C


                именуются

                tableView:numberOfRowsInSection:

                "name1 name2 type" name1 будет частью имени метода

                У меня пока претензии к отсутствию namespace, вменяемой модульности и, в целом, к огороженности яббла
                Еще могу вспомнить, что я ронял компилятор swift и clang/llvm у меня пропускал некоторые выражения
                Ответить
                • >>У меня пока претензии к отсутствию namespace, вменяемой модульности и, в целом, к огороженности яббла
                  Еще могу вспомнить, что я ронял компилятор swift и clang/llvm у меня пропускал некоторые выражения
                  Подпишусь под каждым словом. По той причине, пока, переходить на свифт резона не вижу, но, пока. Статья же, отчетливо отдает первым языком человека: "Ой, тут педалька другого цвета? Какая гадость".
                  Ответить

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