понедельник, 27 августа 2007 г.

Ruby: первая кровь

Сегодня написал и запустил первый хеллоу ворлд на Руби. Этот первый скриптовый язык, который я решил изучить и возможно использовать в полной мере. Поэтому решил вести небольшой краткий конспект с целью немного упростить процесс обучения.

Ruby - воистину ОО язык. Здесь всё есть объекты. Данные любого типа, это объекты. Поэтому для любого объекта, например строки, можно вызвать методы: "text".methods, так как "text" - это объект класса string. И это еще не все, можно поити дальше и просмотреть список всех методов класса, соответствующих шаблону:

Сфера применения. Ссылаясь на авторов книги Programming Ruby: The Pragmatic Programmer's Guide, могу сказать, что этот это довольно универсальный язык:

Although we have used Ruby for scripting jobs, most of the time we use it as a general-purpose programming language. We've used it to write GUI applications and middle-tier server processes, and we're using it to format large parts of this book. Others have used it for managing server machines and databases. Ruby is serving Web pages, interfacing to databases and generating dynamic content. People are writing artificial intelligence and machine learning programs in Ruby, and at least one person is using it to investigate natural evolution. Ruby's finding a home as a vehicle for exploratory mathematics. And people all over the world are using it as a way of gluing together all their different applications. It truly is a great language for producing solutions in a wide variety of problem domains.


Динамическая типизация переменных. В отличие от строго типизированного С++ не надо указывать тип переменной при объявлении, вполне достаточно имени. Переменная связывается с типом во время присваивания:

Но это свойственно большинству скритовых языков и поэтому не удивительно, что есть и в Руби.

Правила именования переменных. Названия переменных могут состоять из латинских букв, цифр и подчеркивания, но при этом начинаться только со строчной буквы или знака подчеркивания:

Глобальные переменные обозначаются с префиксом $. Использование русских букв в именах переменных допустимо, если весь текст программы написан в одной кодировке utf-8, а интерпретатор запускается с параметром -KU. IMHO использование переменных на русском с англоязычными командами делает программу менее читабельной. Да и вообще, код на русском языке (например, объектно ориентированный язык в 1С) меня почему то настораживает :)

Переменные - только ссылки на объекты. Это пока самое интересное, что я увидел в Руби:

Это возможно, благодаря тому, что в Руби, переменные ссылаются на объект, поэтому один и тот же объект можно менять, используя разные ссылки на него. После С++ мне это кажется потенциальным источником ошибок, по крайне мере в первое время :) Хотя с другой стороны, присвоение строк не увеличивает размер используемой памяти... Ещё захотелось проверить, не хранятся ли одинаковые строки по одному и тому же адресу:

Другого и не ожидалось, но было интересно проверить...
Для того, что бы избежать такого изменения можно использовать метод clone:

Ассоциативные массивы. Что интересно, Руби поддерживает ассоциативные массивы - массив пар: ключ - значение.

Массивы. Руби предоставляет гибкий механизм работы с массивами посредством класса Array. Этот класс может использоваться в качестве стека (.push, .pop) и списка. На длину массива не накладывается ограничений как и на типы данных, хранящиеся в одном массиве. Размер массива меняется динамически. И что самое интересное, массивы предоставляют итераторы на все случаи жизни. Ещё одна особенность массивов в Руби - отрицательная индексация. array[-n] - получить n-ный элемент от конца массива. При выходе за предел массива возвращается nil.

Это пока все. Далi буде...

Комментариев нет: