15.05.2013, 00:31
|
Кандидат Javascript-наук
|
|
Регистрация: 12.04.2013
Сообщений: 132
|
|
не понимаешь ты все прелести динамической типизации. в чем проблемы то в кривых руках?
|
|
15.05.2013, 00:55
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
В чем прелесть-то ??? В том что баги, которые обычно автоматом ловит компилятор, все до единого твои ? В том что автокомплит толком не работает даже у таких китов как JetBrains ? Я не спорю, могут быть случаи, когда динамическая типизация полезна. Да в том же моем проекте с сервера приходит объект в формате json, я делаю из него javascript-объект и работаю с ним. Но во-первых код, обрабатывающий связь с сервером у меня процентов 5 по объему. Во-вторых получаемый javascript-объект все равно приходится парсить, ибо что в нем пришло изначально неизвестно. А приходить могут вещи очень нетривиальные, я например на json описываю формы для ввода данных. Получается что язык не имеющий статической типизации ради 5% кода гробит остальные 95. Да и с этими 5% не решает задачу полностью. Ручками работать всё равно приходится. Так в чём смысл ???
Идеален в этом отношении по-моему ActionScript3 в strict-моде. Нужны тебе динамические объекты - объявляй явным образом и пользуйся. Всё остальное статически типизировано.
По-моему изначально 100% динамические языки создавались для непрограммистов. Им и правда незачем заморачиваться какой где тип. Тот же javascript изначально предназначался чтобы пару алертов в браузере выкинуть и пару элементов подвигать. Задачи писать на нем что-то серьезное не было. А для этого типы действительно излишни и скорее вредны. Однако когда код достигает хотя бы нескольких сотен строк, положение резко меняется.
|
|
15.05.2013, 01:04
|
Кандидат Javascript-наук
|
|
Регистрация: 12.04.2013
Сообщений: 132
|
|
какой-то долбоеб мне ставит минусы и пишет уи. как вычислить пидараса?
|
|
15.05.2013, 01:43
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Сообщение от eugenk
|
Прошу прощения, можно поподробнее, что это такое ??? Я новичок, просьба не пинать если чего-то не знаю
Еще раз прошу прощения, но доки это немного не то. Пример.
У меня есть массив 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 тут не спасет.
|
Чтобы выловить такие ошибки, можно использовать Object.seal на всех объектах этого типа сразу после добавления всех необходимых свойств (и включить строгий режим, чтобы выскакивала ошибка при неправильных действиях). Или более мягкий вариант - Object.preventExtensions.
Последний раз редактировалось oneguy, 15.05.2013 в 01:47.
|
|
15.05.2013, 01:57
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Да нет, приложение самое обычное. Есть база данных. Объекты в ней имеют иерархическую структуру. Например территории, которые сами включают территории. Логически все очень похоже на организацию файловой системы. Поэтому и приложение очень похоже на обычный двухпанельный файловый менеджер (Тотал командер, как наиболее известный, или фар, или mc...) Какие там особые задачи ? Двигать панельки, заполнять их текстом, обрабатывать F1...F12 с соответствующими действиями. Вобщем стандартно. Ну и типы соответствующие. Панелька, менюшка, окошко...Всё очень стандартно. Но как это написать на javascript не поломав при этом мозги - у меня не укладывается в голове. Точнее написать-то конечно написал, но количество мозгофакства и геморроя не идет ни в какое сравнение с таким же проектом на С++ или флеше.
По поводу флеша - увы. Заказчик потребовал именно на javascript ибо приложение предполагалось запускать еще и на айпадах. Если бы я знал во что это выльется, я бы лучше для айпада нативную версию на obj-с написал. Было бы точно быстрее. Вобщем сейчас поставил typescript, буду его копать. Наверняка дело пойдет веселее.
|
|
15.05.2013, 02:00
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Object.seal ??? Не слыхал никогда о таком звере ! Спасибо, буду смотреть.
|
|
15.05.2013, 02:12
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Сообщение от eugenk
|
Object.seal ??? Не слыхал никогда о таком звере ! Спасибо, буду смотреть.
|
Правда, он не работает в старых браузерах, в том числе IE<9.
|
|
06.07.2013, 14:22
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Приветствую ещё раз, многоуважаемый all, всё теми же словами - "Сами мы не местные"
Короче господа. Проект мой разросся примерно до 5К строк. Сдал я его, получил денюшку и на том успокоился. Но вчера написал заказчик и попросил добавить довольно сложную фичу - возможность создавать в базе данных произвольные типы и произвольные связи между типами. Выльется это на клиенте в редактор произвольных форм, причем с довольно специальными свойствами. Но не в том беда, написать напишу. Беда в том, что глянул я на свой код и просто опустились руки. Стало ясным, что зря я с самого начала поленился, не послушался местных гуру и не перевел проект на typescript, пока там была 1000 строк. Теперь стало совершенно очевидным, что на javascript писать дальше нельзя. В связи с этим вопрос многоопытным гуру. Господа-таварисчи ! Никто не сталкивался с переносом существующих больших (несколько тысяч строк) проектов с javascript на typescript ? Если да, опишите примерно, в общих словах, как это делается ? И еще, посоветуйте, что бы такое по typescript почитать, желательно (но не обязательно) на русском ? А то что-то никаких достойных руководств я по нему не нашел. Так, чтобы начать, оно достаточно. Но всерьез работать - нет.
P.S. Народ, тот же вопрос для питона. Подскажите, ежели кто на нём что-то серьезное писал. Есть ли для python некая приблудина, типа typescript ? Причем строго для версии 2.7.x ? Я слыхал что вроде для 3.Х доступна такая хрень как аннотации, фактически хоть фейковые, но типы. Но мне на нём в будущем придётся nlpack поднимать. А он увы пока только для 2.Х.
Последний раз редактировалось eugenk, 06.07.2013 в 16:13.
|
|
06.07.2013, 14:57
|
|
Аспирант
|
|
Регистрация: 06.10.2012
Сообщений: 60
|
|
проще распробовать прелесть динамической типизации,
вы просто не умеете её готовить
|
|
06.07.2013, 15:42
|
Аспирант
|
|
Регистрация: 14.05.2013
Сообщений: 47
|
|
Сообщение от pikko
|
проще распробовать прелесть динамической типизации,
вы просто не умеете её готовить
|
Да нет. Не знаю каких объемов были Ваши проекты, но сам я серьезно программирую где-то с середины 80-х. А свою первую прогу на фортране вырезал бритвой на перфокартах в 1978-м И весь мой опыт говорит, что языки, не допускающие статической типизации, это АБСОЛЮТНОЕ ЗЛО. Правда усиленно прикидывающееся добром, при объемах кода не более сотни-двух строк
|
|
|
|