# 1. Ruby adalah bahasa yang Object Oriented (OOP) => semua elemen dalam source code adalah object
# 2. OOP => Class dan object
# 3. Object => atribut; method/function

puts "Sedang belajar ruby"

# Variable
numeric_1 = 1 #Integer, Float, Decimal
numeric_2 = 10
numeric_3 = 10.5

string_1 = "halo"
string_2 = "3"
boolean_1 = true # atau false

array_1 = [1,2,3,4,5]
array_2 = [true, false]
array_3 = [1,2, true, "halo"]
array_4 = [1,2, [3,4], [5, [6]]]

hash_1 = {"satu" => 1, "dua" => 2, "tiga" => 3, "four" => 4, "five" => 5}
hash_2 = {satu: 1, dua: 2, tiga: 3}
hash_3 = {"satu" => 1, "dua" => {"dua-satu" => {"dua-satu-satu" => 122, "dua-satu-dua" => 212}}, "tiga" => 3}

range = 1..5
sekarang = Time.now

numeric_3 = numeric_1 + numeric_2 + string_2.to_i
puts numeric_3

jumlah = (numeric_3 + numeric_2).to_i
puts jumlah

# + penjumlahan
# - pengurangan
# * perkalian
# / pembagian
# % modulo

=begin
# Constant
Constant_1 = 1

puts numeric_1.class
puts numeric_2.class
puts boolean_1.class
puts hash_2.class

puts "Hash (tipe data) ----------"
puts hash_3["dua"]
puts hash_3.map {|key, value| puts key }

puts "Range (tipe data) ----------"
array_range = range.to_a
puts array_range.class
puts range.class

puts "Datetime (tipe data) ----------"
puts sekarang
puts sekarang.year

puts "Konversi (tipe data) ----------"
puts numeric_1.to_s
puts string_1.to_i
puts hash_1.to_a

puts "Konversi (tipe data) ----------"
puts numeric_1 + string_1

puts "Kondisi (if else) ----------"
if (numeric_1 > 0)
  puts "INTEGER #{string_1}"
elsif (numeric_2 < 0)
  puts "NEGATIVE"
else 
  puts "NONE"
end

puts "For do (looping) ----------"
for a in array_3 do
  puts a
end

puts "Each do (looping) ----------"
array_3.each do |a|
  puts a
end

puts "Each with index (looping) ----------"
array_2.each_with_index do |a,i|
  puts "#{i+1} = #{a}"
end

puts "Operasi aritmatika 1 ----------"
array_1.each_with_index do |a,i|
  puts a+1
end

puts "Operasi aritmatika 2 ----------"
array_1.each_with_index do |a,i|
  puts a+array_1[i-1]
end

# 1, 4, 9, 16, 25 (i*i)
puts "Operasi aritmatika 3 ----------"
array_1.each do |element|
  result = element * element
  puts "#{result}"
end


# 1, 3, 5 (ganjil saja)
puts "Operasi aritmatika 4 ----------"
array_1.each do |element|
  if element % 2 != 0
    puts "#{element}"
  end
end

# 2, 4 (habis dibagi 2)
puts "Operasi aritmatika 5 ----------"
array_1.each { |element| puts "#{element}" if element % 2 == 0 }

# Operasi: + - / * %
# Variable: global variable, local variable, instance variable, class variable
# Constant: 

# Constant_1 = 2 #akan error


# Function:
def fungsi_1
  puts "Function 1 ----------"
  array_input = [1,2,3,4,5]
  array_input.each { |element| puts "#{element}" if element % 2 == 0 }
end

fungsi_1()

def fungsi_2(array_input, teks, label="ANGKA")
  puts "Function 2 ----------"
  array_input.each { |element| puts "#{element}" if element % 2 == 0 }
end

#fungsi_2(array_1)
fungsi_2(array_1, "")


# Execercise: 
# array_3 = [1,2, true, "halo"]
# fungsi_3(array_3, "Billy")
# "halo Billy"

# fungsi_3(array_3, "Andi")
# "halo Andi"
def fungsi_3(array, nama)
  array.each do |element|
    if element.is_a?(String)
      puts "#{element} #{nama}"
    end
  end
end

array_3 = [1, 2, true, "halo"]
fungsi_3(array_3, "Billy")
=end 
by