Credit: Thinkstock In the world of programming languages, sometimes you don’t need the overhead and performance of Java, C#, C++ and other power tools. Sometimes a scripting language, or Swiss army knife, will do. Of Perl, Python and Ruby, only one was built from the ground up to combine scripting with object-oriented programming. If you don’t know one of them, let’s start with Ruby. (If you know Perl or Python, don’t worry; that will make Ruby even easier to learn.) [ Analysis: 6 Emerging Programming Languages Career-Minded Developers Should Learn ] SUBSCRIBE TO OUR NEWSLETTER From our editors straight to your inbox Get started by entering your email address below. Please enter a valid email address Subscribe [ More: Top 10 Programming Skills That Will Get You Hired ] In this article, we’ll cover how to install and run a Ruby project, as well as the fundamentals of Ruby syntax and style. You’ll leave knowing how to run programs to do simple file I/O or Web access – and it will take about the length of a lunch break. Getting Started With Ruby Right Now You can download an open-source Ruby interpreter on ruby-lang.org. After getting the installer, let’s create a program called hello.rb in a text editor. Here’s the code: print “What is your name? ” name = gets name = name.chomp() #removes the CRLF from name if name == “cheesy” puts “You don’t need this tutorial!” else puts “Hello ” + name end The code looks a bit like BASIC – and, to an extent, it might be. There are no parenthesis unless you want them, no semi-colons at the end of the line and, though curly braces can enclose a block, we generally use do/end. A Bit About Ruby Style We could keep going, showing syntax of Ruby semantics of Ruby – when to do a for loop, for example, and how to add two numbers together. If you’re like me, you’ll end up writing a program that happens to be Ruby but looks very much like your programming language of choice. While we don’t have time here to explore Ruby style in much depth, let me suggest one common approach to Ruby scripting. Instead of solving the programming problem in the main routine, write an object. The main routine creates the object, passes input parameters into it, and perhaps prints something out. Once you’ve developed that habit, it’s easy enough to put the objects in a code library and learn how to unit test that library. For now, let’s look at variables and control flow. Variables: Strings, Integers, Floats and Arrays Ruby is a strongly typed language, with integers, Boolean, decimal numbers and strings as basic data types. Data type is assigned implicitly; in the code below, “name” is a string, “val” a number and “inte” an integer: name = gets val = 5.5 inte = 5 If you type “5” when “name” is requested, then try to add “inte” and “name,” you’ll get a conversion error. Although “name” is a string, it’s also an object, and has a “.to_i()” function that returns an integer. Putting the code together looks like this: added = name.to_i() + inte Ruby uses other functions as well; “to_s()” converts to string, for example, and “to_f()” to float. Meanwhile, there are a lot of ways to create and access an array in Ruby. For now, here are three: array1 = array.new(10) #Creates a size-ten empty array array2 = array[1, 2, 3, 4,5] #Array of 5 elements that increment array3 = array(0..9)#Array of 10 elements values 0 to 9 Arrays in Ruby are zero-based and automatically resize when you address memory out of bounds. To access the second element of array2, use “array[1].” Oh, and the # sign denotes a comment. Control Structures: If, While, For You’ve seen if before, but it’s about time I introduce the non-value, nil, which works something like this: array3 = Array[1,2,3,4,5] if (array3[5].nil?) puts “array3 has no fifth element!” else puts array3[5].to_s() end The comparison operators are similar to other languages: for greater than, “For” and “while” can work much like they do in most languages: #for loop through some fixed numbers for i in (0..5) puts i.to_s() end #For Through An Array array4 = Array[1,2,3,4,5] for i in 0..array4.size()-1 do puts array4[i].to_s() end #while Loop i=5 while i>1 puts i.to_s() i=i-1 end But that “for” loop through an array sure seems like a lot of work, doesn’t it? Instead, here’s how to do it with the built-in loop construct of an array: array4.each do |value| puts value.to_s() end for value in array puts value.to_s() end File I/O and Regular Expressions Let’s say we have a file with a large number of phone numbers. We want to change all the 616-3XX phone numbers to 269-3XX. To do that, we’ll loop through the file, read in each line, use a regular expression to change the values, print the line and redirect out to the new file. Here’s the sample file, data.txt: 616-355-3000 616-400-3333 616-555-1212 616-888-1221 616-222-0000 616-111-1111 616-545-1111 616-300-2222 There are a huge number of ways to open and process a Ruby file. We could use a one-liner to read the file into an array and then loop through the array, or we could read the file into a single (big) string, or we could read a byte at a time. This code loops through a line of the file at a time, treating it as an array: File.open(“data.txt”, “r”) do |file| file.each_line do |line| puts line end end To change the value of line, we’ll use Ruby’s “sub” function. Short for substitute, this takes a regular expression to match (set between forward slashes), then the string to replace it with: This substitutes lines that begin with (the carrot) 616-3 with 269-3. To see if a given line contains 616-3, we’d do something like this: if line1 =~/^616-3/ #code end if Ruby Functions and Classes Here’s a simple function to roll a six-sided die: def roll result = 1+rand(6) return result end To make it a class, wrap that in a class OneDeeSix above and an “end”below. (Ends always end things, with no need for curly braces.) REST and Other URL Handling The “open-uri” module gives us a method to grab the entire contents of a URL into a string. Let’s use the Thomas-Bayer website — a free, no-authentication REST API that converts a customer ID (a number from 1-50) into an XML payload. require “open-uri” print “What is your userid? ” STDOUT.flush customerid = gets customerid = customerid.chomp #Remove trailing newline url = “http://www.thomas-bayer.com/sqlrest/CUSTOMER/” data_from_url = URI.parse(url+ customerid.to_s()).read puts data_from_url Putting It All Together Let’s create a real Ruby program that uses a class to use the REST API to find your name given your customer ID. Type it in and run it: require “open-uri” require ‘rexml/document’ include REXML class Customer attr_accessor :customerid attr_accessor :firstname attr_accessor :lastname def initialize(customerid) @customerid=customerid url = “http://www.thomas-bayer.com/sqlrest/CUSTOMER/” data_from_url = URI.parse(url+ customerid.to_s()).read xmldoc = Document.new(data_from_url) @firstname = XPath.first(xmldoc, “//CUSTOMER/FIRSTNAME”).text @lastname = XPath.first(xmldoc, “//CUSTOMER/LASTNAME”).text end end #———————————–# # “Main Routine” # #———————————–# print “What is your userid? ” customerid = gets customer = Customer.new(customerid.chomp) puts “Your name is ” + customer.firstname + ” ” + customer.lastname Taking Ruby to the Next Level Now that we’ve got a class to retrieve a name from a public URL, I suggest putting that in a module and learning to write a unit test for it. Learn what makes a “good”class, study parameters and structure, read up on inheritance and figure out how to tie classes together. Start with the book Practical Object Oriented Design in Ruby but also consider Learn Ruby the Hard Way, which is available online, free and in HTML format. Also consider Codecademy. Start at the very beginning and you’ll learning by programming Ruby for free. (I do mean very beginning, though; if you haven’t created an account yet, you’ll need to do “Hello, world” in JavaScript first.) This completes our whirlwind tour of Ruby. Now the real learning can begin. Related content feature 4 reasons why gen AI projects fail Data issues are still among the chief reasons why AI projects fall short of expectations, but the advent of generative AI has added a few new twists. By Maria Korolov Oct 04, 2023 9 mins Data Science Data Science Data Science feature What a quarter century of digital transformation at PayPal looks like Currently processing a volume of payments worth over $1.3 trillion, PayPal has repeatedly staked its claim as a digital success story over the last 25 years. But insiders agree this growth needs to be constantly supported by reliable technological ar By Nuria Cordon Oct 04, 2023 7 mins Payment Systems Digital Transformation Innovation news analysis Skilled IT pay defined by volatility, security, and AI Foote Partners’ Q3 report on IT skills pay trends show AI and security skills were in high demand, and the value of cash-pay premiums was more volatile but their average value across a broad range of IT skills and certifications was slightly do By Peter Sayer Oct 04, 2023 6 mins Certifications Technology Industry IT Skills brandpost Future-Proofing Your Business with Hyperautomation By Veronica Lew Oct 03, 2023 7 mins Robotic Process Automation Podcasts Videos Resources Events SUBSCRIBE TO OUR NEWSLETTER From our editors straight to your inbox Get started by entering your email address below. Please enter a valid email address Subscribe