JavaScript и Java
В "КВ"-27/1998 мы обсуждали проблему построения вашей собственной домашней странички. Если, не убоявшись трудностей, вы все же занялись этим нелегким делом, то начали либо с изучения HTML, либо с непосредственной разработки странички в каком-нибудь FrontPage. При этом вы наверняка заметили, что HTML не предполагает никакой динамики, документ задается тегами раз и навсегда, а сайт в целом больше всего напоминает книжку с картинками. Между тем, бывая в Сети, вы могли видеть, что многие страницы имеют в своем составе различные подвижные элементы - анимированные картинки, бегущие строки и даже довольно сложные "устройства" типа калькуляторов или проигрывателей CD.
Как же это все делается? Можете проштудировать все ваши пособия по HTML, но не найдете и намека на подобные элементы, поскольку стандарт HTML действительно не предусматривает никакой модификации страниц после их загрузки браузером. Зато он предусматривает встраивание в странички программ на двух специфических языках программирования, и вот они-то и могут оживить ваши статичные документы.
Прежде чем повести разговор об этих языках, следует сделать одно существенное замечание. На самом деле существуют и другие способы создания динамических изображений на страницах. Это, в первую очередь, использование анимированных .GIF файлов, которые можно встраивать в страничку так же, как обычные картинки. Создаются подобные изображения, например, популярным shareware редактором AniMagic. Кроме того, можно встраивать в страницу различные объекты (видео- и аудио-файлы, например), которые браузер сможет отобразить при помощи соответствующих plug-ins (по-русски их, видимо, следует называть модулями расширения). Использование таких объектов весьма ограничено, поскольку, во-первых, не у всех пользователей есть необходимые модули расширения, а, во-вторых, в любом случае вы не сможете организовать с их помощью хоть какой-нибудь диалог.
В этом случае вам может помочь только полноценная программа, написанная на JavaScript или Java. Эти два популярных языка и будут предметом нашего обсуждения.
Названия языков могут навести на мысль о том, что они, видимо, очень похожи. Или даже что первый является какой-то версией последнего. На самом деле почти ничего общего в этих двух языках нет.
Более-менее общим моментом является похожий синтаксис (заимствованный из C). Однако уже и тут начинают проглядывать различия - в Java, например, обязательно ставить точку с запятой после каждого оператора, а в JavaScript - нет. Таким образом, переходим к обсуждению специфики каждого языка.
JavaScript относится к новому, но уже достаточно большому семейству, называемому по-английски Script Languages, что по-русски звучит примерно как "Языки создания сценариев". Главной чертой этого семейства является то, что программы на этих языках, как правило, не управляют компьютером непосредственно, а лишь описывают действия некого внешнего исполнителя. Именно он, в конечном итоге, отвечает за то, какие действия произойдут при исполнении программы. Языки сценариев принципиально не могут прямо обращаться ни к каким ресурсам. Это увеличивает как переносимость программ на таких языках, так и безопасность их для конечного пользователя. Другой важной особенностью и отличием от универсальных языков является полная автоматизация управления памятью. Java же к языкам скриптов не относится, по сути он ближе всего к C++.
JavaScript - язык полностью интерпретационный. Программа на нем вписывается непосредственно в текст HTML-документа и исполняется браузером. Для написания программ на JavaScript не нужно какое-либо специальное лингвистическое обеспечение - просто вписываете ее при помощи Notepad в текст документа и все. Можно загружать Netscape и смотреть, как все это дело исполняется.
Программа на Java должна быть предварительно скомпилирована в код Java-машины. Лишь после этого она годна для исполнения браузером. Бесплатный компилятор (а точнее - пакет разработчика Java Development Kit - JDK) можно найти на сайте www.java.sun.com. Зато, в отличие от JavaScript, Java является языком универсальным, пригодным для написания любых программ, а не только небольших интегрированных в странички фрагментов кода. JavaScript существует только в рамках страницы (речь идет, конечно, о приложениях-клиентах).
По-разному выглядят на странице исполняющаяся программа на JavaScript и на Java. Для программы на JavaScript областью вывода является весь HTML-документ. Только при помощи программы на JavaScript можно модифицировать вид уже загруженного документа. И даже тут мы встретимся с многочисленными ограничениями - изменять можно только изображения, надписи на элементах форм, строку статуса, значения гиперссылок и некоторые другие параметры. Графическое изображение программа на JavaScript может только подгружать и показывать, но не формировать его сама.
При этом используется событийная модель. Каждый объект, находящийся на страничке (как и сам документ) одновременно является объектом программы JavaScript. Объекты в зависимости от действий пользователя генерируют различные события. Например, почти любой объект при щелчке мыши на нем генерирует событие onClick. Задавая обработчики событий, можно так или иначе влиять на вид документа. Классический пример - при нахождении курсора над картинкой или гиперссылкой генерируется событие onMouseOver, а когда мышь покидает объект - событие onMouseOut. В обработчиках событий меняют изображение, связанное с данным объектом, создавая анимацию при перемещении курсора над ним.
Программа на Java (кстати, будучи встроены в HTML-документ, она называется апплетом) выполняется на страничке в отдельной ограниченной области, как бы окошке (которое, впрочем, визуально от окружающего документа никак не отделяется). В нем она может вытворять все что угодно - рисовать, писать и т.п. Однако она почти не оказывает влияния на окружающий документ.
Программы на Java и JavaScript могут использоваться в качестве обработчиков для форм.
Существеннейшее влияние на программирование оказывает то, что Java - язык очень сильно типизированный, а JavaScript - очень слабо. В частности, в JavaScript одна и та же переменная в зависимости от выражения может быть числом или же строкой, отображающей это число в десятичном представлении.
Java использует классическую объектную модель на основе классов. JavaScript использует довольно странную модель на основе прототипов. В рамках нее можно, например, выбирать, какие методы и поля наследовать потомку у предка. Впрочем, именно такая модель лучше всего отвечает принципу слабой типизации.
В заключение вкратце о пособиях. Обширное пособие по JavaScript можно найти в разделе "Интернет" популярного сервера www.citforum.ru. Неплохое англоязычное пособие для новичков есть на www.developer.netscape.com. Роскошное пособие по Java находится на www.java.sun.com. К сожалению, на английском.
Денис МАРГОЛИН
Горячие темы