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

    0

    1. 1
    2. 2
    3. 3
    ...
    ([dictionary stringObjectForKey:@"scale"].length > 0) ? (_scale = [dictionary stringObjectForKey:@"scale"]) : (_scale = @"1");
    ...

    Инициализация переменной с помощью тернарной операции.

    Запостил: r1817821, 03 Ноября 2017

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

    • лол, а stringObjectForKey не могло nil вернуть? нахера такая вербозность глупая?
      Ответить
    • Где в Objective C C?
      Больше на руби/CSS/говно похоже
      Ответить
      • Несмотря на необычный синтаксис ObjC обратно совместим с С, в отличие от крестов.

        Во всяком случае раньше был, как там у него с генериками и прочими новшествами С11 не знаю.
        Ответить
        • Что означает "обратно совместим"? Не манглит сишные имена? В крестах пишешь extern "C", вот и вся обратная совместимость. Оно практически во всех сишных хедерах за ифдефом сидит.
          Ответить
          • Возможно имелось в виду, что обж си - надмножество си. А кресты типа не совсем строго надмножество.
            Ответить
          • в си можно
            PITUH *pituh_pointer = malloc(sizeof(PITUH));
            А в крестах, емнип, надо кастить!
            Ответить
            • class malloc {
              public:
                  malloc(size_t size) {}
                  template <typename T> operator T*() {
                      return new T;
                  }
              };
              https://ideone.com/ld131s
              Ответить
              • Митушок всегда найдет выход
                Ответить
                • Я же, со своей стороны, нашёл вход в твой анус.
                  Ответить
                  • То есть из ануса своего папы ты уже выбрался?
                    Ответить
                    • Чувак, ты реально крэйзи.

                      Поставил плюс за папу, проверь.
                      Ответить
            • PITUH *pituh_pointer = new PITUH; //не вариант, не?

              В объектном си щас
              PITUH *pituh_pointer = malloc(sizeof(PITUH));
              тоже не напишеш без каста - манагеры заинтересованы максимально затрахать разработчика и требуют настраивать сейчас в компиляторе Варнинг ас Еррор
              Ответить
              • Бля, если ты без палки даже ворнинги не чинишь, то я тебя вообще не уважаю.
                Ответить
      • Обжектив си это надмножество си примерно как с++ (но кресты не совсем надмножество).
        Можно межать код на си и обжи. Собссно, программа под ios/macos начинается с обычного сишного main, внутри которого делается какой-нить NSApplication

        в древности objc реализовывался препроцессингом и преврашал код в си
        теперь это уже не так.

        Из за обратной совместимости с сями в обжс много мерзких лиреталов. Нельзя писать "foo" потому что это будет строка (char*), надо писать @"Foo" (NSString будет) итд.

        ну а сходства с рубями у них от общего предка smalltalk
        Ответить
        • Кстати, не все API яблок реализованы на ObjC/Cocoa. Есть огромный CoreFoundation и не всё в нем имеет ооп обертку в foundation, есть API KeyChain итд.
          Так что яблочинику надо было уметь и чистый си тоже.

          Вполне себе: CFTypeID SecKeychainGetTypeID(void);

          Правда теперь у всего есть свифтообертки (или у свифта хороший интероп с сями и он умеет их просто вызывать)_
          Ответить
          • >> у свифта хороший интероп с сями и он умеет их просто вызывать

            - ну, неплохой. https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_13
            Ответить
        • > в древности objc реализовывался препроцессингом и преврашал код в си

          В C++ так же было: был кросскомпилятор Cfront, который код на C++ превращал в код на чистом Си. Наследник Cfront'а — коммерческий компилятор Comeau C++.

          А ещё в старых версиях LLVM (до версии 3.1) был сишный бекенд (-march=c), выдававший страшный код.
          Ответить
    • на c++ выглядело бы адово убого
      Ответить
      • const auto pos = dictionary.find("scale");
        scale_ = (pos != dictionary.end() && !pos->second.empty()) ? pos->second : "1";
        Почему scale_ это строка, причём потенциально пустая, это отдельный вопрос.
        Ответить

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