Обсуждение:Ruby

Содержимое страницы недоступно на других языках.
Материал из Викиучебника — открытых книг для открытого мира

Добавлен практикум[править]

Ruby/Практикум
Очень интересная вещица, которой просто необходима Ваша помощь в дополнении информацией (от новых решений до пояснений) Rubynovich 16:39, 13 августа 2008 (UTC)[ответить]

Оптимизировал структуру учебника[править]

Сделано следующее:

  • каждая глава теперь в виде отдельного документа
  • создано несколько разделов по степени погружения. Распределение глав внутри разделов сугубо субъективное. Будете менять — меняйте, но не забудьте обосновать и поменять содержимое раздела, а не только главной страницы
  • каждый раздел представляет собой объединения всех глав, которые в него входят Rubynovich 16:39, 13 августа 2008 (UTC)[ответить]

Моя первая попытка писать в Вики[править]

- +++ Предлагается следующая мнемоника.

Методы .push и .pop созвучны с русским "пушистая попа", а английское слово "push" созвучно еще русскому "пыж". Соответственно, при выполнении операции .push злобный программист загоняет в конец массива (пушистую попу) пыж, а при выполнении операции .pop пыж с характерным звуком "поп!" выскакивает назад в мозолистую программистскую ладонь. - - Спереди массив больше похож на добродушного и незаслуженно обижаемого ужа, который совершенно не желает держать во рту теннисный мяч. С недовольным шипением "ш-ш-ш-ш-ш...и-и-и..фт!" - уж выплевывает его (операция .shift). Бездушный же программист хватает ужа за щеки и снова натягивает на мяч, приговаривая "A-а-а!!! На тебе ШИФТ!" (операция .unshift. Как мы помним, английское слово "unshift" произносится "аншифт").

Я написал это изменение потому что нужно помнить, что pop и push работают с концом массива, shift/unshift с началом, да и названия методов shift и unshift, по-моему неудачны, неинтуитивны, трудны в усвоении. Хотя в целом, книга прямо-таки отличная, мнемоника, предложенная автором в данном случае, меня не впечатлила. Правда, удалить авторский текст у меня рука, по любому, не повернулась бы. Слишком велико уважение к его таланту и труду.

Это была моя первая и, скорее всего, последняя попытка писать в Вики. Через 15 минут текст был откачен. Только пожалуйста, не принимайте за обиженного, просто хотелось посмотреть как это работает. Правка была удалена - ни объяснения, ни предупреждения, просто откачена Ramirom, даже не автором. Может быть, неприличное слово "попа", может быть, садистский уклон, может быть, излишняя эмоциональность (хотя, мнемоника и эмоциональность никак не враги, чтоб запоминалось, картинка должна быть яркой), может быть, правка просто не имела ценности?

Как вы отделяете вандализм/бестолковость от желания и умения писать? И как вы умудряетесь это делать при таком большом и растущем объеме информации? Судя по тому, что я получил свое без объяснения причин - со щепками. Но даже так, мне, честно говоря, удивительно как вам удается всем этим более-менее управлять.

С уважением и признательностью,
Судоплатов Константин, программист,
Саратов

Обижаться имеете полное право, такова суровая вики-жизнь. Мнемоника была и слишком длинная, и натянутая. Притом в русском нет ономатопеи «поп!», это английское. Тут нужна зрительная памятка. А вообще нам бы не говорить о такой мелочи. Ramir 12:59, 20 августа 2007 (UTC)[ответить]

1. Не впечатлен вашими программными/организационными инструментами. Вдвойне впечатлен результатами вашей работы. 2. Книга в самом деле отличная. Респект автору.
Константин.

"Улыбок тебе дед Мокар"[править]

Вы меня извините, я ломал язык читая этот хакерский язык (в названии переменных), но вот когда нашёл предложение сделать reverse на фразу "Улыбок тебе дед Макар", мне показалось это слишком! Это учебник или что? вы бы ещё Падонский сленг начали использовать. Очень разочаровало меня это. =( Предлагаю убрать данный пример в ввиду его некультурности! Шугард

Вы во многом правы. Однако мучения и подтрунивание над учеником — это особая образовательная методика. На всю жизнь чтоб запомнили наш викиучебник. Но… надо бы уже внять столь многим отзывам читателей. Рубинович! Ramir
На мой взгляд, лучше использовать нормальный английский язык. Кому станет интересно "а что же значит название этой переменной?" - да хоть Google Translate откроет да переведет себе. И будет ему щасте. Ну и нам заодно. Turkish 15:24, 2 августа 2007 (UTC)[ответить]
Применять языг падонкаф — тоже ценный замысел. Наряду с преведом (уже есть), финской полькой (есть), Ктулху и чего ещё там. Ramir
Забавно, но поломать голову над тем, что же имелось ввиду, пришлось изрядно. Например "Ключевое слово yield в методе открывает раздвижные двери, впускающие аргумент[ы] в блок." - смысл yield'а нашёл из другого источника, а вот причём здесь двери, так и не понял. Может быть, у меня с ассоциативным мышлением не всё в порядке, но всё же учебник должен быть более формализованным!
Я тоже голосую за то, чтобы не использовать таких названий переменных. Предупреждаю, через некоторое время начну править. Greck 14:50, 8 мая 2007 (UTC)[ответить]
Названия переменных - маразм какой-то, мягко говоря. Сопливым недохакерам из 9б, может и понравится, но мне кажется, что нормальному человеку такое читать неудобно и неприятно.

Форум[править]

Подскажите пожалуйста форумы где ответят на вопросы связанные с программированием на Ruby )). Тольк кроме http://rubyclub.com.ua/ там я был, но токо не вкурил в какую ветку свой вопрос писать (по потокам вопрос).

Сейчас изменил уже первую страницу так что можешь постить может уже вкуришь.
Хочу от себя заметить, что 2/3 ответов того "автора" не пашут, или пашут только на ЕГО тестовых данных, а некоторые ответы решены с применением средств еще не изученых в той части викибука по которой были задания + некоторые ответы слишком громоздкие и интуитивно непонятные, особенно для новичков. Вот здесь - http://forum.vingrad.ru/forum/act-ST/f-310/t-130713.html гораздо более корректные и приятные глазу ответы. Хотелось бы, чтобы ссылку на эту "поделку" удалили из викибука (сам не могу, только зарегился здесь и не понимаю принципов работы с этим движком).

Можете спрашивать свои вопросы на АИБ в специальном разделе http://2ch.hk/pr/res/232635.html62.33.155.186 08:53, 2 февраля 2013 (UTC)[ответить]

Квантификатор или квантор?[править]

Есть подозрение, что это не одно и то же. Квантификатор взят из лингвистики, а квантор из логических высказываний. К тому же, в качестве кванторов в Ruby реализованы методы-итераторы .all? и .any?. --Rubynovich 14:34, 4 августа 2006 (UTC)[ответить]

Квантификацияангл. → — общее понятие, означающее лишь «дачу количественной оценки». То, что в лингвистике он назван «квантификатором», свидетельствует о плохой лингвистической способности отечественных лингвистов :-) В польском, например, квантор в логике тоже уродливо назван «квантификатором», так что всё это одно. Давай выберем правильный вариант словесного заимствования. Ramir 04:13, 5 августа 2006 (UTC)[ответить]
Правильней было бы оставить квантор. Но тогда необходимо как-то объяснять, что квантор в Ruby — .any? и .all?, а в языке правил — {m,n}.Rubynovich 16:26, 14 августа 2006 (UTC)[ответить]
Эй, так .any? — это вовсе даже не эквивалент логического квантора всеобщности! Да и в оригинале он не зовётся “quantificator”’ом, так что нет тут путаницы, .all? — это лишь метод, но не квантор. Ramir 21:12, 14 августа 2006 (UTC)[ответить]
quantifier 1) логика квантор 2) квантификатор ( слово для обозначения количественных отношений ) / Lingvo 10 Rubynovich 21:02, 31 октября 2006 (UTC)[ответить]
Не исключено, что составители эти словарей — умные, порядочные и добрые люди. Ramir 11:31, 29 апреля 2007 (UTC)[ответить]

Способы создания массива[править]

Поясните, пожалуйста, как работает метод new для массива:

Array.new( 6 ){ |index| index + 1 }   #-> [1,2,3,4,5,6]

--HenryS 18:46, 1 июля 2006 (UTC)[ответить]

то же самое, что
(0...6).map{ |index| index + 1 }

Rubynovich 18:44, 4 июля 2006 (UTC)[ответить]

Логический тип[править]

Обьясните, пожалуйста, операцию ^ (или-не)

не ( А или Б) Ramir 05:25, 1 июля 2006 (UTC)[ответить]
Это было неили, а не иск-или, так что я тут был неправ. Ramir 04:05, 2 июля 2006 (UTC)[ответить]
если A != Б, то true. Иначе, false Rubynovich 14:02, 1 июля 2006 (UTC)[ответить]
Вот тест:
irb(main):012:0> a=false
=> false
irb(main):013:0> b=false
=> false
irb(main):014:0> p a^b
false
=> nil

Хотя а=b

OK. Я проверил на тестах. Это хорошо известное ИСКЛЮЧАЮЩЕЕ ИЛИ: Либо А, либо Б, но не оба сразу.
Побитовое =)
a=2
b=1
p( a^b )

Самое забавное, что информации о нем нигде нету. Rubynovich 18:48, 4 июля 2006 (UTC)[ответить]

Интерпретатор[править]

Я думаю, что обучение с самого начала пойдет быстрее и веселее, если сразу после того, как ученик обрел уверенность в том, что он смог написать программу "Привет Мир!" и может хранить и изменять ее, познакомить с интерактивными Руби: irb и сетевой http://tryruby.hobix.com. Вы описали это в "Установках", но не всякий прочтет. Я думаю, что подавляющее число упражнений нужно делать на интерпретаторе.  — Эта реплика добавлена участником HenryS (о · в)

Прошу все предложения не расписывать тут, а вносить сразу в учебник так, как кажется пригодным. Всё равно ведь время тратишь идя сюда, размовляя-предлагая. Не предлагай, а сразу и смело редактируй — принцип работы в вики. Если соавторам внесённое покажется ненужным вообще, — удалят, если захотят дополнить/поправить — поправят. Ramir 05:30, 1 июля 2006 (UTC)[ответить]

Начало работы[править]

OK. Буду учиться по учебнику, одновременно задавая возникающие вопросы, Думаю, что ответы на них имеет смысл отражать в соотв. главах, чтобы у следующих читателей они не возникали.
Итак,

  • Глава 2.1. Начало работы
    • В каком фолдере (директории) должна находится программа?
    • В какой кодировке должна быть написана программа?

Наверняка - это настраиваемые параметры, поэтому в данной главе лучше просто указать те значения, которые приняты по умолчанию, а в одной из последующих - продвинутых - глав, рассказать о этих настройках. Из главы "Начало работы" я бы дал ссылку на информацию oб этих настройках, т.к. у некоторых могут быть трудности с использованием умолчаний (напр. Руби на специальном драйве и т.п.)
Жду ответов на мои вопросы. (У меня Windows XP)
Спасибо, --HenryS 01:07, 28 июня 2006 (UTC)[ответить]

Кажется, вопросы бесмысленны. Директория — неважно какая (это можно понять из текста), а кодировка — в зависимости от языка, на котором будут строки. Ramir 08:44, 29 июня 2006 (UTC)[ответить]
Опустив Вашу первую фразу, поговорим по существу:
  • Откуда Руби знает, где находится текст программы? Должен он быть в той же директории (фолдере, папке, directory, folder, etc...), что и интерпретатор или в какой-либо другой? Как можно это настроить?
  • Откуда Руби знает на каком языке (точнее, в какой кодировке: АNSI, Unicode, UTF-8, Win 1251, etc...) представлены строки? Как можно это настроить? --HenryS 12:24, 29 июня 2006 (UTC)[ответить]
О папке: он может быть в совершенно любой папке, если сказать системе, что файлы с расширением .rb выполняются интерпретратором. В Уиндоуз это делает установочная программа, так что (далее по тексту). На второй вопрос ответа не знаю (у меня работает в cp1251), но по поиску в яндексе (который кое-кому следовало сделать до меня) видно, что поддержка Юникода в Ruby отложена до второй версии! =:о(. Есть разные пристройки, но некрасивые. Ramir 12:46, 29 июня 2006 (UTC)[ответить]
Вы не совсем поняли мою цель. Я имею возможность обращаться к первоисточникам для изучения Руби, но я не тороплюсь и хочу по ходу изучения корректировать учебник. Конечно я могу разобраться сам во многом, но ведь это учебник - он должен быть самодостаточен. А теперь к делу
1. В учебнике сказано, чтобы запустить Руби нужно дать команду
% ruby TecToBa9_nporpamma.rb
Это значит, что программа должна быть в root directory для программ Руби, а не в любой. Вопрос, какая папка является root остается открытым.
2. Я запустил свою программу, дважды кликнув мышкой на файле - появилось окно ДОС и быстро исчезло. Надо сказать в учебнике, какие установки (в моем случае Windows) необходимы, чтобы окно не исчезало и был виден результат.
3. Вопрос с кодировками теперь для меня понятен и, после того как у меня полностью и без проблем пройдет "Начало работы", я, если никто не сделает это до меня, откорректирую раздел "Установка", чтобы он больше ни у кого не возникал.

Жду ответа на вопросы 1, 2 и пойдем дальше :-)))--HenryS 20:46, 29 июня 2006 (UTC)[ответить]

Думаю, Рубинович занет больше. Цитованная выше команда — для юниксовой строки. Под Уиндоузом легче запустить файл из обозревателя, я думаю. А чтобы окно не убегало, я обычно делаю так:
#(программа, выводящая текст)
gets #метод ждёт любого ввода с клавиатуры, ничего не делает. Программа затем завершается.

Ramir 14:04, 30 июня 2006 (UTC)[ответить]

Спасибо, теперь пошло и я НАДЕЮСЬ ВРЕМЕННО внес коррекцию для Windows. Но как Вы понимете - такое программирование будет головной болью. Поэтому, если авторы хотят, чтобы пользователи Windows, a их в порядки больше, чем Unix-ов действительно пользовались учебником, необходимо с первых же строк о Windows обьяснить как запускать Руби из окна ДОС. Тем более, что в проектах реальной жизни потребуется хранить программы в различных папках. --HenryS 22:20, 30 июня 2006 (UTC)[ответить]

Мда... понаписали тут. =) Теперь давайте поясню свою позицию. Ввод с клавиатуры и вывод на экран — прошлый век и годятся только для отладки. Подобные методы актуальны только в условиях компилятора, когда для того, чтобы посмотреть результат необходимо компилировать программу перед запуском. Подразумевается, что читатель использует irb или его сетевой аналог для просмотра примеров. В дальнейшем, когда примеры станут объемней, будут освещены способы ввода и вывода данных, но не на экран (скорее всего в файл). Вывод на экран — это сообщение отладки. Результат всегда пишется в файл. Такая вот позиция. Rubynovich 14:12, 1 июля 2006 (UTC)[ответить]

Кстати, по поводу окошка Dos. Чтобы оно не появлялось — поменяй расширение файла .rb на .rbw. Окно появляться не будет, но программа отработает. Чтобы сохранять вывод в файл, достаточно вставить в начало программы вот такую вот строку:

$stdout = File.open( __FILE__.gsub(/\.rbw?$/,'.txt'), 'w' ) 

Результат будет автоматом сваливаться в файл (название_программы.txt). При рассмотрении основ это неактуально. Используй irb или fxri (советую). Rubynovich 14:20, 1 июля 2006 (UTC)[ответить]

Кодировка исходного текста зависит от кодировки в системе по умолчанию, т.е. в Unix - KOI-8R, а в Windows - CP-1251. Со всякими UTF-8 и Unicode придется использовать конверторы типа iconv. Для 80% задач проблема кодировки неактуальна, а для RoR есть свои способы. Rubynovich 14:23, 1 июля 2006 (UTC)[ответить]

Блок != замыкание[править]

Rubynovich 18:55, 12 июня 2006 (UTC)[ответить]

Может комментарии в коде тоже подсвечивать?[править]

Заметил, что подчеркивание внутри кода стало выглядеть как небольшое изменение цвета. Можно настроить так, чтобы комментарии были серыми? Rubynovich 20:15, 27 июня 2006 (UTC)[ответить]

Я бы давно уже сделал богатую раскраску синтаксиса, если бы это вообще было возможно. Зачёркнутое светится потому, что оно помечено на уровне вики-текста страницы. Чтобы что-нить другое раскрасить, надо будеть выделять и его. Выходы:
  • Не трудиться и оставить всё как есть
  • Обрабатывать весь текст сценарием, берущим всё, что <code>...</code> и пропускающим это через какой-нить из существующих парсеров синтаксиса Руби, на выходе дающий тот же код, но размеченный примерно как <span class="KommeHTaPuj">#Это комментарий</span>.
  • Встроить в Викиучебник браузерный сценарий на JavaScript, делающий это же, но на стороне пользователя после загрузки страницы.
Мне больше всего люб первый вариант. :-) Ведь книга не столь популярна и закончена, чтобы каждый раз её полоскать обработчиком. Ramir 02:26, 29 июня 2006 (UTC)[ответить]
Подумаю над вторым вариантом. Но пока согласен и на первый. =) Rubynovich 14:38, 29 июня 2006 (UTC)[ответить]

Развитие событий: наши разработчики (Тим Старлинг) установили и проверили раскрасчик кодов.&nbsp:&nbsp:&nbsp:На тестовом сервере [1]. Ура! В ближайшие годы, возможно, они удосужатся пошевелить пальцем и на рабочем сервере. Ramir

Готово и запущено. Понемногу раскрасил сам, что делать с подчеркиваниями и ссылками на страницы - не знаю. Ссылка на строничко экстеншена Extension:SyntaxHighlight GeSHi Turkish 14:52, 20 июня 2007 (UTC)[ответить]

Ссылка на RDoc[править]

Посмотрел статью про Ruby в wikipedia и увидел замечательный шаблон {{RDoc|classes|Kernel|puts|M002975}}. Как его нам приспособить? Rubynovich 12:31, 18 июня 2006 (UTC)[ответить]

Вопрос важнее — «зачем». Англофоны пусть скопируют урл рукой. Не сто́ит морочиться со ссылкой на справочник в каждом упоминании встроенных классов. Да и важно, по-моему, чтоб авторам было удобней. Ramir 03:24, 20 июня 2006 (UTC)[ответить]
Если бы я знал на него ответ, то написал бы шаблон сам. =) Rubynovich 18:06, 20 июня 2006 (UTC)[ответить]
Нашел ответ! Когда перечисляются методы, которые нужно описать в справочнике, тогда удобно сделать ссылку на RDoc. Rubynovich 06:11, 24 июня 2006 (UTC)[ответить]

Перенос разделов[править]

  • Подразделы "Ортогональность", "Несвязность и закон Деметера" и "Безжалостное тестирование" скинул в Идеалогию.
  • Разграбил раздел Избранное с RubyNews.ru. --Rubynovich 19:01, 13 июня 2006 (UTC)[ответить]

Соглашение о стиле изложения[править]

Учебник отличается от справочника тем, что позволяет не только узнать список доступных методов, но и научиться ими правильно пользоваться. Отсюда несколько советов:

  • методы желательно описывать на примере решения задач;
  • рассматривать необходимо только наиболее часто встречающиеся в практике приемы и методы. Остальные методы будут доступны в справочнике;
  • подробного описания достойны методы, которые позволяют программировать в функциональном стиле;
  • главное не полнота материала, а его доступность для читателя.

Соглашение об именах[править]

Желательно придерживаться некоторых правил, иначе учебник будет похож на сборную солянку.

  1. Строки должны быть русскими (не латиница, а кирилица). Свой u3BpaT тоже буду исправлять, но только внутри строк.
  2. Счетчики итераторов должны быть англоязычными и говорить о своем значении или типе: array, book, event и т.д.
  3. Переменные, желательно называть русскими именами (npumep_1, npumep_2). Если это невозможно (например, 4ucJIo начинается с цифры, а предварять его _ — не красиво), то латиницей.
Как читателю и программеру, этот "кульзизопский" стиль именования мне категорически не нравится. Современный программер - даже полный чайник - обязан знать технический английский (а если не знает - изучать в процессе). Это промышленный стандарт. Кроме того, на расшифровку имен типа "cumBoJIbI" требуется больше времени, чем на стандартное "symbols". Не приведи БГ, если благодаря этой книге начнут размножаться чайники, копирующие этот стиль в свои программы :(((. Andrew Bronx 14:18, 17 июня 2006 (UTC)[ответить]
Полностью согласен, такой стиль вызывает ассоциации с журналом "Хакер", не более того. Ужасно смотрится мешанина букв в разных регистрах, когда "кириллица" чередуется с привычными операндами. Это даже хуже транслита. Я сомневаюсь, что люди, которые не понимают, что такое "array" начинают программировать с Ruby. 85.141.130.198
Привожу другой пример. Переменная maccuB гораздо ближе сердцу новичка, чем array. По своей практике знаю, что начинающие программисты напишут скорее massiv, чем array. Независимо от того, что было написано в учебнике, который они читали. А знание англ. языка у читателя означает, что он взял в руки не тот учебник. Лучше ему сразу читать ProgrammingRuby. К тому же, "кульзизопский" стиль именования превлекает внимание, что является немаловажным фактором во время обучения. Rubynovich 17:39, 17 июня 2006 (UTC)[ответить]
Про обязанность знать английский ты категорически неправ. Ramir 23:37, 17 июня 2006 (UTC)[ответить]
Программисты, блин, хреновы. Те, кто не понимают, что такое array, быстро этому научатся. if и each тоже собираетесь перевести на русский? КулСисОпскиЙ язык в учебнике по красивому языку - абсолютно недопустимое явление. Вы бы еще падонкафский язык для привлечения внимания употребляли. Вы, наверное, еще не встречали горе-исходники, где что-нибудь по-французски поименовано или по-итальянски. Та же штука и здесь. Oleg Andreev 19:23, 20 января 2007 (UTC)[ответить]
Поддерживаю. Мало того, что кульсисопский язык плохо читабелен, так он ещё и не согласуется со стандартным соглашением об именовании в Ruby. Если кто не знает, что есть такое соглашение —- читайте
«HenpaBuJIbHa9_nepemeHHa9» — это ужасно. «Только не мой моск!» 85.118.224.242 09:15, 10 марта 2007 (UTC)[ответить]
Спасибо. Именно благодаря этим дурацким названиям переменных я не стал читать этот мануал. И в обязательном порядке буду рекомендовать другим следовать этому примеру, не смотря на проделанную авторами работу. Нервные клетки не восстанавливаются. Приходит на ум пословица: "Хотели как лучше, а получилось как всегда..." 82.207.113.101 22:53, 3 марта 2008 (UTC)SBR[ответить]

Спасибо авторам) очень интересно было читать) свои программы пишу с нормальными переменными, знаю, что такое arrayYankovskyAndrey 12:45, 23 октября 2008 (UTC)[ответить]

Вопросы[править]

  1. Русские строки волапюком путают читателя, а при попытке набрать русский текст его встретит ParseError. Не лучше ли сразу пользоваться короткими формами по-английски?
  • Как показывает практика, после первой ошибки вида ParseError программист понимает, где собака зарыта. Тем более, это электронный учебник, здесь работает правило копировать/вставить. --Rubynovich 04:50, 12 июня 2006 (UTC)[ответить]
  1. Мне кажется, что про объекты и классы надо начинать пораньше
  • Опять же из практики. Для большинства задач дотаточно расширения существующих классов. А создание собственной иерархии надо обсуждать в рамках шаблонов проектирования.--Rubynovich 04:50, 12 июня 2006 (UTC)[ответить]

--Julik 19:31, 11 июня 2006 (UTC)[ответить]

Ответ на первый вопрос: нет, не лучше. Ramir 05:49, 12 июня 2006 (UTC)[ответить]

Главы, нуждающиеся в доработке[править]

Обратите внимание на ассоциативные массивы. --Rubynovich 12:09, 4 июня 2006 (UTC)[ответить]

Уважаемые писатели, когда описываете ассоциативные массивы, обратите внимание на стиль изложения главы про массивы. Многие методы в массивах отсутствуют умышленно, в виду их негативного влияния на неокрепшие умы или сугубо специального значения. Rubynovich 10:35, 11 июня 2006 (UTC)[ответить]
Итераторы, которые будут освещены в рамках ассоциативных массивов: .inject, .find_all (он же select), .sort.
Методы, которые будут освещены в рамках ассоциатиынх массивов: .rehash, .delete, .empty?, .key? (он же .include?) и .value?, .values_at, .invert, .size, .update (он же .merge), .shift, .to_a и .to_s, .values и .keys.
Для главы Справочник эти ограницения не действуют. Там должны присутствовать методы во всей полноте. Ориентироваться надо на версию 1.8. У кого нет книги Programming Ruby (вторая редакция), то пишите — вышлю. --Rubynovich 12:30, 11 июня 2006 (UTC)[ответить]
Я не вполне понимаю про Hash#shift - доки не говорят, откуда берется ключ если итерация по ключам может происходить в случайном порядке?--Julik 20:27, 11 июня 2006 (UTC)[ответить]
А он и берется в случайном порядке. Используется, когда надо свести хеш к нулевой длине. Самое интересное, что методов .push, .pop, и .unshift не наблюдается. =) Это как раз и говорит в пользу моего довода. Просто, очень часто используется запись ARGV.shift. В результате чего метод и стали так использовать в хешах. --Rubynovich 04:53, 12 июня 2006 (UTC)[ответить]

Оформление[править]

Обращаю внимание на способ богатого оформления тексташтампы (из-за отсутствия мыслей у википедийцев названные «шаблонами». Рубинович, вместо слова «важно» лучше действительно оформить слова как важное: {{Внимание|Пора обедать!}} превращается в

Ramir 16:24, 12 июня 2006 (UTC)[ответить]

Хммм... а ведь я догадывался. =) --Rubynovich 16:34, 12 июня 2006 (UTC)[ответить]

Обратите внимание, что перечёркивание кода, содержащего знаки вроде "=", может приводить к визуально неприятным накладкам (не знаю, во всех ли браузерах, но на моём IE это видно). Например, "=" на фоне перечёркивания можно принять за "-", т.к. одна из палок перекрывается страйком. Andrew Bronx 14:18, 17 июня 2006 (UTC)[ответить]

Подумаю над этим. Скорее всего знаки типа "=" просто будут исключаться из области перечеркивания. --Rubynovich 15:10, 17 июня 2006 (UTC)[ответить]
Подумал. Все останется так, как есть. Это связано с тем, что программы из книги будут копироваться через выделение кода. А там, уже можно взглянуть на код, как он есть. Rubynovich 17:42, 17 июня 2006 (UTC)[ответить]

Руби или Ruby?[править]

— спросил меня Rubynovich 16:19, 12 июня 2006 (UTC). Вопрос спорный, моё видение таково: «Руби», но местами оставлять Ruby, дабы поисковики находили. Места нужно оставлять соответствующие (например, «учебник по Ruby», «Ruby ... Vim» и т. п.). А обычно должно быть всё по-русски: легче читать, а причин за английский вариант, помимо его поисковости, нет, по-моему. Ramir 16:35, 12 июня 2006 (UTC)[ответить]

Пробовал найти учебник в поиковиках. Безрезультатно. Ссылку на него находит только так. Rubynovich 16:47, 12 июня 2006 (UTC)[ответить]
Google:учебник+Ruby (увы, мы там глубоко во втором десятке) и Google:учебник+Руби (второе место). «Яндекс» и другие не находят потому, что они бесполезная дрянь. Не вижу великой надобности прогибаться ни под Гугл, ни под бесполезную дрянь: кому нужно, найдут. Ramir 17:17, 12 июня 2006 (UTC)[ответить]
В Яндекс:учебник+Ruby мы первые, а в Яндекс:учебник+Руби нас нет и не предвидится. А насчет Google:учебник+Ruby информация несколько устарела (мы первые). Google:учебник+Руби — шестое место. Ничего не понимаю. =) Rubynovich 15:15, 17 июня 2006 (UTC)[ответить]
Обнаружил причину возросшей популярности учебника. Ramir -- respect! =) Rubynovich 15:30, 17 июня 2006 (UTC)[ответить]
Вышеупомянутая поисковая система начала индексировать Викиучебник только после того, как я месяц тому назад написал им жалобу. Ramir 23:39, 17 июня 2006 (UTC)[ответить]
А мне вот интересно, как правильно читается название языка по-русски. Руби, или всё же Раби? :)
Даже если бы в английском было иначе, по-русски — однозначно Руби. Увы ;-) Ramir

Перевод терминов[править]

  1. Секция Сглаживание массивов: думаю, "сглаживание" - плохой перевод для термина "flatten", т.к. моментально ассоциируется со сглаживанием данных, что есть совершенно другая задача. Предлагаю варианты: "развёртка" (как "развёртка куба"), "разравнивание", "сплющивание"... Andrew Bronx 14:18, 17 июня 2006 (UTC)[ответить]
Мне нравится определение "расплющивание", т.к. возникает множество правильных ассоциаций. Даже стишок придумать можно:
Коль размерностей не счесть,
У вашего массива,
Метод .flatten в Ruby есть,
Плющит он массивы.
--Rubynovich 14:45, 17 июня 2006 (UTC)[ответить]

Стилевые соображения[править]

Давайте обсуждим будущее учебника!

Примеры задач
и задачи примеров
[править]

Первое замечание Рубиновичу: уж слишком велика доля примеров с числами, кратностями и арифметическим сравнением. Надо бы побольше объектов классов np9lMoyroJlbHuK (с дочерним классом Pa3MblTblu_KBADPAT), gJluHHoe_SchynaJlze_uHonJlaHeTHorO_OCbMNHOGA, n9lTHO_oT_ZhblPAFA и подобных. В деле числа применяются для подсчёта, околичествливания чего-то, и не так часто. Числа скучны, их трудно вообразить, примеры с ними хуже запоминаются. Ramir 08:24, 24 июня 2006 (UTC)[ответить]

Насчет доли с числами, кратностями и арифметическими сравнениями. Насколько я тебя понял, тебе хочется других типов данным на месте чисел? Каких? Если базовых, то это только строки и массивы. Массивы смотреться не будут. Предлагаю использовать строки с образным содержанием (как твои последние правки). В реальном программировании, числа на третьем месте по частоте использования (после массивов и строк). Rubynovich 16:01, 24 июня 2006 (UTC)[ответить]
Во-первых, да, хотя бы так: строки образнее чисел, особенно такие, которые читатель сможет ассоциировать (в мозгу́) А во-вторых, создавать свои классы надо! Сначало ввести определение класса (начиная с простого, а потом — со сложной структурой и разнообразнейшими контролями доступа, примесями, метапрограммированием и так далее), затем его использовать, чтобы у читателя прочно тренировались ассоциативные связи между определениями в классе и тем, что объект делает потом. Ramir 22:32, 24 июня 2006 (UTC)[ответить]
До классов пока не дошел, но планировал поступить несколько иначе. Начать не с создания собственной иерархии, а с расширения встроеных классов. Просто чтобы читатель привык к мысли, что метод должен обязательно вызываться относительно чего-то. Потом выстроить ситуацию, в которой нецелессобразно производить расширение и ввести свой класс. В общем, план был такой. Rubynovich 18:23, 27 июня 2006 (UTC)[ответить]
Вот это разумно! Но ведь можно (и думаю, целесообразно) эту пружину-спираль вытянуть слегка вверх, дабы показать (отвлечённо от принципов строительства классов), что числа и строки — это лишь простейшее, что может быть. Исходная мысль вообще была лишь про то, что в примерах многовато чисел, которые плохо запоминаются. (хм... а может, я увлёкся мнемотехниками, картами мозга, эфирной медитацией и причёской кармы? :-) Ramir 20:34, 27 июня 2006 (UTC)[ответить]

→ → → Последовательность → → →
[править]

Преподавать «по спирали» полезно, но надо ещё сохранять полноту, законченность каждого описания и исключать возможность неверного понимания.

Плохо
когда сначала делается общее утверждение, а потом — ой! оказывается, что есть исключения или дополнения.
Хорошо
когда тема сначала освещается как бы второстепенно, как мимоходная добавка к другой теме (например, описывается эффект какого-то ранее неизвестного метода в данном случае), а потом уже, отдельной главой объясняется в фокусе. Ramir 08:24, 24 июня 2006 (UTC)[ответить]
Исключения и дополнения есть всегда, но если вывалить все исключения и дополнения на читателя, то у него просто крыша поедет. Замечено, что освоив базовые понятия и научившись пользоваться справочной литературой студенты самостоятельно начинают изучать предмет. Предполагалось создать учебник, который состоял бы из трех частей:
  1. описание базовых понятий (в два захода)
  2. описание работы с вводом-выводом и дополнительными классами из стандартной библиотеки
  3. описание работы с Ruby on Rails (в два захода)
Особенностью первого раздела является последовательность изложения. Цель — научить читателя ориентироваться в мире Ruby и решать задачки в учебном заведении. Второй раздел — это набор статей, которые описывают как работать со встроенными библиотеками. Изложение непоследовательное. Цель — дать навыки применения Ruby в практической деятельности. Третий раздел — для рельсоукладчиков. Есть идея подключить Дмитрия Сабанина к формированию этого раздела. Rubynovich
Подключить Дмитрия САБАНИНА обязательно! Всех других авторов русских книг о Рельсах — всех сюда! Ramir 00:06, 25 июня 2006 (UTC)[ответить]
Идея повествовать по спирали появилась, когда я рассказывал про массивы, а нужно было сделать ссылку на строки. Вот для этого и появилась вводная часть, в которой кратко рассказывается про то, что такое массивы, а что такое строки. Чтобы была возможность использовать их в последующих примерах. Кстати, отсюда и засилие примеров с числами (привычка). Rubynovich 16:21, 24 июня 2006 (UTC)[ответить]
Да, я преувеличиваю, если говорю, что надо в учебнике рассказывать про всё, но если всё хорошо простроить, то можно и написать про всё, и сберечь внимание читателя, — вот что я верю. А «принцип по спирали» — элементарная подстройка под людскую природу. Да и к тому же многое из первого, вводного, умелым программистам можно пропустить. Ramir 00:06, 25 июня 2006 (UTC)[ответить]

«Рубинович!
Что делать?»
[править]

Ты еси фюрер всех, кто хочет присоединиться к этому грандиозному делу — написать учебник по Руби! Так что поспеши сперва создать план учебника, пусть и изменимый, но план, по которому мы все вместе быстро всё напишем. Ramir 08:24, 24 июня 2006 (UTC)[ответить]

Ты определись: шалом или фюрер! =) Rubynovich 18:25, 24 июня 2006 (UTC)[ответить]

Ошибочка какая-то[править]

$ ruby
 moe_4ucJIo = 18
 mou_maccuB = [1,2,3,4]
 puts "Повторенье -- мать ученья. Мой массив = #{mou_maccuB.join(\",\")}"
 -:3: syntax error
 puts "Повторенье -- мать ученья. Мой массив = #{mou_maccuB.join(\",\")}"
                                                                  ^
$ ruby --version
 ruby 1.8.2 (2004-12-25) [i686-linux]
                  Greck 18:50, 31 июля 2006 (UTC)[ответить]
Опа... Об этом надо написать. Дело в том, что внутри вставки не надо экранировать кавычки.
 puts "Повторенье -- мать ученья. Мой массив = #{mou_maccuB.join(",")}"
Но в данном случае лучше поставить апострофы (чтобы не смущаться напрасно).
 puts "Повторенье -- мать ученья. Мой массив = #{mou_maccuB.join(',')}"
Rubynovich 16:27, 14 августа 2006 (UTC)[ответить]

Давайте разберем пример[править]

require 'net/http'

Net::HTTP.open('ru.wikibooks.org'){ |http|
   head, body = http.get('/wiki/Ruby')
}

Пример прекрасный, мне понравился...
Но, давайте предположим что будет делать новичок, поскольку я новичок, буду говорить как было со мной. Я взял аналогичный пример из net\http.rb и поступил с ним также как поступил бы с вашим примером.
1. создаем файл
2. складываем туда этот код
3. я хочу с ним как-то работать, например, как было в моем случае, я хотел распарсить страничку(получить оттуда число)
3.1
require 'net/http'

Net::HTTP.open('ru.wikibooks.org'){ |http|

  head, body = http.get('/wiki/Ruby')

}

... операции с переменной body

Сами понимаете, у меня ничего не получилось.Из-за использования блока {} переменнаые не выходили, до сих пор не знаю как правильно эти переменные оттуда выводить. Для диагностики и исправления этого недоразумения у меня ушло 3-4 часа, не смогу сказать точнее

я думаю, читабельнее было-бы написать примерно сделующее:
require 'net/http'
zapros = Net::HTTP.start('ru.wikibooks.org')
head,body = zapros.get('/wiki/Ruby')

1. строк на одну меньше
2. операции проще

  • Отвечаю на твой вопрос (Rubynovich):
head, body = Net::HTTP.open('ru.wikibooks.org'){ |http|
   http.get('/wiki/Ruby')
}
... операции с переменной body
Но лучше использовать open-uri, но до него пока руки не дошли.
require 'open-uri'
body = open('http://ru.wikibooks.org/wiki/Ruby'){ |http| http.read }

Разбиение на отдельные страницы[править]

Есть мысль разбить учебник на отдельные страницы для улучшения читабельности и уменьшения трафа активных правильщиков Что скажете?

Поддерживаю с уточнением: разделить следует так, чтоб каждый раздел был более-менее законченной частью общего учебного курса. Ramir 09:41, 18 июля 2007 (UTC)[ответить]
А как бы приделать ссылочку на скачивание полной версии, т.е. служебную страницу, на которой бы собиралась ПОЛНАЯ ВЕРСИЯ учебника (чтобы удобно было скачать на читалку и читать вдали от компьютера)

Нужна полная версия, которую не нужно было бы муторно собирать через коллектор! Как это сделать? Научите! 195.144.193.69 08:17, 20 сентября 2010 (UTC)[ответить]

Решение задач по массивам:[править]

одномерные

1.Вывести индексы массива в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность.

array = [2,5,1,3,7,11,8,3,2,0]
array2 = []
array.inject(0){
    |index, elem|
    array2<<[index,elem]
    index+1
}
puts array2.sort_by{|elem| elem[1]}.map{|elem| elem = elem[0]}*", "

Чувствую, что это плохое решение, но не могу понять как сделать лучше :( Еще подскажите, как можно получить доступ к индексу элемента. --TweeKane 16:11, 11 августа 2008 (UTC)[ответить]

вот вам решение покрасивше)

p (0..array.size-1).sort_by{|v| array[v]}
YankovskyAndrey 21:56, 23 октября 2008 (UTC)[ответить]

3.Найти все индексы, по которым располагается максимальный элемент.

 p ar = [6,3,-8,-9,-34,6,3,-2,6,-7,5]
 ar2=[]
 ar.inject(0){|ind, el| if el==ar.max # вот скажите мне он каждый раз вычисляет максимальный элемент?
   ar2.push(ind) 
 end
 ind + 1}
 p ar2
да, в таком коде каждый раз заново вычисляется максимальный элемент
3. более короткое решение
p ar = [6,3,-8,-9,-34,6,3,-2,6,-7,5]
max=ar.max
ar.each_index{|x| if ar[x]==max then puts "#{x}" end}
YankovskyAndrey 21:45, 21 октября 2008 (UTC)[ответить]

4.В массиве переставить в начало элементы, стоящие на четной позиции, а в конец -- стоящие на нечётной.

 p ar = [1,2,3,4,5,6,7,8,9,10,11,12]
 (0 .. ar.size/2-1).map{|ind| ar.push(ar.delete_at(ind))}
 p ar

одномерные целочисленные

1.Найти все элементы, большие среднего арифметического элементов.

 p ar = [1,2,3,4,5,6,7,8,9,10,11,12]
 p ar.find_all{|el| el>(ar.inject( 0 ){ |sum, el|   sum + el} / ar.size)}

тот-же вопрос: выражение(ср.арифметическое) во внешнем блоке вычисляется для каждого элемента? или где-то хранится как уже вычисленное?

--Stranger 04:42, 23 августа 2007 (UTC)[ответить]

Непонятный кусок о переменных[править]

maccuB
nepemeHHa9
gpyra9_nepemeHHa9
HenpaBuJIbHa9_nepemeHHa9   # неправильное имя. Начинается с прописной
3JIemeHT                   # неправильное имя. Начинается с цифры
3JIemeHT                   # а вот как можно
__                         # немного странное, но корректное имя переменной

Я совсем не понял смысла. Получается, "3JIemeHT" - это имя неправильное, так как начинается с цифры, а вот обозвать переменную как "3JIemeHT" - это можно, хотя имя точно такое же, хоть и "немного странное". А "черточка" в конце списка переменных, видимо, поставлена для фэн-шуя. :)

Да, и было бы неплохо, если бы каждое предложение в комментариях из этого блока начиналось с большой буквы и оканчивалось точкой. А то все сливается, и ничего не понятно. Alexander Markov 11:39, 23 ноября 2007 (UTC)[ответить]

Два знака подчеркивания (не "черточка" для фэн-шуя) - это странное, но корректное имя переменной (что и написано), а вот с переменной 3JIemeHT косяк - имя неправильное, вот только какой пример хотел поставить туда автор, непонятно. --91.146.46.20 09:37, 27 декабря 2007 (UTC)[ответить]
Вероятно переменная начинается с буквы З. --91.207.42.4 18:57, 19 сентября 2009 (UTC)[ответить]

Возможная ошибка[править]

Перенесено со страницы Викиучебник:Форум.

Ilya Voyager 09:24, 28 января 2008 (UTC)[ответить]

Цитата:"Сначала хеш упорядочивается по ключам, а потом, в случаях равнозначных ключей, — по значениям." Насколько известно, то в хешах не может быть одинаковых ключей как таковых...тогда какой смысл упорядочивать по значениям? Я клоню к тому, что не может быть "равнозначных ключей". Ссылка на статью: http://ru.wikibooks.org/wiki/Ruby#.D0.A3.D0.BF.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D1.85.D0.B5.D1.88.D0.B0 — Это сообщение написано 91.77.59.50 (обс) 19:34, 27 ноября 2007 (UTC)[ответить]

Разберемся с $kcode[править]

Чтобы избежать таких ситуаций следует поместить в начало программы следующий программный код (именно в нижнем регистре): $kcode = "utf-8"

В моем случае помогает только при написании в верхнем регистре, то есть $KCODE = "utf-8"
Очепятка? Или секрет какой есть? :) 80.240.211.103 18:58, 21 марта 2008 (UTC)[ответить]

О кириллице[править]

Я начал изучать Ruby и этот учебник оказался просто спасения, потому что в интернете крайне мало литературы на русском языке. Но мне кажется, что стоит внести ясность в проблему с употреблением кириллицы в программах. Я имею ввиду не ввод ее, а использование. Например, не будет работать как ожидается код: "Привет".size или "Как поживаешь?".upcase И что с этим делать совсем не очевидно.

Пока что я нашел для себя вот такое решение:

require 'rubygems'
require 'activesupport'
"Ура, кириллица".chars.upcase

Но этот метод не удобен тем, что работает как прокси.. Можете посоветовать более элегантное решение? --TweeKane 09:41, 11 августа 2008 (UTC)[ответить]

Вот немного более удобное решение: http://s7at1c.ru/работа-с-utf-8-в-ruby-или-берем-напильник-в-руки/. --MaGIc2laNTern 11:03, 19 октября 2011 (UTC)[ответить]

О примерах в разделе "метапрограммирование"[править]

Включите пожалуйста пример, решённый кстати, товарищем black_b0x - ом, ключ которого в следующем: вывести иерархию всех классов в Руби. Столько про это дело (иерархию) в предыдущих разделах, но давайте следовать стилю - есть вопрос, есть программа.

Bookman 05:08, 26 августа 2008 (UTC)Рожков Н.
80.93.187.201 23:23, 30 ноября 2008 (UTC)[ответить]

rubyclub.com.ua[править]

Я тоже был на rubyclub.com.ua. Этот сайт - подделка. Он построен с одной лишь целью - пиар. Поэтому считаю, что в викиучебнике, по крайней мере в русско-язычной не должно быть ссылки на этот сайт. --KirillPletnev 15:09, 25 июля 2009 (UTC)[ответить]

Оформление кода[править]

Приветствую. Такой вопрос: нельзя ли изменить отображение кода, написанного на Ruby? Хотелось бы, чтобы был увеличен размер шрифта. Сравните оформление кода здесь и на Википедии: на последней размер шрифта вполне приемлем, а здесь несколько мелковат. --Clearsight 07:00, 3 апреля 2011 (UTC)[ответить]

Почему не указан номер версии?[править]

если последнее общение в этом форуме датируется 2008 годом, то это версия 1.8

а на 2024 год уже вышла версия 3.2.3 Dun242 (обсуждение) 01:35, 13 марта 2024 (UTC)[ответить]

Укажите, если считаете нужным. И тут не форум - это обсуждение учебного материала, который на странице Ruby. Leksey (обсуждение) 17:28, 13 марта 2024 (UTC)[ответить]