Pull to refresh

Comments 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'ы это большое недоразумение.
UFO just landed and posted this here
Точно, аж самому противно :))
Как-то мне слово «инстанс» не нравится. Может лучше использовать «экземпляр»: метод экземпляра, экземпляр класса,…?

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

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

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

case value
   when expression
        code
   .
   .
   .
end
Еще вернемся к условиям :) Честно говоря и if сюда был засунут только для того, чтобы >< показать…
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 «Сделано в Студии Артемия Лебедева»
Sign up to leave a comment.

Articles