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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    public do(action: 'un' | 're'): void {
        const result = (<any>this._appApi.app.documentManager.current)[action + 'do']();
        if (!result.success) this._toastService.error(result.errorMessage, `Ошибка ${action}do`);
    }
    
     <button (click)="do('un')" title="Отменить"><i class="material-icons md-36">undo</i></button>
     <button (click)="do('re')" title="Повторить"><i class="material-icons md-36">redo</i></button>

    Запостил: mazhuravlev, 01 Ноября 2017

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

    • Не знал, что так можно.
      Ответить
      • Согласен. Вообще, питушня какая-то.
        mazhuravlev, это такой ECMAScript стал в 2017?
        Ответить
        • Это ж TypeScript.
          Ответить
          • И как тайпскрипт, кстати? Стоит углубляться?
            Как они прикручивают статическую типизацию ко всякой хрени типа jquery?
            Ответить
            • Обязательно стоит хотя бы попробовать, правда можно подсесть, особенно если использовать редакторы, которые поддерживают автокомплит и статический анализ, типа WebStorm.
              Со сторонними библиотеками несколько путей: могут уже существовать определения типов для популярной библиотеки, здесь например: https://www.npmjs.com/~types, можно написать определения самостоятельно, и еще есть вариант просто задекларировать переменную, в которой лежит библиотека, если она подключается глобально, как any, это так сказать выход в js, у any него не проверятся ничего. Пишем declare let jquery: any; и делаем с ним, что хотим.
              Ответить
              • > определения типов для популярной библиотеки
                красивое решение
                Ответить
                • Какая прелесть!

                  https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/jquery/index.d.ts
                  Ответить
                  • Вот вам ещё биндинги для clojure compiler
                    https://github.com/google/closure-compiler/blob/master/contrib/externs/jquery-1.9.js
                    -- see more on
                    https://github.com/google/closure-compiler/wiki/Externs-For-Common-Libraries
                    Ответить
                  • Ну хоть библиотеку целиком не переписывать под ещё один язык.
                    Если ещё можно дописывать свои сигнатуры или изменять старые (на случай, если типы отстали от библиотеки), то всё вообще хорошо.
                    Ответить
                • Решение хуевое, это как если бы я писал .c файлы, а ты для них писал бы .h файлы.
                  Но выбора-то нет: хочешь стат типизации -- пиши скелетики
                  Ответить
                  • Если сразу на TS писать, скелетики не нужны, и чтобы просто использовать библиотеки, не нужны, объявляем как any и погнали. Был еще флаг в tsconfig, который давал подключать прям js файлы, может и сейчас есть.
                    Ответить
                    • "если сразу писать" то да.

                      Я понимаю что TS лучше чем JS, понимаю что статическая типизация и WebStorm сильно упрощают программирование (с js webstorm почти не помогает)
                      Ответить
                  • > как если бы я писал .c файлы, а ты для них писал бы .h файлы
                    Это всё же лучше, чем мне писать и .c, и .h. Мне бы пришлось постоянно следить не только за скелетиками, но и за логикой - либо копировать куски кода при каждом обновлении библиотеки (реализация в библиотеках меняется чаще, чем интерфейсы), либо всё это реализовывать самому с нуля.
                    Хоть какое-то переиспользование.
                    Ответить
                    • >>Это всё же лучше, чем мне писать и .c, и .h. Мне бы пришлось постоянно следить не только за
                      Ну, обычно это делает IDE:) Писатели на С, C++ и ObjectiveC так именно и живут.
                      Ответить
                      • как писатель на с++, заявляю, что иде - для ламеров и формошлепов
                        Ответить
                        • Да ну... размен пары-тройки гигов оперативки на няшную подсветку опечаток, имхо, вполне окупается.
                          Ответить
                          • а так же на рефакторинги, файнд юзаджи и генерацию бойлерплейта
                            Ответить
                            • > файнд юзаджи
                              Компилятор найдет.

                              > рефакторинги
                              Search&replace порефакторит.

                              > генерацию бойлерплейта
                              Расслабляет и дает голове отдохнуть.
                              Ответить
                              • > бойлерплейт
                                > Расслабляет
                                Больной ублюдок!
                                Ответить
                              • >>Компилятор найдет.
                                Особенно это удобно когда тебе надо посмотреть "кто еще использует метод".

                                >>Search&replace порефакторит.
                                Особенно метод с именем getName()

                                >>Расслабляет и дает голове отдохнуть.
                                Лучше сделать зарядку.
                                На самом деле с IDE есть одна проблема: она упрощает написание ГОВНА.

                                Когда ты пишешь в редакторе (да еще и на скриптовом япе, лол!) ты просто вынужден держать в башке примерную архитектуру и писать внятную доку тоже должен.

                                А когда у тебя есть IDE то начинается "ой, я не знаю как это работает, поищи использования и сделай аналогично, посмотри по коду, подебажь, итд"
                                Ответить
                                • >> Search&replace порефакторит.
                                  > Особенно метод с именем getName()
                                  Просмотр каждого изменения решит этот вопрос. Сначала поиск и замена по одному вхождению, чтобы убедиться, что в этом месте действительно нужна была замены; потом повторный поиск и просмотр всех вхождений, чтобы убедиться, что (а) заменено всё, что надо (б) заменено как надо.

                                  Например, у аргумента функции f сменился тип. В некоторых местах надо заменить f(x) на f(T'(x)), а в некоторых - оставить как есть, т.к. в функцию, вызвавшую f уже передали новый T' вместо старого T. Компилятору оставлять такое не стоит - мало ли, какие там неявные касты могут быть (преобразования между 6 типами в JS и практически бесконечностью типов в C++)
                                  Рефакторить - так рефакторить, а не просто имена менять.
                                  Ответить
                                  • Смена имени вполне себе валидный рефакторинг, равно как добавление нового параметра.

                                    Не вижу смысла ходить в 28 мест и везде менять A и A'.

                                    Если ЯП стат типизирован то компьютер может решить эту задачу, а раз может -- пусть решает.

                                    Но это относится только к стат типизации конечно. В твоем JavaScript все равно придется проверить руками все места (ну или положиться на покрытие тестами) и потому для JS IDE нужен куда в меньшей степени. А может и вообще не нужен
                                    Ответить
                                    • > Если ЯП стат типизирован то компьютер может решить эту задачу, а раз может -- пусть решает.
                                      Компилятор имеет возможность в идеальном случае, да.
                                      Но я же говорю, неявные касты портят картину.
                                      К тому же, пройти прокликать все ошибки и поискать все вызовы f - занятие почти эквивалентное. К тому же, если запустить компилятор до того, как некоторые функции, вызывающие f, перевели на T', он укажет на эти места, но менять там ничего не надо.

                                      > для JS IDE нужен куда в меньшей степени. А может и вообще не нужен
                                      Как минимум, питушня, подсказывающая имена сущностей, здесь полезна.
                                      Ответить
                                      • Конечно он не поможет с ручными кастами, рефлесией в жаба/c# итд.
                                        Ну всё таки в 80% он поможет и сэкономит время.

                                        JS просто трудно обычно статически хоть как-то анализировать, и потому WebStorm показывает все, известные ему символы:)
                                        Ответить
                                        • > Ну всё таки в 80% он поможет и сэкономит время.
                                          Всё так. Жаль только, что уйдёт это время на отладку какой-нибудь нехорошей питушни. Всё тлен.
                                          Ответить
                          • Это если компьютер мощный и терпение есть. Вот лично я не стал поклонником 3D-игр, потому использую компьютеры умеренной мощности, но в то же время не привык ждать и распивать чаи, пока игра изволит загрузиться. Для меня три секунды - это уже довольно много. А когда M$V$ уже намного после загрузки тратит секунды на какие-то странные операции, не давая просто файл открыть, появляется желание выкинуть её.
                            По сравнению с текстовым редактором, который за то же время успевает открыться, открыть пачку открытых в прошлой сессии файлов, подсветить весь синтаксис и отзывчиво ждать пользовательского ввода, это ад.
                            Текстовый редактор делает практически всё то же самое, только позволяет экономить время пользователя, ресурсы ПК. И вентилятором не шумит.
                            Ответить
                            • Разумеется, IDE нужен более мощный CPU и больше памяти чем Notepad++.

                              >>Текстовый редактор делает практически всё то же самое
                              Ну это же не правда. VS с R# делают
                              1) код комплишен
                              2) рефакторинги
                              3) инспекции (это правда помогает отлавливать оишбки, особенно в сях)
                              4) реформат кода и удаление ненужных импортов
                              5) нафигацию (контрол клик на имени)
                              6) подсветку упавших в CI тестов
                              Да много чего


                              зы: Но я знаю что есть люди, которые не юзают Intellij, VS и Eclipse ровно потому что он грузится у них три минуты.

                              Ксатти, у VS есть VS Code: этопросто редактор
                              Ответить
                              • > Да много чего
                                Такое ощущение, что делают они всё это одновременно для всех файлов на моём ПК, и ещё в интернеты лезут докачивать исходники, с которыми тоже надо поработать.
                                Как с бесплатной медициной и т.п.: ты этим можешь не пользоваться, но налоги платить будешь. Ты не жмёшь "рефакторинг" или "реформат", а IDE всё равно внутри что-то считает и греет процессор в надежде выдать закэшированный результат за 0.01мс, когда ты наконец нажмёшь на кнопку. IDE умудряется тормозить даже в тех местах, где просто невозможно тормозить.

                                > Ну это же не правда
                                Правда. По крайней мере, notepad++ делает быстрее IDE то, что делает notepad++.
                                Ответить
                                • Ну тут уж тебе решать: готов ты платить ресурсами за реформат, или не готов.
                                  К счастью, у тебя есть выбор.:)
                                  Ответить
                                  • Я бы предпочёл просто отключение некоторых возможностей, может быть даже их отсутствие на жёстком диске.
                                    Смотришь на размер студии с отключёнными в установщике галочками и осознаёшь, что будущее наступило. Копируешь Eclipse, а там тысячи каких-то файлов медленно плетутся из папки в папку.
                                    Оставить бы, скажем, 100МБ на диске, менюшку из меньшего количества пунктов, панельку только одну и фичи только те, которые нужны.

                                    А то предлагают либо велосипед купить, либо самосвал.
                                    Ответить
                                    • Попробуй Qt Creator.
                                      Ответить
                                      • >>1024--
                                        >>Попробуй Qt Creator.
                                        для JavaScript/
                                        Ответить
                                        • > для JavaScript/
                                          QML - тот же экмаскрипт. Так что как минимум подсветка там есть. Х.з. как с отладкой, автодополнением и рефакторингом, я особо с QML не работал.
                                          Ответить
                        • только семь раз писать руками одно и тоже, только хардкор!!
                          Ответить
                          • В современных редакторах это все автоматизированно. https://i.github-camo.com/c6b86d97d1f83b748a51af958dd84ed8804e1808/68747470733a2f2f73332e616d617a6f6e617773 2e636f6d2f662e636c2e6c792f6974656d732f32 583339334d31753147304b305a3036314f30302f 6d756c74692d637572736f722e676966
                            Ответить
                            • хм) то-есть ты не против редакторов, но против именно IDE?
                              Emacs это редактор или IDE?
                              Ответить
                              • Я против именно иде с кучей кнопок и пердящими попапами. Все эти генераторы каркасов класов и рефакторинги - это какой-то маразм. Если бы я использовал автокомплит, рабочий код на бумажке я бы на собеседованиях писать не смог.

                                > Emacs
                                Не видел, не знаю. Когда я говорю об иде, я имею в виду программы типа вижуалстудии или эклипса или кутэкреатора.
                                Ответить
                                • Понятно. Значит, тебе не приходилось переименовывать метод в проекте, где 30 человек за 15 лет нахучили 20 тысяч классов

                                  Хотя сам факт наличия таких проектов весьма не однозначен, да
                                  Ответить
                                  • Пожалуй я бы постарался лишний раз не трогать такой проект. Даже через презерватив иде.
                                    Ответить
                                    • Ну вот однако такие проекты реально сущестувуют.

                                      Может быть IDE это как дезодорант, который заглушает запах проекта (Фаулер так говорил про комменты)
                                      Ответить
                              • > Emacs это редактор или IDE?

                                Emacs — это интерпретатор elisp, ориентированный на работу с текстом. Может быть чем угодно.
                                Ответить
                                • К слову, Emacs — это офигенная IDE для разработки плагинов для Emacs.
                                  Ответить
                                • Я в курси, я видал как товарищ из него читал почту.
                                  Ответить
                            • Что-то ссылка побилась. Попробую вот так:
                              https://i.github-camo.com/c6b86d97d1f83b748a51af958dd84ed8804e1808/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f662e636c2e6c792f6974656d732f32583339334d31753147304b305a3036314f30302f6d756c74692d637572736f722e676966
                              Ответить
                              • самый бесполезный функционал на свете (после принудительного вывода названий аргументов)
                                Ответить
                                • Схуяли это он бесполезный? Я постоянно пользуюсь.

                                  > принудительного вывода названий аргументов

                                  Не знаю, что это.
                                  Ответить
                                • >>вывода названий
                                  вот так чтоль?
                                  https://d3nmt5vlzunoa1.cloudfront.net/idea/files/2016/09/Screen-Shot-2016-09-27-at-10.29.15.png
                                  Ответить
                      • IDE регулярно ходит на гитхаб, проверяя изменения в переписываемой библиотеке и громко пищит, когда в *.c добавили что-то новое?
                        Ответить
                        • IDE смотрит чтобы у тебя локально .c (а так же .m и .cpp) файлы имели те же дефиниции, что и декларации в .h файлах
                          Ответить
                          • Фича полезная. Но если возвращаться к TypeScript, маловероятно, что такое поможет с переписыванием библиотеки на другой язык.
                            Ответить

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