|
Явное задание типа. ХЕЕЕЕЛЛЛППП !!!!!
Здравствуйте уважаемые коллеги. Только-только начал изучать javascript. Задача - написать клиента для работы с некоторой довольно специфической базой данных. Если кому интересно, приблудина должна представлять собой что-то похожее на Total Commander, но с кучей особых фич. Итог месяца работы - около 1000 строк отлаженного кода с базовым функционалом. Да, конечно до того я ничего не знал ни о javascript, ни о html ни о css. К тому же пришлось изучать python, на котором я писал сервер, и курить доки по mongodb. Тем не менее на QT или ActionScript3, я написал бы подобный код за 2-3 дня.
Это вообще первый в моей жизни код, написанный на яваскрипте. Что могу сказать по итогу. Много я в жизни повидал всякоразного говна. Но ничего говеннее яваскрипта не видал. Даже ассемблер удобнее. В любом нормальном макроассемблере можно определить структуру. И компилятор будет следить за обращениями к ее полям. А если есть нормальная среда, она еще сделает и автокомплит. Здесь же абсолютная свобода ведет к абсолютной анархии. Я юзаю PyCharm от JetBrains. Среда просто гениальная. По тому, как она показывает код, я вижу, что юзаются какие-то частотные и вероятностные методы анализа в попытке определить тип переменной. Но все равно автокомплит толком не работает ! Вобщем по опыту этого проекта я понял, что 100% динамическая типизация есть 100%, т.е. АБСОЛЮТНОЕ ЗЛО, делающее язык непригодным для написания чего-либо серьезного. Раньше я иногда спорил, отстаивая эту точку зрения чисто теоретически, ибо никогда ранее на подобных языках не писал. Но сейчас на 100% в этом убедился. Итого, не хочу разводить тут флейма и холивара, хочу задать вопрос. Уважаемые коллеги, существует ли для javascript какая-нибудь приблудина со следующими свойствами ? 1) Позволяет ЯВНО (!!!) указывать типы объектов. Например так, как это сделано в ActionScript3 - var <имя>:<тип> 2) Является расширением javascript, а не новым языком типа Haxe, прозрачно преобразующей текст в обычный javascript, просто удаляя объявления типов. 3) Интегрирована в какую-то IDE, позволяя нормально работать автокомплиту. P.S. Народ, если кто знает, тот же вопрос и для python. Тоже такой же говноязык для "программистов", вычисляющих корни квадратного уравнения. Это пожалуй даже более для меня важно, ибо основная тяжесть проекта будет на сервере. С яваскриптом просто сейчас на первом этапе пришлось очень плотно работать. Дальше будет в основном python. |
Ругаетесь на javascript хотя толком его не знаете, да ещё и на форуме по javascript. И при всем этом хотите, чтобы вам помогли. Жесть :blink:
|
Я все-таки задаю вопрос о тулзе. Ругаюсь просто чтобы было понятно, для чего она мне нужна. Можете что-то ответить по существу ?
|
Используйте флеш, или typescript. Хотя лучше напишите свой транслятор, который будет использовать все нужные фичи. И конечно ide для него
|
zebra, всегда так делаю.
|
eugenk, используйте JSDoc и получайте автокомплит. Не знаю, как во всех продуктах JetBrains, но в IntelliJ IDEA поддерживается по-умолчанию.
|
Цитата:
|
Цитата:
Еще раз прошу прощения, но доки это немного не то. Пример. У меня есть массив panels, в котором я храню объекты типа Panel, в которых в свою очередь хранится описание физических свойств панелей моего менеджера базы данных. Например высота и ширина панели, число строк текста и т.п. Т.е. объект типа Panel является строго определенным. Он содержит четко определенные поля и ничего более. А глобальная переменная panels хранит только объекты типа Panel и ничего более. В программе я пишу: var panel=panels[pan]; panel.width=200; Никаие доки не помогут определить среде, что panel это объект типа Panel, который содержит поле width, но не содержит поля widht. Если бы тип Panel был известен, во-первых как только я написал бы panel. сразу появился бы автокомплит, который подсказал бы поле width. Во-вторых, если я все-таки напишу panel.widht, в нормальном языке компилятор бы выругался на несуществующее поле. В javascript panel.widht=200 будет понято как желание ввести в объект panel новое поле widht и присвоить ему значение 200. Поле width при этом разумеется не изменится и программа нормально запустится. После чего придется очень долго выяснять в отладчике, почему ширина панели не меняется. Я говорю исключительно об этих проблемах. Документирование на JSDoc тут не спасет. |
Цитата:
|
Zebra, огромный респект за наводку на typescript ! Сейчас поставил, правда для этого PyCharm обновлять пришлось, и не могу нарадоваться ! Это почти что ActionScript3 ! Вот что значит спросить совета у знающих людей ! Ну и тогда еще вопрос. Вы не подскажете, нет ли столь же полезной тулзы для python ? Он увы тоже страдает теми же проблемами, что javascript. Только с питоном, если что-то такое есть, нужно на версию 2.7. Третьей я не могу пользоваться ибо под ним на сервере надо nltk поднимать, а он только под двойку. Вобщем был бы дико благодарен, если бы знатоки подсказали и для питона решение. Сам я что-то ничего не смог в сети разыскать.
|
Часовой пояс GMT +3, время: 05:10. |
|