Info
Content

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
Back to top