Pull to refresh

Comments 40

этакое закрепление материала;)
Постоянно оставались хвосты — надо обрезать ;)
Спасибо, как раз вовремя, многие накопившиеся мелкие вопросы, которые хотел задать одним махом, отпали :) Хотя не очень понятно про предикаты и «опасные» (как их кто-то называл в комментах) методы — это просто соглашение об именовании или синтаксис языка? Мне кажется, что первое, я прав?

Добавлю, что недавно встретил где-то про unless

Хотя unless и может работать с else, но не рекомендуется, то есть синтаксически верную конструкцию

unless a > b
  puts a
else
  puts b
end

лучше заменять на

if a <= b # или b > a
  puts b
else
  puts a
end


P.S. Эх, не догадался попровать str = gets вместо gets str по старым сишным привычкам :)
Да, в методах пунктуация — это просто соглашение, на самом деле совсем отдельные методы
Да, соглашение об именовании.
Интересная особенность while:
В Си есть два варианта: while(){} и do{}while(). Разница в том, проверяется условие до выполнения тела цикла или после.
В Руби while можно написать перед телом цикла или после него, но работать оба варианта будут одинаково. Условие проверяется до выполнения тела цикла в любом случае.
Аналог do while можно получить только не очень красивым способом вроде использования break с условием в конце тела цикла loop, если я правильно понимаю.
Всё верно.
Также ещё нужно упомнять итераторы вида x.upto(y){|i|...} x.downto(y){|i|...} x.step(y,s){|i|...}
Не совсем:
begin
puts 1
end while false

Как раз напечатает один раз 1, и только потом будет проверено условие while, которое оборвёт цикл.
Кажется разобрался, что к чему: (примерный перевод)
В случае
begin <code> end while <cond> 
код обязательно выполнится хотя бы 1 раз; тогда как в случае
<code> while <cond> 
может ни разу не выполниться; потому что это эквивалентно записи
while <cond> <code> 

begin/end часто становятся источником замешательства. Было бы хорошо избавиться от них совсем.
Предлагаю в качестве заключения написать статейку: «Почему именно Ruby?» или «Преимущества Ruby» или что-то в этом роде. Спасибо за отличный цикл статей!
возможно стоить сделать «Дополнение» (читай итог) в виде таблички с описанием классов, методов, операторов… и их синтаксиса. так как читают вас и начинающие программисты.
«Почему именно Ruby» обязательно вылиться в holly war (с PHP и Python программистами в основном). Лучше пусть каждый сам решит, потому что у Ruby преимущества не очень формализуемые: «синтаксический сахар», стройная идеология, лёгкость DSL.
Почитайте в первых каплях в комментах мои «холивары» с рубистами :)

P.S. А что так сразу заключение, вроде еще много чего нам автор собрается рассказать
Внимание! Это последний капля, опубликованный в блоге Ruby!

Вот поэтому и подумал, но надеюсь что это не так :)
А дальше абзац не дочитать? :) Просто теперь «капли» будут в новом блоге публиковаться, а не в Ruby, чтобы проще следить было
Не понятно, только, зачем переносить топики по Руби в новый блог со странным названием?
затем, чтобы облегчить доступ к статьям, написание которых автор видимо намерен продолжать. возможно в новом блоге появятся подобные статьи по другим языкам программирования. так что идея очень даже хороша! а вот название правда странное))
Высказывали автору пожелания отделить статьи от остального блога Ruby (действительно, изучающим руби по «каплям» так удобнее следить, по себе сужу), а на хабре подблог сделать вроде как нельзя.
Было лучше бы писать это в личный блог, что бы не засорять главную каждый день.
А что значит засорять?
Для слежения «за каплями» проще было бы использовать уникальный тэг. Они для этого и предназначены. ИМХО
Зачем плодить одинаковые блоги, но с разными названиями? Непонятно…
Касательно последних строк о хэшах: в руби 1.9 хэши будут упорядочены, что весьма упрощает многие задачи.
UFO just landed and posted this here
Комментарии…

1. STDOUT.flush после puts — невкусно, ибо ничего не делает. Лучше уж тогда print.
2. В примере про strip лучше выводить через inspect (p string), в противном случае не будет видно разницы.
3. Оператор <cond>? <expr>: <expr> обычно называется тернарным, слова «трёхместный» что-то ни разу не встречал.
1. Как это ничего не делает? _Оо
Вывод puts не отображается, пока программа работает, если не делать периодически FLUSH.
Буфер принудительно очищается при выводе одного из символов новой строки.
> Вывод puts не отображается, пока программа работает, если не делать периодически FLUSH
А если я буду делать
while true
  puts 'qq'
end

вывод будет сохраняться в информационной поле Вселенной? :-D
Асоциативные массивы (далее хэши, hashes) похожи на массивы, так как они также _содаржат_ упорядоченный набор объектов.
сначала прочитал «Покурим Руби вместе» :-)
Прошу прощения, само отправилось…

Асоциативные массивы (далее хэши, hashes) похожи на массивы, так как они также содаржат упорядоченный набор объектов

И сразу же за этим
Как видим элементы хэша не упорядочиваются, поэтому хэши непригодны для списков, очередей и т.д.

Где-то тут подвох…
UFO just landed and posted this here
Вы будете исправлять ошибки в статье или нет? :)
strip убирает пробелы не только в конце строки, а вообще, убирает все непечатные и пробельные символы в конце и в начале строки:
> puts " \n \t  test   \r  \n".strip.inspect
"test"
Sign up to leave a comment.

Articles