Ruby, язык программирования. RuPy.ru, Омск 2007.Ruby, язык программирования. RuPy.ru, Омск 2007.

Презентация:



Advertisements
Похожие презентации
Язык Ruby Денис С. Мигинский. Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип.
Advertisements

Занятие 4 def simple_iterator yield 2 # передача управления в блок итератора yield 7 yield 1 end simple_iterator {|i| puts i } 15. Итераторы изнутри.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Занятие Регулярные выражения Памятка (основные элементы регулярных выражений): a+ – любая последовательность a a* – любая последовательность a или.
Язык Ruby Денис С. Мигинский. Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип.
Объектная модель Ruby Денис С. Мигинский. Основные характеристики объектной модели Обязательные: Поддержка классов Поддержка описания поведения класса.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Выполнили: Фаттахов Ленар, Горюнов Семен.. Задача Мы довели нашу программу до полноценного функционирования. Заказчик захотел заняться рассылкой рекламы.
ПЛИСКО ВЯЧЕСЛАВ. Удобная работа с базой данных в PHP.
Язык Python Универсальный язык программирования Интерпретируемый язык.
Ruby On Rails: Web- разработка по-другому! Несколько простых причин перейти на Ruby (and) Rails. Проблематика web-разработки. Разработка web-проектов всех.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Процедуры и функции. Разработал учитель информатики МБОУ СОШ 50 г. Краснодара Ракута Елизавета Григорьевна « Учиться и, когда придет время, прикладывать.
Быстрая разработка Web приложений на Ruby on Rails Быстрая разработка WEB приложений с использованием Ruby on Rails.
Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Транксрипт:

Ruby, язык программирования. RuPy.ru, Омск 2007.

Ruby – объектно-ориентируемый динамический интерпретируемый язык программирования высокого уровня. Ruby – мощный, практичный и элегантный язык. Ruby создан в 1995 году Юкихиро Матцумото (Япония) под влиянием Smalltalk, Eiffell и Perl.

1. Вкратце о языке.

Основной синтаксис. class SpaceMan < Dreamer attr_reader :name attr_accessor :rocket def = name end def end

Основной синтаксис. class SpaceMan < Dreamer attr_reader :name attr_accessor :rocket def = name end def end Классы. Объявление и наследование. class – ключевое слово для объявление класса. Символ < используется для наследования. Объявление в класса заканчивается ключевым словом end, как любой другой блок кода. Множественное наследование запрещено. Доступ к родительскому классу осуществляется с помощью ключевого слова super.

Основной синтаксис. class SpaceMan < Dreamer attr_reader :name attr_accessor :rocket def = name end def end Конструктор, методы и члены класса. Объявление метода в классе начинается с ключевого слова def, затем следует имя метода, и параметры. Метод-конструктор класса должен называться initialize. Любая переменная, имя которой начинающется с одного - член класса. С двух - статический член класса.

Основной синтаксис. class SpaceMan < Dreamer attr_reader :name attr_accessor :rocket def = name end def end Вызов метода. Метод вызывается, как и в большинстве языков, через точку, скобки с перечислением параметров после вызова можно опустить, если это не вызывает недоразумений.

Основной синтаксис. class SpaceMan < Dreamer attr_reader :name attr_accessor :rocket def = name end def end Ruby-символы. Идентификатор, и символ двоеточия в начале – это специальный объект в ruby, ruby-символ. В большинстве случаев можно считать, что это ссылка на строку. Точнее, что-то, что представляет строку или имя. Два ruby-символа с одинаковым именем – это один и тот же объект.

Основной синтаксис. class SpaceMan < Dreamer attr_reader :name attr_accessor :rocket def = name end def end Весь код в объявлении класса начинает выполнятся как только интерпретатор видит его. attr_reader и attr_accessor – вызов метода класса Module, добавляющего в класс методы для чтения и доступа к членам соответственно.

class Array def from_place(place) self.select do |s| s.where_i_am == place end flyers

class Array def from_place(place) self.select do |s| s.where_i_am == place end flyers

class Array def from_place(place) self.select do |s| s.where_i_am == place end flyers

class Rocket def travel_to(place) planet = fly_to place yield planet if block_given? fly_back end mike = SpaceMan.new(mike) mike.rocket = Rocket.new mike.rocket.travel_to(:mars).do |planet| mike.conquer! planet end Основной синтаксис. Код, написаный внутри блока, выполняется внутри метода, принимающего его. Этот метод рассматривает блок, как функцию, в которую можно передать какие-то параметры. Вызов блока и передача параметров происходит с помощью ключевого слова yield.

2. Ruby и Python.

Ruby и Python очень похожи. И Ruby и Python – это объектно-ориентированные высокоуровневые динамические языки программирования. Оба позволяют использовать метапрограммирование и, частично, функциональный стиль программирования. Пожалуй, можно найти лишь несколько существенных отличий.

Синтаксис. Основным синтаксическим отличием Ruby до Python 2.5 были блоки, как способ использования сопрограмм. Нововведения в Python 2.5 (измененный yield, with) позволяют писать код, который будет предоставлять те же возможности, что и ruby- блоки.

Использование и производительность Python позиционируется как язык общего назначения, в то время как для ruby пока что больше подходит роль языка для обработки строк и обёртки над C-библиотеками. В первую очередь на это влияет скорость интерпретатора. Программы на Python работают значительно быстрее, чем программы на ruby.

3. Некоторые скучные повседневные задачи с ruby.

Базы данных, ORM. ActiveRecord.

Задача: реализовать классы – обертки таблиц в базе данных, модели пользователей системы блогов. Описываемые таблицы:

recuire rubygems recuire activerecord class User < ActiveRecord::Base has_many :entries end class Entry < ActiveRecord::Base has_many :comments belongs_to :user end class Comment < ActiveRecord::Base belongs_to :entry belongs_to :user acts_as_tree end ActiveRecord. ActiveRecord – библиотека, позволяющая связать таблицу в базе данных и класс в ruby. Объект класса – наследника ActiveRecord::Base – имеет эксплицитно все методы для доступа к полям в таблице. has_many и belongs_to – отношения между таблицами в реляционной базе данных.

ActiveRecord. user = User.find_by_name(Kei Korte) user.entries.each do |entry| entry.comments each do |comment| if comment.user.name == Katy comment.destroy end End user.name = Ryan user.save Прямой доступ к таблице в базе данных объект имеет лишь в методах find, save, destroy. find_by_name – один из динамических методов для поиска в базе данных.

Генерация и парсинг XML. Builder и REXML.

Builder. recuire rubygems recuire builder xml = Builder::XmlMarkup.new xml.instruct! xml.customers do customers.each do |customer| xml.customer(id = customer) do xml.name {customer.name} xml. (customer. ) end Генерация xml –несложная задача, не зависимо от языка. В простых случаях легко можно обойтись и без внешних библиотек. Библиотека Builder позволяет просто генерировать xml-файлы, при помощи прокси- объекта, который создает очередной элемент xml исходя из названия вызываемого псевдо-метода.

Christian Newman Charlie Newman customers.xml

REXML require rexml/document include REXML xml_tree = Document.new(File.new('customers.xml')) puts N: + xml_tree.root.elements.size.to_s XPath.match(xml_tree,'//customer').each do |c| puts c.name+ #"+c.attributes['id'] c.elements.each do |element| puts "\t" + element.name+": "+element.text end Разбор xml-документов - всегда, наверное, не самая интересная задача. Здесь используется модуль REXML из стандартной библиотеки. REXML – это не единственный (и не самый производительный) метод для разбора XML в Ruby.

4. Недостатки.

Несмотря на то, что язык существует с середины 90х, общую известность он получил 2 года назад. Значимые недостатки в языке практически отсутствуют, но есть недостатки, возникшие из-за молодости языка. Хорошие глянцевые IDE, всегда переведенная на английский качественная документация, быстрый интерпретатор – всего этого нет.

Что-нибудь ещё? ruby-lang.org