Как стать автором
Обновить

Комментарии 69

И снова спасибо Вам!
Для себя и вас стараюсь ;)

Кстати, вопрос к профи: Как отображать кириллицу в дебаггере (консольке) в Visual Studio? Сейчас там вопросы одни :(
Я не профи в VS, но по общим принципам найди где-нибудь в свойствах файла или в меню вид, где задается кодировка этого файла. Скорее всего VS поставила windows-1251 кодировку, а в консольке отоброжает utf-8, исправь кодировку файла на utf-8. Кроме того должна быть в свойствах проекта или настройках всей IDE кодировка по умолчанию для новых файлов.

P.S. Можно, наверное, и вывод консоли настроить на windows-1251, но в наше время, по-моему правильно все на utf-8 настраивать изначально (учти это, кстати, когда начнешь с мускулом работать, чтобы и сам мускул по умолчанию utf-8 использовал, и приложения/IDE к нему коннектились с utf-8)
$KCODE = 'utf8'
puts "привет"

Код должен быть тоже в utf-8
И вообще бросайте вы эту не провославную M$VS.
ты не как не сделаешь чтобы там нормально кириллица была, этим вопросом я занимался (насколько я знаю в linux все в порядке с ней). нормально русский язык отображается в начиная с ruby-1.9.0-2 (поскольку внедряется юникод), если не веришь мне скачай www.garbagecollect.jp/ruby вот тут (всегда самые новые версии ruby здесь есть, а 1.9.0-2 есть и для windows), да скажете вы выходила же версия Preview 1 для win, но там почему то кирилица не поддерживалась.
найдено решение надо ставить $KCODE = «u» и все будет нормально с кирилицей, проверено в netbeans и в intype, $KCODE = 'utf8' < — это вообще гон какой то.
пардон, там не «u» а 'u' (кавычки)
и ты здесь! =) все таки я начал читать и пытаться на руби колбасить!
age = 22
puts "Sovsem Molodoi!" if age < 25


Непривычно конечно, но после обратной польской нотации и не к такому можно привыкнуть :)

Вот только не понял, что является ограничителем «спереди», как разделяются age = 22 и puts «Sovsem Molodoi!» начало строки или просто минус одно выражение перед if? В «сиобразных» языках по традиции для разделения используется ";", условные ветвления, циклы и прочее в большинстве случаев оперируют или одним выражением ( if (1 < 0) puts('1 < 0'); puts( '1 > 0'); выведет 1 > 0), или блоком выражений заключенным в скобки ( if (1<0) { puts('1<0'); puts ('1>0'); } не выведет ничего), а символ перевода строки приравнен к пробельным символам. А в Ruby что является разделителем?

A пост- и прединкрменты/декременты есть? можно вместо x+=1 писать x++ или ++x?

P.S. Молодец, видать вдохновение нашло от того, что язык понравился :)
В Ruby разделитель — новая строка
спасибо, пойду экспериментировать
и; тоже
Всё-таки определись, является Ruby и программирование на нем объектно-ориентированным или объектным. Сдается мне, что второе
Как мне подсказывали программирование на Ruby объектно-ориентированной, а язык просто нельзя так называть, язык объектный, а программирование ОО. Может я не так понял, конечно
Язык — объектный, так как все есть объект.
А программирование на нем — это как получиться, пишем тоько процедуры — будет процедурное, строим иерархию классов — будет ООП, используем везде лямбду будет(правда очень своеобразное) функциональное программирование. От программиста вобщем зависит:)
Можете писать несколько операций на одной строке разделяя их точкой-с-запятой:
puts «Hello »; puts «VolCh»

Есть прединкремент:
3.next
насчет разделения я уже догадался, и случанйо понял что в конструкции if then else end необязательно then
сейчас вот никак не могу понять как сделать«обратную» форму записи полной конструкции пробую и puts "..." if a>0 puts "////" else и puts "..." else puts "////" if a>0 в общем все перестановки пытаюсь пробовать, хоть программу пиши :(
никак, исключительно из эстетических соображений, ну кроме тернарного оператора:
condition ? if-expression : else-expression 
я правильно понимаю, что, например, puts тоже возвращает какое-то значение и можно написать, скажем
num == 0 ? puts "Zero!!!" : puts num (понятно, что можно и короче записать, вынести puts «за скобки»)?
А можно ещё puts (num==0? «Zero!!!»: num)

Упомяните в четвертой капле про break внутри итераторов и циклов. Там ещё такой момент, что, например, each возвращает то, по чем ходили, а while возвращает false (который то же самое, что nil).

Пример использования (не наглядный, кому-то покажется ужасным, но главное, что виден принцип):
puts ((2...x).each { |i| break nil if x%i==0 }? «простое»: «не простое»)
Кажется вопрос снимается, прочитал ответ нижу, если уж if и while значения имеют :)
метод всегда возвращает последнее вычисленное выражение за исключением случаев с return
puts возвращает соответственно nil
then нужен в принципе чтобы переносить, выполняемый по условию, код на другую строку
только в пределах одной строки можно обойтись без then
пост- и прединкрментов/декрементов нету
Да ладно вам. Что вы такое говорите?

3.next # => 4
«a».next # => b
Или это не инкремент, или после этого 3 == 4
Согласен. Действительно

k = 3
k.next # => 4

но после этого
puts k # => 3

Как-то меня переклинило… :)
Декремента и инкремента в руби нет
кто мешает определить?

Это как-раз нормальное для человека построение предложения: «напечатай Sovsem Molodoi! если возраст меньше 25».
Скажите, а в каком случае какой «Операторы сравнения и Условия» надо использовать? Хотя это и не «операторы» вовсе.
Ой, это просто так слилось по смыслу :( Скажем так: «Условия и операторы сравнения»
Ну так а когда какой из 3х видов if-сахара используется? Когда программисту вздумается?
Что лучше читается, то и используется. Есть некоторые эмпирически выработанные критерии того, что читается лучше, а что хуже, но вообще — да, дело вкуса и личного стиля.
Обожаю руби за то, что на нем можно любое элементарное решение записать одним из сотни способов, которые глазу приятней.
Ну вообще говоря if, for, while, etc возвращают значения и их можно теоретически использовать в выражениях (но это изврат конечно)
А вот в форме:

variable = if condition
                 some_value
               else
                 other_value
               end

встретить вполне можно.
Это не изврат, это нормально.

Как раз наоборот, statement'ы это большое недоразумение.
НЛО прилетело и опубликовало эту надпись здесь
Точно, аж самому противно :))
Как-то мне слово «инстанс» не нравится. Может лучше использовать «экземпляр»: метод экземпляра, экземпляр класса,…?

В работе с float небольшая неточность: для того чтобы избежать целочисленного результата достаточно чтобы хотя бы одно число (делитель или делимое) было float. Не обязательно переводить во float оба числа.
Здорово, что вы подсказали с экземпляром — меняю в срочно порядке :)
Если про ООП как вам такой код:

puts «1 + 2 = » + 1.+(2).to_s

В Ruby все является объектом. И цифра «1» тоже объект и у него есть метод "+"
Да, хотел об этом написать, но как-то забыл — попробуем засунуть инфу ;)
да уж, надеюсь на практике такое не часто встречается? :)
Это пример не на объекты, а не передачу сообщений. ^_^
А какже про:

case value
   when expression
        code
   .
   .
   .
end
Еще вернемся к условиям :) Честно говоря и if сюда был засунут только для того, чтобы >< показать…
Ждем 4-ю каплю :)
4 — объект (...), к нему применяется метод times,

Метод times — это неотъемлемая часть объекта 4, он является методом класса Fixnum.
При вашей же формулировке, это не очевидно, создаётся впечатление, что метод times что-то чужеродное для него.
Кстати, это очень легко проверить, в irb введите
puts 4.methods.sort
Неплохо было бы ввести здесь же понятие блока (то, что находится в do...end или фигурных скобках).

Собственно, именно блоки, наряду с замыканиями, кардинально отличают руби от других императивных языков, например, от PHP. Более того, замыкания возникли в функциональном программировании, так что это не объектная, а функциональная возможность языка.
Черт, а вот это я уже действительно проштрафился — придется писать в следующей «капле» :(
спасибо вам снова, ждем продолжения. Что то руби становится все ближе.
Поделился камрой. (Max frei ©)
отлично! продолжайте. про замыкания напишите, хотелось бы разобраться получше
Вы собрались пересказать весь туториал?
Вообще то да. Кстати, если кто против — я буду оставлять топики в личном блоге
— Вы собрались пересказать весь туториал?
а почему бы и нет? довольно интересно «пересказывается»
спасибо! у вас отлично это получается :)
Обычно подобные обсуждения встречаются в study-groups, когда люди обсуждают главу книги. Тут такое же впечатление. Не стоило переписывать учебник. Хотя, поделиться опытом даже в таких простых вещах — полезно.
На самом деле я только в этой статье позволил себе немного расслабиться и поцитировать книгу :)
Не останавливайтесь. Вы поможете многим и многим разработчикам :) Спасибо вам.
1. Что значит оператор сравнения <=>?
2. Можно к существующим базовым классам добавить свои методы? Я имею в виду чтобы было 4.my_method
3. Он вообще case-sensitive? myVar и Myvar — разные переменные?

1. Возвращает 0 если переменные равны, 1, если первая больше, -1 — соотвественно меньше
2. Да, можно добавлять и изменять — об этом дальше.
3. Да, однако переменные только со строчной буквы
Условия можно комбинировать. Чтобы получить противоположный эффект можно использовать слово unless:

age = 24
puts «You're NOT a teenager» unless age > 12 && age < 20


Прошу прощения за возможно глупый вопрос (я совсем недавно начал переход на Ruby), а почему нельзя для того же эффекта написать

puts «You're NOT a teenager» if age > 12 && age < 20

Можете конкретнее пояснить разницу между unless и if?
Я так понимаю unless — «только если не»
то есть
unless = if not

(я предположил, в руби не силен)
Я тоже так понимаю эту конструкцию.
В контексте приведённого примера логично.

Просто хотел уточнить. Спасибо :)
Более очевидна, по-моему, польза не со сложными выражениями, а с единичными булевыми переменными (или методами возвращающих true/false/nil)

puts «error» unless success
puts «Гавно» unless «Сделано в Студии Артемия Лебедева»
Хороший пример :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории