CINXE.COM
Ruby by Example | No Starch Press
<!DOCTYPE html> <html lang="en" dir="ltr" xmlns:og="https://ogp.me/ns#"> <head> <link rel="profile" href="https://www.w3.org/1999/xhtml/vocab" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="shortcut icon" href="https://nostarch.com/sites/default/files/favicon.ico" type="image/vnd.microsoft.icon" /> <meta name="description" content="Ruby by Example shows you how to take advantage of Ruby as you explore Ruby's fundamental concepts in action." /> <meta name="generator" content="Drupal 7 (http://drupal.org)" /> <link rel="image_src" href="https://nostarch.com/sites/default/files/ruby_big.jpg" /> <link rel="canonical" href="https://nostarch.com/rubyex" /> <link rel="shortlink" href="https://nostarch.com/node/61" /> <meta property="og:type" content="article" /> <meta property="og:url" content="https://nostarch.com/rubyex" /> <meta property="og:title" content="Ruby by Example" /> <meta property="og:description" content="Ruby by Example shows you how to take advantage of Ruby as you explore Ruby's fundamental concepts in action." /> <meta property="og:updated_time" content="2024-08-22T08:06:09-07:00" /> <meta property="og:image:url" content="https://nostarch.com/sites/default/files/ruby_big.jpg" /> <meta property="og:image:secure_url" content="https://nostarch.com/sites/default/files/ruby_big.jpg" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:site" content="@nostarch" /> <meta name="twitter:url" content="https://nostarch.com/rubyex" /> <meta name="twitter:title" content="Ruby by Example" /> <meta name="twitter:description" content="Ruby by Example shows you how to take advantage of Ruby as you explore Ruby's fundamental concepts in action." /> <meta name="twitter:image" content="https://nostarch.com/sites/default/files/ruby_big.jpg" /> <meta property="product:price:amount" content="23.95" /> <meta property="product:price:currency" content="USD" /> <meta property="product:isbn" content="9781593271480" /> <meta property="article:published_time" content="2009-11-04T18:06:51-08:00" /> <meta property="article:modified_time" content="2024-08-22T08:06:09-07:00" /> <meta property="product:retailer_part_no" content="rubybyexample-E" /> <meta property="product:mfr_part_no" content="rubybyexample-E" /> <title>Ruby by Example | No Starch Press</title> <link type="text/css" rel="stylesheet" href="https://nostarch.com/sites/default/files/css/css_lQaZfjVpwP_oGNqdtWCSpJT1EMqXdMiU84ekLLxQnc4.css" media="all" /> <link type="text/css" rel="stylesheet" href="https://nostarch.com/sites/default/files/css/css_guSWpwqRBCVb2J7ivC8BaNuaPffCXmbkGB5xDBqKKu8.css" media="all" /> <link type="text/css" rel="stylesheet" href="https://nostarch.com/sites/default/files/css/css_Dw0rmhFX_owMmlf1HH5Y-_BnOHcMlkri1yMjYHD4ffs.css" media="all" /> <link type="text/css" rel="stylesheet" href="https://nostarch.com/sites/default/files/css/css_XJm3Wqia1GUjoI4j54duSLNZVR3Kxhbwy0s3UwuhhHg.css" media="all" /> <!-- HTML5 element support for IE6-8 --> <!--[if lt IE 9]> <script src="https://cdn.jsdelivr.net/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> <![endif]--> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> <script>window.jQuery || document.write("<script src='/sites/all/modules/contrib/jquery_update/replace/jquery/2.2/jquery.min.js'>\x3C/script>")</script> <script src="https://nostarch.com/misc/jquery-extend-3.4.0.js?v=2.2.4"></script> <script src="https://nostarch.com/misc/jquery-html-prefilter-3.5.0-backport.js?v=2.2.4"></script> <script src="https://nostarch.com/misc/jquery.once.js?v=1.2"></script> <script src="https://nostarch.com/misc/drupal.js?snqexe"></script> <script src="https://nostarch.com/sites/all/modules/contrib/jquery_update/js/jquery_browser.js?v=0.0.1"></script> <script src="https://nostarch.com/misc/form-single-submit.js?v=7.102"></script> <script src="https://nostarch.com/sites/all/modules/contrib/ubercart/uc_file/uc_file.js?snqexe"></script> <script src="https://nostarch.com/sites/all/libraries/colorbox/jquery.colorbox-min.js?snqexe"></script> <script src="https://nostarch.com/sites/all/modules/contrib/colorbox/js/colorbox.js?snqexe"></script> <script src="https://nostarch.com/sites/all/modules/contrib/colorbox/styles/plain/colorbox_style.js?snqexe"></script> <script src="https://nostarch.com/sites/all/modules/contrib/colorbox/js/colorbox_load.js?snqexe"></script> <script src="https://nostarch.com/sites/all/modules/contrib/colorbox/js/colorbox_inline.js?snqexe"></script> <script src="https://nostarch.com/sites/all/modules/contrib/ubercart/uc_cart/uc_cart_block.js?snqexe"></script> <script src="https://nostarch.com/sites/all/modules/contrib/google_analytics/googleanalytics.js?snqexe"></script> <script src="https://www.googletagmanager.com/gtag/js?id=UA-5027625-1"></script> <script>window.google_analytics_uacct = "UA-5027625-1";window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments)};gtag("js", new Date());gtag("set", "developer_id.dMDhkMT", true);gtag("config", "UA-5027625-1", {"groups":"default","anonymize_ip":true});gtag("config", "G-51XGZT9Y4H", {"groups":"default","anonymize_ip":true});</script> <script src="https://nostarch.com/sites/all/themes/nostarch/js/bootstrap.min.js?snqexe"></script> <script src="https://nostarch.com/sites/all/themes/nostarch/js/main.js?snqexe"></script> <script src="https://nostarch.com/sites/all/themes/nostarch/js/front_grid_height.js?snqexe"></script> <script>jQuery.extend(Drupal.settings, {"basePath":"\/","pathPrefix":"","setHasJsCookie":0,"ajaxPageState":{"theme":"nostarch","theme_token":"2LIbq86jWo5q9NuGZ-oiCsrTNFPDs5PIA4qKWhLA_I0","js":{"sites\/all\/modules\/contrib\/addthis\/addthis.js":1,"sites\/all\/libraries\/shariff\/shariff.min.js":1,"sites\/all\/themes\/contrib\/bootstrap\/js\/bootstrap.js":1,"\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/2.2.4\/jquery.min.js":1,"0":1,"misc\/jquery-extend-3.4.0.js":1,"misc\/jquery-html-prefilter-3.5.0-backport.js":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"sites\/all\/modules\/contrib\/jquery_update\/js\/jquery_browser.js":1,"misc\/form-single-submit.js":1,"sites\/all\/modules\/contrib\/ubercart\/uc_file\/uc_file.js":1,"sites\/all\/libraries\/colorbox\/jquery.colorbox-min.js":1,"sites\/all\/modules\/contrib\/colorbox\/js\/colorbox.js":1,"sites\/all\/modules\/contrib\/colorbox\/styles\/plain\/colorbox_style.js":1,"sites\/all\/modules\/contrib\/colorbox\/js\/colorbox_load.js":1,"sites\/all\/modules\/contrib\/colorbox\/js\/colorbox_inline.js":1,"sites\/all\/modules\/contrib\/ubercart\/uc_cart\/uc_cart_block.js":1,"sites\/all\/modules\/contrib\/google_analytics\/googleanalytics.js":1,"https:\/\/www.googletagmanager.com\/gtag\/js?id=UA-5027625-1":1,"1":1,"sites\/all\/themes\/nostarch\/js\/bootstrap.min.js":1,"sites\/all\/themes\/nostarch\/js\/main.js":1,"sites\/all\/themes\/nostarch\/js\/front_grid_height.js":1},"css":{"modules\/system\/system.base.css":1,"modules\/field\/theme\/field.css":1,"sites\/all\/modules\/contrib\/logintoboggan\/logintoboggan.css":1,"modules\/node\/node.css":1,"sites\/all\/modules\/contrib\/uc_fedex\/uc_fedex.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_file\/uc_file.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_order\/uc_order.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_product\/uc_product.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_store\/uc_store.css":1,"sites\/all\/modules\/contrib\/views\/css\/views.css":1,"sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.css":1,"sites\/all\/modules\/contrib\/uc_discounts_alt\/uc_discounts\/uc_discounts.css":1,"sites\/all\/modules\/contrib\/colorbox\/styles\/plain\/colorbox_style.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_cart\/uc_cart_block.css":1,"sites\/all\/libraries\/shariff\/shariff.complete.css":1,"sites\/all\/themes\/nostarch\/css\/en_styles.css":1,"sites\/all\/themes\/nostarch\/css\/custom.css":1,"sites\/all\/themes\/nostarch\/css\/bootstrap-3-vert-offset.css":1,"sites\/all\/themes\/nostarch\/css\/bootstrap-3-autoclear.css":1,"sites\/all\/themes\/nostarch\/css\/glyphicons.css":1}},"colorbox":{"opacity":"0.85","current":"{current} of {total}","previous":"\u00ab Prev","next":"Next \u00bb","close":"Close","maxWidth":"98%","maxHeight":"98%","fixed":true,"mobiledetect":true,"mobiledevicewidth":"480px","file_public_path":"\/sites\/default\/files","specificPagesDefaultValue":"admin*\nimagebrowser*\nimg_assist*\nimce*\nnode\/add\/*\nnode\/*\/edit\nprint\/*\nprintpdf\/*\nsystem\/ajax\nsystem\/ajax\/*"},"better_exposed_filters":{"views":{"topics":{"displays":{"block":{"filters":[]}}},"related_products":{"displays":{"block":{"filters":[]}}}}},"googleanalytics":{"account":["UA-5027625-1","G-51XGZT9Y4H"],"trackOutbound":1,"trackMailto":1,"trackDownload":1,"trackDownloadExtensions":"7z|aac|arc|arj|asf|asx|avi|bin|csv|doc(x|m)?|dot(x|m)?|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt(x|m)?|pot(x|m)?|pps(x|m)?|ppam|sld(x|m)?|thmx|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls(x|m|b)?|xlt(x|m)|xlam|xml|z|zip","trackColorbox":1},"urlIsAjaxTrusted":{"\/rubyex":true},"bootstrap":{"anchorsFix":"0","anchorsSmoothScrolling":"0","formHasError":1,"popoverEnabled":1,"popoverOptions":{"animation":1,"html":0,"placement":"right","selector":"","trigger":"click","triggerAutoclose":1,"title":"","content":"","delay":0,"container":"body"},"tooltipEnabled":1,"tooltipOptions":{"animation":1,"html":0,"placement":"auto left","selector":"","trigger":"hover focus","delay":0,"container":"body"}}});</script> </head> <body class="html not-front not-logged-in two-sidebars page-node page-node- page-node-61 node-type-product uc-product-node"> <div id="skip-link"> <a href="#main-content" class="element-invisible element-focusable">Skip to main content</a> </div> <header id="" class="header" role="banner" class="navbar navbar-default"> <div class="container"> <div class="row"> <nav role="navigation" class="navbar navbar-default visible-xs"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand text-uppercase" href="/"><img src="https://nostarch.com/sites/all/themes/nostarch/logo.png" alt="Home" class="img-responsive"/></a> </div> <div id="navbar" class="navbar-collapse collapse text-center"> <ul class="menu nav navbar-nav"><li class="first leaf"><a href="/catalog.htm" title="Explore our catalog">Catalog</a></li> <li class="leaf"><a href="https://nostarch.com/merchandise-0" title="Merchandise">Merchandise</a></li> <li class="leaf"><a href="/blog" title="The No Starch Press blog">Blog</a></li> <li class="leaf"><a href="https://nostarch.com/early-access-program" title="Media contact">Early Access</a></li> <li class="leaf"><a href="/writeforus" title="Submit a book proposal">Write for Us</a></li> <li class="leaf"><a href="/about" title="About No Starch Press">About Us</a></li> <li class="last leaf"><a href="/contactus" title="Contact Us">Contact Us</a></li> </ul> <div class="region region-navigation"> <section id="block-uc-cart-cart" class="block block-uc-cart clearfix"> <h2 class="block-title"><a href="/cart"><span class="cart-block-icon-empty" title="View your shopping cart."></span></a><span class="cart-block-title-bar" title="Show/hide shopping cart contents.">Shopping cart<span class="cart-block-arrow arrow-down"></span></span></h2> <p class="cart-block-items collapsed uc-cart-empty">There are no products in your shopping cart.</p><table class="cart-block-summary"><tbody><tr><td class="cart-block-summary-items"><span class="num-items">0</span> Items</td><td class="cart-block-summary-total"><label>Total:</label> <span class="uc-price">$0.00</span></td></tr></tbody></table> </section> <section id="block-search-api-page-site-search" class="block block-search-api-page clearfix"> <form action="/rubyex" method="post" id="search-api-page-search-form-site-search" accept-charset="UTF-8"><div><div class="form-item form-item-keys-2 form-type-textfield form-group"><input placeholder="Search" class="form-control form-text" type="text" id="edit-keys-2" name="keys_2" value="" size="15" maxlength="128" /> <label class="control-label element-invisible" for="edit-keys-2">Enter your keywords</label> </div><input type="hidden" name="id" value="2" /> <button class="icon glyphicon glyphicon-search btn-primary form-control btn form-submit" type="submit" id="edit-submit-2" name="op" value=""></button> <input type="hidden" name="form_build_id" value="form-mhYfZ1auo-S0CcvA9xiFYFaIT0DBspsX1cb-JV-sSjE" /> <input type="hidden" name="form_id" value="search_api_page_search_form_site_search" /> </div></form> </section> </div> </div> </nav> <div class="navbar-header"> <div class="logo-wrapper col-sm-6 hidden-xs"> <a class="logo navbar-btn pull-left" href="/" title="Home"> <img src="https://nostarch.com/sites/all/themes/nostarch/logo.png" alt="Home" class="img-responsive"/> </a> </div> <div class="logo-wrapper col-sm-6 hidden-xs"> <div class="region region-navigation"> <div class="region region-navigation"> <section id="block-uc-cart-cart" class="block block-uc-cart clearfix"> <h2 class="block-title"><a href="/cart"><span class="cart-block-icon-empty" title="View your shopping cart."></span></a><span class="cart-block-title-bar" title="Show/hide shopping cart contents.">Shopping cart<span class="cart-block-arrow arrow-down"></span></span></h2> <p class="cart-block-items collapsed uc-cart-empty">There are no products in your shopping cart.</p><table class="cart-block-summary"><tbody><tr><td class="cart-block-summary-items"><span class="num-items">0</span> Items</td><td class="cart-block-summary-total"><label>Total:</label> <span class="uc-price">$0.00</span></td></tr></tbody></table> </section> <section id="block-search-api-page-site-search" class="block block-search-api-page clearfix"> <form action="/rubyex" method="post" id="search-api-page-search-form-site-search" accept-charset="UTF-8"><div><div class="form-item form-item-keys-2 form-type-textfield form-group"><input placeholder="Search" class="form-control form-text" type="text" id="edit-keys-2" name="keys_2" value="" size="15" maxlength="128" /> <label class="control-label element-invisible" for="edit-keys-2">Enter your keywords</label> </div><input type="hidden" name="id" value="2" /> <button class="icon glyphicon glyphicon-search btn-primary form-control btn form-submit" type="submit" id="edit-submit-2" name="op" value=""></button> <input type="hidden" name="form_build_id" value="form-mhYfZ1auo-S0CcvA9xiFYFaIT0DBspsX1cb-JV-sSjE" /> <input type="hidden" name="form_id" value="search_api_page_search_form_site_search" /> </div></form> </section> </div> </div> </div> </div> </div> </div> <div class="container"> <div class="row"> <div class="navbar-collapse collapse"> <nav role="navigation"> <ul class="menu nav navbar-nav"><ul class="menu nav navbar-nav"><li class="first leaf"><a href="/catalog.htm" title="Explore our catalog">Catalog</a></li> <li class="leaf"><a href="https://nostarch.com/merchandise-0" title="Merchandise">Merchandise</a></li> <li class="leaf"><a href="/blog" title="The No Starch Press blog">Blog</a></li> <li class="leaf"><a href="https://nostarch.com/early-access-program" title="Media contact">Early Access</a></li> <li class="leaf"><a href="/writeforus" title="Submit a book proposal">Write for Us</a></li> <li class="leaf"><a href="/about" title="About No Starch Press">About Us</a></li> <li class="last leaf"><a href="/contactus" title="Contact Us">Contact Us</a></li> </ul></ul> </nav> </div> </div> </div> </header> <div class="main-container container"> <header role="banner" id="page-header"> <div class="region region-header"> <section id="block-block-155" class="block block-block clearfix"> <!-- updated March 2019 SB --><style> <!--/*--><![CDATA[/* ><!--*/ .image_full { max-width: 95%; } .image_mobile { max-width: 95%; } @media (max-width: 767px) { .image_full { display: none; } } @media (min-width: 768px) { .image_mobile { display: none; } } /*--><!]]>*/ </style><div id="banner"> <center><br /> <a><br /> <img src="images/banners/BFWebsiteBanner.png" class="image_full" /><br /> <img src="/images/banners/BFWebsiteBanner.png" class="image_mobile" /><br /> </a><br /> </center> </div> </section> </div> </header> <!-- /#page-header --> <div class="row"> <aside class="col-sm-3" role="complementary"> <div class="region region-sidebar-first well"> <section id="block-views-topics-block" class="block block-views clearfix"> <button class="btn btn-primary btn-block visible-xs vert-offset-top-2" data-toggle="collapse" data-target="#topics"><span class="glyphicon glyphicon-menu-down pull-left"></span> <span class="btn-text">Topics</span><span class="glyphicon glyphicon-menu-down pull-right"></span></button> <h2 class="block-title hidden-xs">Topics</h2> <div id="topics" class="view-content collapse dont-collapse animateCollapse"> <div class="view view-topics view-id-topics view-display-id-block view-dom-id-03e368239cfe1fe99efa6243489b9781"> <div class="view-content"> <div class="item-list"> <ul> <li class="views-row views-row-1 views-row-odd views-row-first"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/art-photography-design">Art & Design</a></span> </div></li> <li class="views-row views-row-2 views-row-even"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/general-computing">General Computing</a></span> </div></li> <li class="views-row views-row-3 views-row-odd"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/security">Hacking & Computer Security</a></span> </div></li> <li class="views-row views-row-4 views-row-even"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/hardware-and-diy">Hardware / DIY</a></span> </div></li> <li class="views-row views-row-5 views-row-odd"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/kids">Kids</a></span> </div></li> <li class="views-row views-row-6 views-row-even"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/lego">LEGO®</a></span> </div></li> <li class="views-row views-row-7 views-row-odd"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/linux-bsd-unix">Linux & BSD</a></span> </div></li> <li class="views-row views-row-8 views-row-even"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/manga">Manga</a></span> </div></li> <li class="views-row views-row-9 views-row-odd"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/programming">Programming</a></span> </div></li> <li class="views-row views-row-10 views-row-even"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/python">Python</a></span> </div></li> <li class="views-row views-row-11 views-row-odd"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/rforall">R for All</a></span> </div></li> <li class="views-row views-row-12 views-row-even"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/science-math">Science & Math</a></span> </div></li> <li class="views-row views-row-13 views-row-odd"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/scratch">Scratch</a></span> </div></li> <li class="views-row views-row-14 views-row-even"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/system-administration">System Administration</a></span> </div></li> <li class="views-row views-row-15 views-row-odd views-row-last"> <div class="views-field views-field-name"> <span class="field-content"><a href="/catalog/early-access">Early Access</a></span> </div></li> </ul></div> </div> <div class="view-footer"> <style> <!--/*--><![CDATA[/* ><!--*/ .view-topics .item-list a {font-weight: bold;} .view-topics ul {padding-left: 20px;} /*--><!]]>*/ </style> </div> </div> </div> </section><section id="block-block-12" class="block block-block clearfix"> <div class="rounded_border_block"><span style="font-family:Arial,Helvetica,sans-serif"><strong><span style="font-size:12px"><span style="color:#c0392b"><a href="https://nostarch.com/about_ebooks.htm">FREE ebook edition with every print book purchased from nostarch.com!</a></span></span></strong></span></div> <p class="rtecenter"><span style="font-size:22px">+</span></p> <div class="rounded_border_block"><span style="font-family:Arial,Helvetica,sans-serif"><strong><span style="font-size:12px"><a href="https://nostarch.com/early-access-program"><span style="color:#c0392b">EARLY ACCESS lets you read full chapters months before a title's release date!</span></a></span></strong></span></div> </section> <section id="block-nostarch-custom-login-block" class="block block-nostarch-customclearfix"> <h2 class="block-title">User login</h2> <ul> <li><a href="/user">Log in</a></a></li> <li><a href="/user/register">Create account</a></a></li> </ul> </section> <section id="block-block-78" class="block block-block clearfix"> <script data-account="eeqOpWOUyZ" src="https://cdn.userway.org/widget.js"></script> </section> </div> </aside> <!-- /#sidebar-first --> <section class="col-sm-6" style=""> <a id="main-content"></a> <div class="region region-content"> <section id="block-system-main" class="block block-system clearfix"> <div class="ds-1col node node-product node-promoted view-mode-full clearfix"> <div class=""> <div class="field field-name-field-image-cache field-type-image field-label-hidden"><div class="field-items"><div class="field-item even"><div class="product-image"><div class="main-product-image"><a href="https://nostarch.com/sites/default/files/styles/uc_product_full/public/ruby_big.jpg?itok=tvT5GYRW" title="Ruby by Example" class="colorbox" rel="uc_image_0"><img class="img-responsive" src="https://nostarch.com/sites/default/files/styles/uc_product/public/ruby_big.jpg?itok=fai2KwLP" alt="Ruby by Example" title="Ruby by Example" /></a></div></div></div></div></div><div class="field field-name-entity-title field-type-ds field-label-hidden"><div class="field-items"><div class="field-item even"><h1 class="page-header">Ruby by Example</h1></div></div></div><div class="field field-name-field-subtitle field-type-text field-label-hidden"><div class="field-items"><div class="field-item even">Concepts and Code</div></div></div><div class="field field-name-field-author field-type-text field-label-hidden"><div class="field-items"><div class="field-item even">by Kevin C. Baird</div></div></div><div class="field field-name-released-date field-type-ds field-label-hidden"><div class="field-items"><div class="field-item even">June 2007, 312 pp.</div></div></div><div class="field field-name-field-isbn13 field-type-text field-label-inline clearfix clearfix"><div class="field-label">ISBN-13: </div><div class="field-items"><div class="field-item even">9781593271480</div></div></div><div class="add-to-cart"><form action="/rubyex" method="post" id="uc-product-add-to-cart-form-61" accept-charset="UTF-8"><div><div id="uc_product_add_to_cart_form-61-attributes" class="attributes"><div class="attribute attribute-1 odd"><div class="form-item form-item-attributes-1 form-type-radios form-group"><div id="edit-attributes-1" class="form-radios"><div class="form-item form-item-attributes-1 form-type-radio radio"> <label class="control-label" for="edit-attributes-1-2"><input type="radio" id="edit-attributes-1-2" name="attributes[1]" value="2" checked="checked" class="form-radio" />Ebook (PDF, Mobi, and ePub), $23.95</label> </div></div></div></div></div><input type="hidden" name="qty" value="1" /> <input type="hidden" name="form_build_id" value="form-KjtU1fG-QB6DxT0pTWW7DBO8cn5UwoNqttMsW9eVBeU" /> <input type="hidden" name="form_id" value="uc_product_add_to_cart_form_61" /> <div class="form-actions form-wrapper form-group" id="edit-actions"><button class="node-add-to-cart btn btn-success form-submit icon-before" type="submit" id="edit-submit-61" name="op" value="Add to cart"><span class="icon glyphicon glyphicon-plus" aria-hidden="true"></span> Add to cart</button> </div></div></form></div><div class="field field-name-product-menu field-type-ds field-label-hidden"><div class="field-items"><div class="field-item even"><div class="menu-wrapper"><ul class="menu nav"><li><a href="#content">Contents</a></li><li><a href="#reviews">Reviews</a></li><li><a href="#updates">Updates</a></li></ul></div></div></div></div><div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><ul> <li><u><a href="/download/ruby_ch06.pdf">Download Chapter 6: Functionalism with Blocks and Procs</a></u></li> <li>Download Ruby by Example's source code files here: <u><a href="/download/RBE_scripts.zip">.zip</a> <a href="/download/RBE_scripts.tar.bz2">.bz2</a></u></li> <li>Download the Ruby by Example Rails Application here: <u><a href="/download/RBE_Rails_files.zip">.zip</a> <a href="/download/RBE_Rails_files.tar.bz2">.bz2</a></u></li> </ul> <p>There may be no better way to learn how to program than by dissecting real, representative examples written in your language of choice. <em>Ruby by Example</em> analyzes a series of Ruby scripts, examining how the code works, explaining the concepts it illustrates, and showing how to modify it to suit your needs. Baird's examples demonstrate key features of the language (such as inheritance, encapsulation, higher-order functions, and recursion), while simultaneously solving difficult problems (such as validating XML, creating a bilingual program, and creating command-line interfaces). Each chapter builds upon the previous, and each key concept is highlighted in the margin to make it easier for you to navigate the book.</p> <p>You'll learn how to:</p> <ul> <li>Use the interactive Ruby shell (irb) to learn key features of the language</li> <li>Extend Ruby using RubyGems, the Ruby package manager</li> <li>Create numerical utilities, as well as utilities that process and analyze HTML/XML</li> <li>Implement purely functional and metaprogramming techniques to save time and effort</li> <li>Optimize, profile, and test your code to make sure that it not only does its job, but does it well</li> <li>Create web applications using Rails</li> </ul> <p>Ruby is the fastest growing programming language today, and for good reason: Its elegant syntax and readable code make for prolific and happy programmers. But it can be difficult to understand and implement without a little help. Ruby by Example shows you how to take advantage of Ruby as you explore Ruby's fundamental concepts in action.</p> </div></div></div><div class="field field-name-field-author-bio field-type-text-long field-label-abovec"><div class="field-label">Author Bio </div><div class="field-items"><div class="field-item even"><p><b>Kevin C. Baird</b> received his Ph.D. from the State University of New York at Buffalo. He originally wrote his dissertation in Python but rewrote the project after discovering Ruby, and he hasn't looked back since. He has presented at RubyConf and written articles for <i>Linux Journal</i>, <i>Music & Computers</i> magazine, and the New Interfaces for Musical Expression conference proceedings.</p> </div></div></div><div class="field field-name-field-toc field-type-text-long field-label-abovec" id="content"><div class="field-label">Table of contents </div><div class="field-items"><div class="field-item even"><p><b>Introduction:</b> What is Ruby?<br /> <b>Chapter 1:</b> Interactive Ruby and the Ruby Environment<br /> <b>Chapter 2:</b> Amusements and Simple Utilities<br /> <b>Chapter 3:</b> Programmer Utilities<br /> <b>Chapter 4:</b> Text Manipulation<br /> <b>Chapter 5:</b> Number Utilities<br /> <b>Chapter 6:</b> Functionalism with Blocks and Procs<br /> <b>Chapter 7:</b> Using, Optimizing, and Testing Functional Techniques<br /> <b>Chapter 8:</b> HTML and XML Tools<br /> <b>Chapter 9:</b> More Complex Utilities and Tricks Part I<br /> <b>Chapter 10:</b> More Complex Utilities and Tricks Part II<br /> <b>Chapter 11:</b> CGI and the Web<br /> <b>Chapter12:</b> RubyGems and Rails Preparation<br /> <b>Chapter 13:</b> A Simple Rails Project<br /> <b>Appendix:</b> How Does Ruby Compare to Other Languages?<br /> <b>Index</b></p> <p>View the detailed <a href="/download/ruby_toc.pdf" target="new">Table of Contents </a> (PDF)<br /> View the <a href="/download/ruby_index.pdf" target="new">Index</a> (PDF)</p> </div></div></div><div class="field field-name-field-reviews field-type-text-long field-label-abovec" id="reviews"><div class="field-label">Reviews </div><div class="field-items"><div class="field-item even"><p>"All told, [Ruby by Example] is yet another great book from No Starch Press. I enjoyed reading it, and I sharpened my Ruby skills along the way."<br /> —<b>LinuxWorld</b> (<a href="http://www.linuxworld.com/news/2007/091101-ruby-by-example.html?page=1" target="new">Read More</a>)</p> <p>"Regardless of your leanings or preferences, if you believe learning Ruby is in your future, pick up a copy of this book. You'll start acquiring hands-on experience from the very beginning."<br /> —<b>Linux Magazine</b></p> <p>Kevin Baird, author of <a href="ruby.htm">Ruby by Example</a>, talks with <b>Dr. Dobb's Journal</b> about the Ruby language and its place among other high-level scripting languages.<br /> <a href="http://drdobbs.com/web-development/201200865">Click here</a> to listen to the podcast.</p> <p>"The real subject matter [of Ruby by Example] is an introduction to Ruby from a functional programming perspective. This is a huge bonus. There are many books about Ruby that emphasize its OO features, but too few with a clear, succinct, powerful approach to functional programming."<br /> —<b>Giles Bowkett</b> (<a href="https://gilesbowkett.blogspot.com/2007/07/ruby-by-example-functional-programming.html" target="new">Read More</a>)</p> <p>"The book is aimed at being immediately accessible to all levels of Ruby programmers, however it has a very interesting slant towards the often overlooked functional programming strengths of Ruby. If you love your scripting languages served with a burst of lambdas and proc objects, or you're a fan of Haskell and Lisp, this book is for you."<br /> —<b>LinuxSecurity.com</b> (<a href="http://www.linuxsecurity.com/content/view/128840/171/" target="new">Read More</a>)</p> <p>"If you're looking for a good book to help build your Ruby muscles, this is a good one to grab."<br /> —<b>Pat Eyler</b> (<a href="https://on-ruby.blogspot.com/2007/05/ruby-by-example-no-starch-press.html" target="new">Read More</a>)</p> <p>"There is something to be said for Baird's 'let's dive in and try it out' approach. If you want to get quickly started with some hands-on Ruby coding, Ruby By Example is the way to go."<br /> —<b>bitwise magazine</b> (<a href="http://www.bitwisemag.com/2/Ruby-by-Example-Concepts-and-Code" target="new">Read More</a>)</p> <p>"This book is an excellent resource for improving one's understanding of Ruby and using it more effectively."<br /> —<b>Major Keary, Book News</b></p> <p>"If you've already got some programming experience under your belt and are searching for a book that'll get you up to speed with Ruby very quickly, I strongly recommend Ruby by Example (written by Kevin Baird and published by No Starch Press, whose books on coding have impressed me)."<br /> —<b>Global Nerdy</b> (<a href="http://globalnerdy.com/2007/10/31/quick-book-review-ruby-by-example/" target="new">Read More</a>)</p> </div></div></div><div class="field field-name-field-updates field-type-text-long field-label-abovec" id="updates"><div class="field-label">Updates </div><div class="field-items"><div class="field-item even"><p><b>Page 101:</b><br /> The program <em>make_incrementer.rb</em> contains an error. Line 22, which reads </p> <p><code>incrementer_proc.call(other_addend) + "\n"</code></p> <p>should read</p> <p><code>incrementer_proc.call(other_addend).to_s + "\n"</code></p> <p><b>Page 106</b> should read:<br /> "blocks are akin to 'partial' or 'unborn' Procs and need the lambda method to be made into full fledged Procs"</p> <p>instead of:</p> <p>"blocks are akin to 'partial' or 'unborn' blocks and need the lambda method to be made into full fledged Procs"</p> <p><b>Page 130</b> should read:<br /> "Our tests showed that the simple fibonacci1.rb took about 6.20 seconds to run 5 successive operations of calling fib on the number 30."</p> <p>instead of:</p> <p>"Our tests showed that the simple fibonacci1.rb took about 6.20 seconds to run 30 consecutive operations of calling fib on the numbers from one to five."</p> <p>Script Update: Some users on Windows have experienced difficulty with the understand_args? method in simple_cli.rb from script #7, wherein the default condition is not triggered. If you experience this problem, try replacing the line</p> <p><code>OPTIONS.keys.any? { |key| OPTIONS[key].include?(args[0])</code></p> <p>with</p> <p><code>(not args[0]) || OPTIONS.keys.any? { |key| OPTIONS[key].include?(args[0]) }<code></code></code></p> <p>Thanks to Gene Temple for finding this bug and proposing a solution.</p> <p>File Update: The original radio_player2.rb script has a small bug that reports incorrect start times for the files. Note: The .zip and .bz2 archives on the main page were updated to include this file on 9/19/07.</p> <p><b>Page 90</b>, "The Results":<br /> The phrase "returned value from output_rates..." should read "returned value from puts"</p> <p><b>Page 131</b>, IRB Example:<br /> The period after 'wall.empty?' should be removed in the execution example.</p> <p><b>Page 248</b>, under "Dissecting the ApplicationHelper":<br /> Edit app/helpers/application.rb to match the following:" should read, "Edit app/helpers/application_helper.rb to match the following:"</p> <p><b>Page 257:</b><br /> In the last sentence under "Using CSS," the show.css stylesheet is mistakenly called public.css. The sentence should read, "The stylesheets master.css, show.css, and index.css are available for download at this book's website." </p> </div></div></div> </div> </div> </section> <section id="block-shariff-shariff-block" class="block block-shariff clearfix"> <div class="shariff" data-services="["facebook","print","twitter"]" data-theme="colored" data-orientation="horizontal" data-twitter-via="nostarch" data-lang="en"></div> </section> </div> </section> <aside class="col-sm-3" role="complementary"> <div class="region region-sidebar-second"> <section id="block-system-navigation" class="block block-system block-menu clearfix"> <h2 class="block-title">Navigation</h2> <ul class="menu nav"><li class="first last leaf"><a href="/user" title="">My account</a></li> </ul> </section> <section id="block-block-52" class="block block-block clearfix"> <p><a href="/mailchimp/subscribe">Want sweet deals? <br />Sign up for our newsletter.</a></p> </section> <section id="block-views-related-products-block" class="block block-views clearfix"> <h2 class="block-title">You might also like...</h2> <div class="view view-related-products view-id-related_products view-display-id-block auto-clear view-dom-id-205a2a8bbefe631e7fcbeb15644ad930"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first col-xs-6 col-sm-6 col-md-12"> <div class="views-field views-field-field-image-cache"> <div class="field-content"><a href="/writing-c-compiler"><img class="img-responsive" src="https://nostarch.com/sites/default/files/styles/product/public/Writing_a_C_Compilercover.jpg?itok=INl0egUw" width="90" height="119" alt="Writing a C Compiler Cover" title="Writing a C Compiler Cover" /></a></div> </div> </div> <div class="views-row views-row-2 views-row-even col-xs-6 col-sm-6 col-md-12"> <div class="views-field views-field-field-image-cache"> <div class="field-content"><a href="/artofr.htm"><img class="img-responsive" src="https://nostarch.com/sites/default/files/styles/product/public/R_cvr_front.png?itok=c8tJlcy5" width="90" height="119" alt="The Art of R Programming" title="The Art of R Programming" /></a></div> </div> </div> <div class="views-row views-row-3 views-row-odd col-xs-6 col-sm-6 col-md-12"> <div class="views-field views-field-field-image-cache"> <div class="field-content"><a href="/writegreatcode2_2"><img class="img-responsive" src="https://nostarch.com/sites/default/files/styles/product/public/wgc-v02_front_v02.png?itok=89gsKAm4" width="90" height="119" alt="Write Great Code, Volume 2, 2nd Edition Cover" title="Write Great Code, Volume 2, 2nd Edition Cover" /></a></div> </div> </div> <div class="views-row views-row-4 views-row-even col-xs-6 col-sm-6 col-md-12"> <div class="views-field views-field-field-image-cache"> <div class="field-content"><a href="/realmofracket.htm"><img class="img-responsive" src="https://nostarch.com/sites/default/files/styles/product/public/racket_cover_web.png?itok=0SBFMPYo" width="90" height="119" alt="Realm of Racket" title="Realm of Racket" /></a></div> </div> </div> <div class="views-row views-row-5 views-row-odd col-xs-6 col-sm-6 col-md-12"> <div class="views-field views-field-field-image-cache"> <div class="field-content"><a href="/pythononeliners"><img class="img-responsive" src="https://nostarch.com/sites/default/files/styles/product/public/POL_frontcvr_final.png?itok=JJWTvMS7" width="90" height="119" alt="Python One-Liners" title="Python One-Liners" /></a></div> </div> </div> <div class="views-row views-row-6 views-row-even views-row-last col-xs-6 col-sm-6 col-md-12"> <div class="views-field views-field-field-image-cache"> <div class="field-content"><a href="/superscratch3"><img class="img-responsive" src="https://nostarch.com/sites/default/files/styles/product/public/SSPA3_cvr_01.jpg?itok=Kuzzoz-m" width="90" height="127" alt="Super Scratch Programming Adventure! (Scratch 3)" title="Super Scratch Programming Adventure! (Scratch 3)" /></a></div> </div> </div> </div> </div> </section> </div> </aside> <!-- /#sidebar-second --> </div> </div> <footer class="footer container"> <div class="region region-footer"> <section id="block-block-16" class="block block-block clearfix"> <div id="footer-links"> <br> <a class="footer-links" href="/about.htm">About Us</a> <span class="footer-divider">|</span> <a class="footer-links" href="/Jobs.htm">Jobs!</a> <span class="footer-divider">|</span> <a class="footer-links" href="/distribution.htm">Sales and Distribution</a> <span class="footer-divider">|</span> <a class="footer-links" href="/rights">Rights</a> <span class="footer-divider">|</span> <a class="footer-links" href="/media.htm">Media</a> <span class="footer-divider">|</span> <a class="footer-links" href="/academic.htm">Academic Requests</a> <span class="footer-divider">|</span> <a class="footer-links" href="/conferences.htm">Conferences</a> <span class="footer-divider">|</span> <a class="footer-links" href="/orderfaq.htm">FAQ</a> <span class="footer-divider">|</span> <a class="footer-links" href="/contactus">Contact Us</a> <span class="footer-divider">|</span> <a class="footer-links" href="/writeforus">Write for Us</a> <span class="footer-divider">|</span> <a class="footer-links" href="/privacypolicy.htm">Privacy</a> </div> </section> <section id="block-nostarch-custom-custom-footer-copyright" class="block block-nostarch-custom clearfix"> <div class="block-block"> <p>Copyright 2024. No Starch Press, Inc</p> </div> </section> </div> </footer> <script src="https://nostarch.com/sites/all/modules/contrib/addthis/addthis.js?snqexe"></script> <script src="https://nostarch.com/sites/all/libraries/shariff/shariff.min.js?snqexe"></script> <script src="https://nostarch.com/sites/all/themes/contrib/bootstrap/js/bootstrap.js?snqexe"></script> <!-- Reddit Pixel --> <script> !function(w,d){if(!w.rdt){var p=w.rdt=function(){p.sendEvent?p.sendEvent.apply(p,arguments):p.callQueue.push(arguments)};p.callQueue=[];var t=d.createElement("script");t.src="https://www.redditstatic.com/ads/pixel.js",t.async=!0;var s=d.getElementsByTagName("script")[0];s.parentNode.insertBefore(t,s)}}(window,document);rdt('init','t2_6acpsf9y');rdt('track', 'PageVisit'); </script> <!-- DO NOT MODIFY UNLESS TO REPLACE A USER IDENTIFIER --> <!-- End Reddit Pixel --> <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8ebd5801fbdf464f',t:'MTczMzE2Mzc2MS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body> </html>