Basics
https://ru.wikibooks.org/wiki/Ruby/Базовые_типы_данных - неплохая статья
Операторы вывода
Есть оператор print, а есть оператор puts
Оличаются они тем, что puts добавляет в конец выводимого текста перенос строки, а print не добавляет.
Аргументы можно передавать и в скобках и в кавычках.
puts получив аргументы через ЗАПЯТУЮ, выполнится как несколько вызовов puts с одним аргументом, а если передать ему аргументы через ПЛЮС, то он их либо сконкатенирует, либо если это числа, сложит их.
Некоторые операции
#!/usr/bin/ruby
puts("niga".upcase() + " " + "MaZaFaKa".downcase() + " " + " bitch ".strip().upcase())
var = "niga5"
puts(var.include? var.length().to_s)
puts((-2 ** 3).abs())
Результат работы кода:
NIGA mazafaka BITCH
true
8
Комментарии указываются через решетку - #
Ввод
Функция gets позволяет получить ввод от пользователя.
puts "How your name?"
puts("Hello, " + gets.chomp() + ", you are cool man!")
А функция chomp() здесь нужна, чтобы отбросить символ перевода строки (иначе текст после ввода будет с новой строки)
Массивы
Если в массиве присвоить значение ячейке, номер которой больше чем текущая длина массива, то промежуточные ячейки заполнятся пустотой
array = Array[true, false, "Niga", 5.33]
puts(array[1], array[-1])
array[6] = 1
puts(array.reverse(), (array.include? "Niga").to_s.upcase())
Array можно не писать (сразу занчения в скобках)
Словари
Пример кода и результат его запуска:
dict = {
"ru" => "Russia",
"ua" => "Ukraine",
"us" => "Unated States",
}
puts dict
puts dict["ru"]
#--------output------#
{"ru"=>"Russia", "ua"=>"Ukraine", "us"=>"Unated States"}
Russia
Таким образом, присваивание обозначается стрелкой =>, а сам словарь находится в фигурных скобках (это хэш-таблица или key-value store)
Функции
Пример кода и результат его запуска:
def my_func(arg, arg2="bitch")
puts "Niga " + arg + " " + arg2
end
my_func("test")
my_func("test", "mazafaka")
#--------output------#
Niga test bitch
Niga test mazafaka
Конструкцию со скобками можно и не писать (при объявлении функции), тогда будет просто метод:
def NAME
puts "Niga"
end
Условия
if 0 < 1 and 2 > 3
puts true
elsif 7 == "aoeuidh".length().to_i
puts 7
else
puts false
end
#--------output------#
7
bitch
niga
Циклы
i = 0
while i < 2
i += 1
end
puts i
array = [1, 2, 3, 4]
for i in 0..array.length() - 1
end
puts i
array = [1, 2, 3, 4]
array.each do |varname|
puts varname
end
#--------output------#
2
3
1
2
3
4
Классические while и for дополняет еще один цикл. Он похож на for, в начале у него указываются перебираемые значения (в моем случае это все значения массива), также можно там указать число, тогда он возьмет диапазон от ноля, до этого числа. Далее указывается слово do и между палками пишется имя переменной в которой будет храниться текущее значение из перебираемого списка.
Файлы
File.open("test", "r") do |file|
#puts file.read() # Читает весь файл
puts file.readline() # Читает строку
#puts file.readlines() # Читает все строки
puts file.readchar() # Читает один символ
end
File.open("test", "a") do |file| # Атрибут "a" означает append (добавление), можно указывать "r", "w" итд
file.write("\nNIGA\n")
end
Отслеживание ошибок
list = [3, 2]
begin
list["astu"] # Вместо индекса указал строку
puts 10 / 0
rescue TypeError => e
puts "TypeError"
puts e
rescue
puts "zero division"
end
#--------output------#
TypeError
no implicit conversion of String into Integer
Классы
class Myclass
attr_accessor :one, :two, :three
def initialize(mone, mtwo, mthree)
@one = mone
@two = mtwo
@three = mthree
end
def isOneOne
if @one == 1
return true
end
end
end
a = Myclass.new(1, 2, 3)
puts a.one
puts a.isOneOne
#--------output------#
1
true
Наследование
class Myclass
attr_accessor :one, :two, :three
def initialize(mone, mtwo, mthree)
@one = mone
@two = mtwo
@three = mthree
end
def isOneOne
if @one == 1
return true
end
end
end
class Newclass < Myclass # Newclass наследуется от Myclass
attr_accessor :four
def setFour(four)
@four = four
end
end
a = Myclass.new(1, 2, 3)
b = Newclass.new(1, 2, 3)
b.setFour(4)
puts a.one
puts a.isOneOne
puts
puts b.one
puts b.isOneOne
puts b.four
#--------output------#
1
true
1
true
4
Модули
Файл с модулем
$ cat module.rb
module Tools
def putsing(text)
puts text
end
end
Файл в который импортируется модуль
$ cat main.rb
require_relative "module.rb"
include Tools
Tools.putsing("niga")
Результат
$ ruby main.rb
niga
Двойное двоеточие Module::Version
это оператор разрешения области видимости (чтобы переменные было видно)
No Comments