ДействиеСценарий / Говнокод #9275 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
// Flash vars come in as strings. We need them as booleans.
private function _convertToBoolean(value:*):Boolean {
	switch(value) {
		case "1":
		case 1:
		case "true":
		case "yes":
		case "on":
		     return true;
		case "0":
		case 0:
		case "false":
		case "no":
		case "off":
		case "undefined":
		default:
			return false;
		//default:
			//return Boolean(value);
	}
}

https://github.com/tmaiaroto/agile_uploader/blob/master/src/Main.as

Запостил: wvxvw wvxvw, (Updated )

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

  • Да, еще такой момент: если все-таки там прийдет true (ну если уж числа могут, то почему бы и булеану не быть?), то не выйдет каменный цветок.
    Ответить
    • ну, а сам бы ты как такое сделал? По-моему, в том же fwplayer так же
      Ответить
      • 1.
        Boolean(value);

        2. Но если по каким-то причинам очень хочется изобрести что-то новое и необычное:
        private function convertToBoolean(value:*):Boolean
        {
        	return ["1", "true", "yes", "on"].indexOf(String(value)) > -1;
        }

        Естесственно, массив закешировать, а не создавать по-новой. Пример он на то и пример, чтобы быть коротким. Тут еще плохо то, что неожиданно для людей, которые привыкли, что любое не пустое значение строки будет приведено к true, делается все наоборот. Ну и естесственно 7 лишних кейсов, как минимум.
        А этот самый плеер можно целиком сюда выкладывать. Просто скучно немного будет, но он в целом выдержан в духе и стиле подходящем под местные правила.
        Ответить
        • Ну вот кстати кастинг не пройдет же со стрингами "0" и "1" - оба вернут true, что касается "true", "false", то оба тоже вернут true, я подозреваю (нет возможности проверить).

          Второй вариант да, само собой, я именно ожидал увидеть что-то простое и легкое вроде первого, но ведь оно работать не будет 🙁
          Ответить
            • ну, так что от перечисления избавиться не удасться. Ну, только способ надо выбрать поизящнее 🙂
              Ответить
          • Наоборот, не нужно этого делать - зачем вы придумывает свой никому не известный перевод из строки в Boolean?
            Да, по поводу "работать не будет" - так а код в примере вообще ахинею какую-то делает. Мой вариант - это сокращение этой ахинеи до одной строчки. А про полезность я отдельно написал, что метод новый и необычный.
            Ответить
            • Потому что иногда нужно (читай: хочется) явно передать false в флешварсах. А как это тогда сделать? Просто пустыми стрингами кормить? Ну, можно, конечно, но это некрасиво.
              Ответить
            • Почему никому неизвестный? Если продукт готовый, как тот же fwplayer, то люди вообще могут быть не в курсе как кастуются переменные. Для них логично, что если есть on, то есть off, что если есть "1", то есть "0" и т.д. Кроме того, для них пишется документация.
              Ответить
              • Ну а мне нравится буква Ю, потому что у любимой в подмосковном городке глаза белесо белые - это как-то меня оправдает, если я вдруг решу, что именно эта буква должна быть false? Сделано, как это не часто бывает с ECMAScript, по-человечески - не нужно, так и не передавай. Нет, нужно изобрести херню какую-то вместо...
                Нормальный человек даже задумываться не будет о том, чтобы прочитать документацию о таком моменте. Это базисная вещь языка, которую абсолютно нет смысла переопределять. То, что тут сделано, это примерно то же самое, как переопределить отнимание, и заменить его прибавлением...
                Ответить
                • Ну, вот типичный ответ программиста, который не думает о том, что кроме программистов есть еще и потребители, который про стандарты экмаскрипта и знать ничего не знают. Которым показали в документации (или туториале), что можно передать параметр autoplay=true, они и думают, что можно значит и autoplay=false передать.
                  Ответить
                  • >> "1" и "0" дадут true, "true" и "false" дадут true
                    Так это и есть ожидаемый результат. А то, что тут слепили работает непредсказуемо. Для предполагаемо тупых пользователей существует документация по языку и классу Boolean в том числе.
                    Ответить
                    • Ох, в контексте as и любого другого языка программирования это выглядит логично да. И так и должно быть. Я с этим не спорил и даже не говорил об этом.

                      В контексте же строки браузера выглядит нелогично.

                      Сравни:
                      http://example.org/foo.swf?autoplay=true
                      http://example.org/foo.swf?autoplay=false

                      Что ожидаешь от каждого урла? И причем тут тупые пользователи? Они вообще не должны лезть в документацию по языку, на котором у них продукт написан. Они лезут в документацию по продукту. А там написано то, что написали вы. И это должно выглядеть логично.
                      Ответить
                        • Ну, первый вариант тоже не совсем верный, ведь есть параметры которые по умолчанию не false, а true, как тогда с ними быть? 🙂 Явное указание ведь и хорошо тем, что когда много параметров, не нужно помнить умолчания.
                          Ответить
                          • Никто не мешает так называть параметры, чтобы они всегда были позитивными. Если по умолчанию autoplay, то назвать параметр stop. Делать наоборот, это все равно что:
                            if (condition){} else { code }
                            Ответить
                            • Можно, разумеется. Например, если по умолчанию не подразумевается autoplay, то будет

                              http://example.org/foo.swf?noautoplay

                              например. Но я все равно против этого варианта, т.к. нельзя всегда все указывать явно. Видимо, это во мне питонщик говорит.
                              Ответить
                              • И вообще, ваши претензии напоминают:
                                Приходит больной к врачу:
                                -- Врач, мне больно, когда я так делаю!
                                (зажмурившись от отвращения) -- Больной, перестаньте так делать!
                                Вы сами себе пытаететсь создать идиотскую проблему (а вас никто не заставляет), и потом придумываете такое же решение.
                                Ответить
                                • Нет, если уж на то пошло, то мои претензии диктуют здравый смысл, где true - true, а false - false и пользователю не нужно что-то лишнее запоминать.

                                  Проблема многих (сам страдаю зачастую) программистов в том, что они заперты в своем маленьком мирке и часто не выходят даже за пределы реалий одного языка, который они чаще всего (или в конкретной реализации) используют. Именно поэтому есть еще и developer relations, которые могут повлиять на такой вот стиль программистов и сделать пользование продуктом удобным.

                                  wvxvw, с тобой интересно говорить на разные темы, но конкретно в этой ветке я думаю, мы ничего нового друг для друга уже не откроем и мнение не изменим. За сим, предлагаю дискуссию свернуть 😉
                                  Ответить
                              • Да при чем тут Питон, или какой либо другой язык... Вы предлагаете говнорешение тривиальной проблемы. Предлагая только новые варианты, как себе жизнь усложнить. Никому даром не нужны API, в которых изначально заложена сотня багов (а хз, а может поддерживать опечатки пользователя? А что если пользователь напечатал ture вместо true? А почему 1 = true а 11 = false? А может локализовать? А потом бороться с китайским языком и способами напечатать один и тот же иероглиф с разных клавиатур?). То, как строка конвертируется в Boolean - не с потолка взято, за этим стоит какая-то логика. Если бы вы о ней задумались, то остальные вопросы отпали бы сами по себе.
                                Ответить
                              • А в китайском нет вообще слова "нет", можно только отрицательную частицу вместе с глаголом - оп-па, и вообще облом, что делать-то будете?
                                Ответить
                                • Когда ветка доходит совсем до абсурда, ее надо прекращать. Замечу одно, если бы вы работали с пользователями, вы бы сделали так, как сказал я, потому что вас бы задолбали репорты. Или вас бы заставил это сделать кто-то из DR.
                                  Ответить
          • > "0" и "1" - оба вернут true, что касается "true", "false"
            это вам не похапе!
            Ответить
            • Я не знаю похапе. И я не говорил, что такое поведение меня расстраивает. Напротив, вполне логично, что любая строка ненулевой длины возвращает true при кастинге в Boolean.
              Ответить
    • Тут именно программист постарался, типизация могла быть и статической.
      Ответить
  • и GE?E.C Y!K:C!B$F:ZN:T(Y$B!M$M)YЖOQKBAQAZRMUAEKGDEEBIIYJMVMSTMQQPACGOFNGLGFKYDGVJXTXZYAHZFLDVVCONJGIFTFEBHWDOZPJSXHFPOXXFDZWVYMVWLNBKBXEFSIPDTPDUPFSIUJNRSYWZYVIZMOYVKVOHJMMVKXNYLXFFKYDOKUXZTFLOGHZAFDCFWDUXAHJXLDPMKCBDNQJVXVSCMWPWAAUEDCFIWGOFWEVZGSLMUBBVJNDLOMUYDGD
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8