1. JavaScript / Говнокод #19507

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    #pragma strict 
     
    function Start () { 
    function OnMouseDown (); { 
     if(name=="new") { Application.LoadLevel("procedural"); } 
     if(name=="set") { } 
     if(name=="exit") { Application.Quit(); } 
     
    } 
     
    }

    Запостил: mittorn, 21 Февраля 2016

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

    • Сложно, сложно, нихуя не понятно
      Ответить
    • Особенно странно: ; после (). Неужели в Юнити такое компилируется?
      Ответить
      • Ну раз джаваэкмаскрипт позволяет опускать точки с запятой, то почему бы заодно не игнорить лишние...
        Ответить
        • Эта "фича" работает не так как ожидается.
          Ответить
      • не по стандарту как-то.
        Ответить
      • Скорее всего, компилируется... но не так, как задумал программист.

        На ГК был баян типа такого:
        if (x < 0) [100500 пробелов] ; // Счастливой отладки, суки!
            x = -x; // Почему выполняется при положительном x?
        Ответить
        • А ведь совсем недавно Борманд выкладывал подобный код без лишней точки с запятой, где всё равно ничего хорошего не вышло.
          Ответить
          • Кто-то зря заминусовал комментарий 1024--

            Действительно, в ЭКМАскрипте есть автозакрытие оператора, когда транслятор автоматически дописывает точку с запятой там, где считает нужным.
            Ответить
            • Хуй бы все работало как в питоне, где перевод строки заменяет ; , но оно еще и работает не так как ожидают.
              Ответить
              • Вот классика:
                return { 
                    status: "complete"
                };

                Функция возвращает JSON-объект {status: "complete"}.

                Перенесём фигурную скобку на следующую строку:
                return 
                { 
                    status: "complete"
                };


                Интерпретатор дополнит этот код так, как будто тут было написано:
                return ;
                { 
                    status: "complete"
                };

                Т. е. функция вернёт пустой результат (undefined), а далее будет мёртвый код {status: "complete"}

                Иногда автодополнение не срабатывает. Пример есть в Википедии.

                Итак, при написании кода на JS нужно соблюдать два правила:
                1. Бояться, что сработает автодополнение. Т. е. избегать переноса строки там, где теоретически может быть добавлена точка с запятой.
                2. Не полагаться на срабатывание автодополнения. Т. е., наоборот, ставить точку с запятой везде, где нужно разделить операторы.
                Ответить
                • Не автодополнение, а автоподстановка ; в конец каждой строки. Первое поведение есть в питоне (есть пару исключений, например, внутри скобок), а вот второе все портит. ЭКМАблядки соснули.
                  Ответить
                • use strict
                  Ответить
                  • И чем он поможет, например, здесь?
                    return ;
                    { 
                        status: "complete"
                    };
                    Ответить
                  • Ну раз пошел такой базар: чем заставить js материться на мертвый код?
                    Ответить
                    • Сторонними программами для статического анализа типа jslint, jshint.
                      Ответить
                      • Они в ide интегрированы (или в чем обычно пишут js код)?
                        Ответить
                        • Плагины есть, если, конечно, в блокноте не писать
                          Ответить
                        • Есть плагин "JSLint" для Notepad++. Позволяет использовать JSLint или JSHint по выбору.
                          Ответить
                • > Т. е. функция вернёт пустой результат (undefined), а далее будет мёртвый код {status: "complete"}

                  Вспомнил, что Вконтакте и Твиттер мне иногда (случайно, один раз за несколько сотен просмотров) вместо запрошенной страницы показывают голый JSON. Не отлаживал, почему так происходит, да и воспроизвести это трудно, а дамп всего трафика делать неохота, но чисто гипотетически это может быть как раз из-за того, что между return и аргументом влез перевод строки, который браузер по наивности автоматически дополнил точкой с запятой.
                  Ответить
                • Как UB в сишечке.
                  Ответить
                • vanished
                  Ответить
                • vanished
                  Ответить
            • А я про пример с числом Тараса вспоминал. Может, потому поклонники жс и минусуют, что связал эту низкоуровневую проблему с языком-кастолюбом.
              Ответить
        • А толку, включил подсветку пробелов, и всё видно стало.
          Ответить
          • Ну увидишь, что до края экрана идут пробелы, а точка с запятой всё равно за экраном будет.

            Хотя, с другой стороны, пробелы в конце строки всегда подозрительны...
            Ответить
            • Дык и я о том, что пробелы до края это странно. Особенно, если они не убираются при нажатии форматирования.
              Ответить
    • Нахуя "pragma", когда "define" лучше?
      Ответить
      • признайся: ты это просто так написал, да?
        Ответить
    • Что за хуйня? Я этого не постил
      Ответить

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