1. ActionScript / Говнокод #13010

    −89

    1. 1
    2. 2
    if (view_clip.parent.contains(view_clip))
      view_clip.parent.removeChild(view_clip);

    это надо было до такого додуматься

    Запостил: slavara, 16 Мая 2013

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

    • Для красоты нужно все обернуть в метод:
      remove_through_the_ass(view_clip)
      Ответить
    • removeChild - какой-то стандартый метод?
      а есть нечто типа view_clip.removeFromParent() ?
      Ответить
    • А условие чисто теоретически может оказаться false?
      Ответить
      • А вдруг за ту миллисекунду, что исполнялось выражение, параллельный поток успел его убить? Или отца лишили родительских прав...

        Стоп! Автор забыл предусмотреть возможную кончину родителя:
        if (view_clip.parent && view_clip.parent.contains(view_clip))
          view_clip.parent.removeChild(view_clip);
        Ответить
        • парралельный поток и as3, да Вы што?
          Ответить
          • А что, было бы весело. Флеш и так сыпется понемногу, а тут бы он падал каждый день по 100500 раз ;)
            Ответить
        • ты забыл проверить возможное наличие самого view_clip
          Ответить
      • А разве у всех элементов есть родитель? Что там вернётся если самый верхний уровень? Расскажите, AS-ники.
        P.S. А, снизу уже рассказали.
        Ответить
    • removeChild - стандартный
      условие может выкинуть ексепшн(если парент null)
      условие может быть тру, но removeChild выкинет эксепшн
      view_clip.removeFromParent() - не айс подход, дети не должны решать за родителей
      Ответить
      • >дети не должны решать за родителей
        Так мы ничего за родителей и не решаем - просто говорим убить view_clip. Ребенок захотел - самоубился,поставив в известность родителя) Или у вас работает принцип Тараса Б - объекты могут удалять только их родителями?
        Ответить
        • я стараюсь придерживаться этого принципа, за исключением каких-то очень специфичных моментов.. и никогда не гадаю, куда у меня делся объект и почему, не паранойю проверками, с мыслью, а вдруг оно где-то почему-то удалилось уже..
          Ответить
        • Очень правильный принцип.
          Вложенный объект уведомляет вышестоящий, вышестоящий убирает ссылку на вложенный, в шарпе на этом можно остановится.
          Ответить
    • объяснение: код был писан бароном Мюнхгаузеном.
      Ответить
      • В перерыве между "Будем бить через дымоход!" и охотой на оленя. (Чёрт, охота на оленя... это уже ДеНиро какой-то, а не Мюнхгаузен.)
        Ответить
    • А вообще, чего вы ржёте. У Action Script известно откуда ноги растут. В javascript, это обычная практика: element.parentNode.removeChild(element)
      отличие только в том, что там не спрашивают родителя: "Аз есмь?"
      Ответить
    • contains проверяет то, что клип находится где-то в дисплей списке родителя. Но, как правило, ситуаций, когда один и тот же клип может быть либо в непосредственном списке детей, либо глубже по иерархии в реальной жизни не возникает. Так что код выше вполне себе тривиальный / ничего в нем такого нет.
      ЗЫ. Несмотря на неинтуитивную запись, поиск делается от ребенка к предполагаемому родителю, так что максимум, вместо проверки parent получим десяток проверок parent - не смертельно, а писанины меньше. При этом в большинстве случаев, самая же первая проверка parent либо найдет нужного родителя, либо обнаружит, что клип вообще не в списке отображения.
      Ответить
      • view_clip.parent.contains(view_clip) не может быть фолс. Но если это не базовые классы а свой велик...
        Ответить
        • Условие может оказаться false даже во встроенных классах, у стейтов SimpleButton например. Но это уже издержки производства. А так, да, восновном не может.
          Ответить
          • О господи, кто то юзает SimpleButton? Вообще наверно у меня не возникало желаний удалить что то таким образом, поэтому и не сталкивалась. Буду знать.
            Ответить
            • У маски и у hitarea вроде похожие проблемы были. А еще есть картинки в текстовых полях - я уже сейчас не вспомню, но там было много всяких неувязок в том смысле кто чей родитель и как так может быть, что ребенок думает, что у него есть родители, а родители о нем и не подозревают. Помнится, еще странно вели себя объекты спрятанные под clipping rectangle. Вобщем, если бы это было что-то общего назначения, то лишний раз убедиться не помешало бы.
              Ответить
    • напоминает мне об изврате с картинками в текстфилде. у картинки парент - текстфилд, в то же время текстфилд - не дисплейобжектконтейнер.
      Ответить

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