Комментарии 40
этакое закрепление материала;)
Спасибо, как раз вовремя, многие накопившиеся мелкие вопросы, которые хотел задать одним махом, отпали :) Хотя не очень понятно про предикаты и «опасные» (как их кто-то называл в комментах) методы — это просто соглашение об именовании или синтаксис языка? Мне кажется, что первое, я прав?
Добавлю, что недавно встретил где-то про unless
Хотя unless и может работать с else, но не рекомендуется, то есть синтаксически верную конструкцию
лучше заменять на
P.S. Эх, не догадался попровать str = gets вместо gets str по старым сишным привычкам :)
Добавлю, что недавно встретил где-то про 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, если я правильно понимаю.
В Си есть два варианта: while(){} и do{}while(). Разница в том, проверяется условие до выполнения тела цикла или после.
В Руби while можно написать перед телом цикла или после него, но работать оба варианта будут одинаково. Условие проверяется до выполнения тела цикла в любом случае.
Аналог do while можно получить только не очень красивым способом вроде использования break с условием в конце тела цикла loop, если я правильно понимаю.
Всё верно.
Также ещё нужно упомнять итераторы вида x.upto(y){|i|...} x.downto(y){|i|...} x.step(y,s){|i|...}
Также ещё нужно упомнять итераторы вида x.upto(y){|i|...} x.downto(y){|i|...} x.step(y,s){|i|...}
Не совсем:
Как раз напечатает один раз 1, и только потом будет проверено условие while, которое оборвёт цикл.
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. А что так сразу заключение, вроде еще много чего нам автор собрается рассказать
P.S. А что так сразу заключение, вроде еще много чего нам автор собрается рассказать
Не понятно, только, зачем переносить топики по Руби в новый блог со странным названием?
затем, чтобы облегчить доступ к статьям, написание которых автор видимо намерен продолжать. возможно в новом блоге появятся подобные статьи по другим языкам программирования. так что идея очень даже хороша! а вот название правда странное))
Высказывали автору пожелания отделить статьи от остального блога Ruby (действительно, изучающим руби по «каплям» так удобнее следить, по себе сужу), а на хабре подблог сделать вроде как нельзя.
Зачем плодить одинаковые блоги, но с разными названиями? Непонятно…
Касательно последних строк о хэшах: в руби 1.9 хэши будут упорядочены, что весьма упрощает многие задачи.
Руби! Компиляй!
Комментарии…
1. STDOUT.flush после puts — невкусно, ибо ничего не делает. Лучше уж тогда print.
2. В примере про strip лучше выводить через inspect (p string), в противном случае не будет видно разницы.
3. Оператор <cond>? <expr>: <expr> обычно называется тернарным, слова «трёхместный» что-то ни разу не встречал.
1. STDOUT.flush после puts — невкусно, ибо ничего не делает. Лучше уж тогда print.
2. В примере про strip лучше выводить через inspect (p string), в противном случае не будет видно разницы.
3. Оператор <cond>? <expr>: <expr> обычно называется тернарным, слова «трёхместный» что-то ни разу не встречал.
1. Как это ничего не делает? _Оо
Вывод puts не отображается, пока программа работает, если не делать периодически FLUSH.
Вывод puts не отображается, пока программа работает, если не делать периодически FLUSH.
последниЙ капля?
Асоциативные массивы (далее хэши, hashes) похожи на массивы, так как они также _содаржат_ упорядоченный набор объектов.
сначала прочитал «Покурим Руби вместе» :-)
Ну Вы даёте!
Вы будете исправлять ошибки в статье или нет? :)
strip убирает пробелы не только в конце строки, а вообще, убирает все непечатные и пробельные символы в конце и в начале строки:
> puts " \n \t test \r \n".strip.inspect "test"
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Покорим Ruby вместе! Капля седьмая