]]> ]]>
Править | Обсудить | История

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 (взято с официального сайта)

Примеры:

Факториал:

Пример для версий 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.2
puts "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.2
puts '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

]]>

Работа программистам