14.05.2013, 13:25
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Явное задание типа. ХЕЕЕЕЛЛЛППП !!!!!
Здравствуйте уважаемые коллеги. Только-только начал изучать 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.
Последний раз редактировалось eugenk, 14.05.2013 в 14:01.
Причина: Добавил.
|
|
14.05.2013, 13:35
|
Профессор
|
|
Регистрация: 14.09.2011
Сообщений: 523
|
|
Ругаетесь на javascript хотя толком его не знаете, да ещё и на форуме по javascript. И при всем этом хотите, чтобы вам помогли. Жесть
|
|
14.05.2013, 13:37
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Я все-таки задаю вопрос о тулзе. Ругаюсь просто чтобы было понятно, для чего она мне нужна. Можете что-то ответить по существу ?
|
|
14.05.2013, 13:40
|
Профессор
|
|
Регистрация: 14.09.2011
Сообщений: 523
|
|
Используйте флеш, или typescript. Хотя лучше напишите свой транслятор, который будет использовать все нужные фичи. И конечно ide для него
|
|
14.05.2013, 13:41
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
zebra, всегда так делаю.
|
|
14.05.2013, 13:48
|
|
Аспирант
|
|
Регистрация: 23.06.2011
Сообщений: 44
|
|
eugenk, используйте JSDoc и получайте автокомплит. Не знаю, как во всех продуктах JetBrains, но в IntelliJ IDEA поддерживается по-умолчанию.
|
|
14.05.2013, 13:51
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Сообщение от zebra
|
Используйте флеш, или typescript. Хотя лучше напишите свой транслятор, который будет использовать все нужные фичи. И конечно ide для него
|
Флеш - увы... У меня по нему что называется 10-й дан, но использовать его уже нельзя из-за невнятной политики Apple, в отношении его поддержки. Сейчас единственное что остается более не менее совместимым для клиентской стороны, это javascript. Транслятор бы написал, без проблем. Он не так сложен, хотя придется вводить описания структур хотя бы в стиле чистого С. Беда в том, что его еще нужно интегрировать в среду. В тот же PyCharm, или в Eclipse, так чтобы тамошний автокомплит умел определять типы и нормально работал. А это увы, уже задача совсем другого порядка сложности. Вот и спрашиваю здесь. Может уже есть какие-то готовые подобные инструменты ? Ведь наверняка я не первый сталкиваюсь с этой проблемой. А народ на javascript пишет очень нетривиальные вещи.
Последний раз редактировалось eugenk, 14.05.2013 в 13:56.
|
|
14.05.2013, 13:58
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Сообщение от tropiko
|
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 тут не спасет.
Последний раз редактировалось eugenk, 14.05.2013 в 15:07.
Причина: Добавил
|
|
14.05.2013, 14:06
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Сообщение от zebra
|
Используйте флеш, или typescript. Хотя лучше напишите свой транслятор, который будет использовать все нужные фичи. И конечно ide для него
|
За typescript респект ! Буду смотреть что это такое. Возможно оно именно то.
|
|
15.05.2013, 00:20
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Zebra, огромный респект за наводку на typescript ! Сейчас поставил, правда для этого PyCharm обновлять пришлось, и не могу нарадоваться ! Это почти что ActionScript3 ! Вот что значит спросить совета у знающих людей ! Ну и тогда еще вопрос. Вы не подскажете, нет ли столь же полезной тулзы для python ? Он увы тоже страдает теми же проблемами, что javascript. Только с питоном, если что-то такое есть, нужно на версию 2.7. Третьей я не могу пользоваться ибо под ним на сервере надо nltk поднимать, а он только под двойку. Вобщем был бы дико благодарен, если бы знатоки подсказали и для питона решение. Сам я что-то ничего не смог в сети разыскать.
|
|
|
|