Ruby
- Русское название:
- Руби
- Дата создания:
- 1995
- Создан под влиянием:
- Повлиял на:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .rb
- Реализации и версии (свернуть все | развернуть все):
Ruby — интерпретируемый объектно-ориентированный язык программирования, созданный в 1995 году Юкихиро Мацумото по прозвищу Мац. Автор ставил себе целью создать истинно объектно-ориентированный язык, что у него и получилось.
Ruby имеет строгую динамическую типизацию. Особенностью языка является то, что в нем можно изменить любой класс в любое время. Как и во многих современных языках, в Ruby все данные является объектом (даже классы являются объектом класса Class
), а все функции — методами.
Элементы синтаксиса:
Комментарий до конца строки | # |
---|---|
Регистрозависимость | да |
Регулярное выражение идентификатора переменной | [_a-z][_a-zA-Z0-9]* |
Регулярное выражение идентификатора функции | [_a-zA-Z][_a-zA-Z0-9]*[!?]? |
Присваивание значения переменной | = |
Объявление переменной с присваиванием значения | variable = value |
Группировка выражений | ( ... ) |
Блок | begin ... end |
Тождественное равенство | == |
Тождественное неравенство | != |
Сравнение | < > <= >= <=> |
Определение функции | def f(p1, p2, ...) ... end |
Вызов функции | f(a, b, ...) или f[a, b, ... ] или f.call(a, b, ... ) |
Вызов функции без параметров | f или f[] или f.call |
Последовательность | ; или конец строки |
Если - то | if condition then ... end или ... if condition или condition and ... |
Если - то - иначе | if condition then ... else ... end или condition ? ... : ... |
Бесконечный цикл | loop |
Цикл с предусловием | while (condition) ... |
Цикл с постусловием | begin ... end until condition |
Цикл for - next для диапазона целых чисел с инкрементом на 1 | 1.upto(10) {|i| ... } или (1..10).each {|i| ... } или (1..10).step(1) {|i| ... } |
Цикл for - next для диапазона целых чисел с декрементом на 1 | 10.downto(1) {|i| ... } |
Логотип Ruby (взято с официального сайта)
Ссылки:
Примеры:
Факториал:
Пример для версий Ruby 1.8.5, Ruby 1.9.0, Ruby 1.9.2Используется рекурсивное определение факториала.
#! /usr/bin/env ruby
def factorial(n)
if n == 0
1
else
n * factorial(n - 1)
end
end
0.upto(16) do |n|
print(n, "! = ", factorial(n), "\n")
end
Hello, World!:
Пример для версий Ruby 1.8.5, Ruby 1.9.0, Ruby 1.9.2puts "Hello, World!"
Факториал:
Пример для версий Ruby 1.8.5, Ruby 1.9.0, Ruby 1.9.2Факториал вычисляется как произведение набора чисел от 1 до n, дополненного еще одной 1 на случай 0!.
def fact(n)
(1..n).inject(1) {|a,b| a*b}
end
(0..16).each {|x| puts "#{x}! = #{fact(x)}"}
Числа Фибоначчи:
Пример для версий Ruby 1.8.5, Ruby 1.9.0, Ruby 1.9.2Используется рекурсивное определение чисел Фибоначчи.
def fibonacci(n)
if n < 3
1
else
fibonacci(n - 1) + fibonacci(n - 2)
end
end
(1..16).each {|n| puts "#{fibonacci(n)}, "}
puts "..."
Квадратное уравнение:
Пример для версий Ruby 1.9.2puts 'A = '
A = gets.chomp.to_f
if (A == 0)
puts 'Not a quadratic equation.'
return
end
puts 'B = '
B = gets.chomp.to_f
puts 'C = '
C = gets.chomp.to_f
D = B*B - 4*A*C
if (D == 0)
puts 'x = '+(-B/2/A).to_s
else
if (D > 0)
puts 'x1 = '+((-B-Math.sqrt(D))/2/A).to_s
puts 'x2 = '+((-B+Math.sqrt(D))/2/A).to_s
else
puts 'x1 = ('+(-B/2/A).to_s+','+(Math.sqrt(-D)/2/A).to_s+')'
puts 'x2 = ('+(-B/2/A).to_s+','+(-Math.sqrt(-D)/2/A).to_s+')'
end
end
CamelCase:
Пример для версий Ruby 1.9.2Функция gets.chomp
читает строку из стандартного потока ввода. Функция split
с аргументом-регулярным выражением разбивает строку на части, разделенные подстроками, которые соответствуют этому выражению. Затем к каждой части применяется функция capitalize
, которая переводит всю строку в нижний регистр, а первый символ — в верхний. Наконец, части строки объединяются в одну строку.
puts gets.chomp.split( /[^a-zA-Z]+/ ).map {|w| w.capitalize}.join
CamelCase:
Пример для версий Ruby 1.9.2Пример работает точно так же, как этот пример, но функция scan
извлекает из строки части, которые соответствуют регулярному выражению, а не отбрасывает их, как это делает split
.
puts gets.chomp.scan( /[a-zA-Z]+/ ).map {|w| w.capitalize}.join
Комментарии
]]>blog comments powered by Disqus
]]>