Skip to content

Instantly share code, notes, and snippets.

@pashagray
Last active March 27, 2017 14:34
Show Gist options
  • Save pashagray/ebd9a871e33c718bebbba30fa5322db1 to your computer and use it in GitHub Desktop.
Save pashagray/ebd9a871e33c718bebbba30fa5322db1 to your computer and use it in GitHub Desktop.
# Во первых хочу сказать, что код везде рабочий и так можно писать.
# Но есть некоторые моменты.
# 02array.rb
my_array = []
number = 10
while number <= 100 do
my_array << number
number += 5
end
puts my_array
# Основная проблема тут в мутабельности массива. Т.е. мы меняем его во времени,
# что не есть хорошо, особенно если в дальнейшем в нашей системе используем
# многопоточность. Плюс это не "руби" код, а больше похоже на C/Java.
# Весь код можно записать вот так в одну строчку, плюс не создаются промежуточные переменные.
puts (10..100).step(5).to_a
# 04glasnie.rb
glasnie = [ "a", "e", "i", "o", "u", "y" ]
my_hash = {}
('a' .. 'z').each_with_index{|key, value| my_hash[key] = value + 1 if glasnie.include?(key)}
puts my_hash
# Тут похожая ситуация. Получается императивный подход + мутабельность данных, так как my_hash
# постоянно меняется во время прогона от a до z. Руби поддерживает функциональный стиль, и имеет
# такие вещи как map, reduce, select. Очень рекомендую про них почитать.
# Очень не очень, когда используют транслит. Лучше воспользоваться переводчиком гугла и переименовать
# glasnie в vowels.
# Плюс гласные – всегда одни и те же. Т.е. не подразумевается, что это будет меняться во времени, поэтому
# лучше будет сделать их константой.
# Еще руби поддерживает короткие записи массивов
# Для string %w(a e i o u y)
# Для symbol %i(a e i o u y)
# Твой код абсолютно верный, но немного не модный. Сейчас твой код написали бы так:
VOWELS = %w(a e i o u y)
puts ('a' .. 'z').map.with_index { |k, idx| [k, idx + 1] if VOWELS.include?(k)}.to_h
# По остальным задачам аналогично. Все ок, но хотелось бы видеть больше функционального
# подхода и соблюдения стиля. Все о стиле по ruby смотри здесь https://github.com/bbatsov/ruby-style-guide
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment