O'Reilly logo

The Ruby Programming Language by David Flanagan, Yukihiro Matsumoto

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 4. Expressions and Operators

image with no caption

An expression is a chunk of Ruby code that the Ruby interpreter can evaluate to produce a value. Here are some sample expressions:

2                  # A numeric literal
x                  # A local variable reference
Math.sqrt(2)       # A method invocation
x = Math.sqrt(2)   # Assignment
x*x                # Multiplication with the * operator

As you can see, primary expressions—such as literals, variable references, and method invocations—can be combined into larger expressions with operators, such as the assignment operator and the multiplication operator.

Many programming languages distinguish between low-level expressions and higher-level statements, such as conditionals and loops. In these languages, statements control the flow of a program, but they do not have values. They are executed, rather than evaluated. In Ruby, there is no clear distinction between statements and expressions; everything in Ruby, including class and method definitions, can be evaluated as an expression and will return a value. It is still useful, however, to distinguish syntax typically used as expressions from syntax typically used as statements. Ruby expressions that affect flow-of-control are documented in Chapter 5. Ruby expressions that define methods and classes are covered in Chapters 6 and 7.

This chapter covers the simpler, more traditional sort of expressions. The simplest expressions are literal values, which we already documented in Chapter 3. This chapter explains variable and constant references, method invocations, assignment, and compound expressions created by combining smaller expressions with operators.

Literals and Keyword Literals

Literals are values such as 1.0, 'hello world', and [] that are embedded directly into your program text. We introduced them in Chapter 2 and documented them in detail in Chapter 3.

It is worth noting that many literals, such as numbers, are primary expressions—the simplest possible expressions not composed of simpler expressions. Other literals, such as array and hash literals and double-quoted strings that use interpolation, include subexpressions and are therefore not primary expressions.

Certain Ruby keywords are primary expressions and can be considered keyword literals or specialized forms of variable reference:

nilEvaluates to the nil value, of class NilClass.
trueEvaluates to the singleton instance of class TrueClass, an object that represents the Boolean value true.
falseEvaluates to the singleton instance of class FalseClass, an object that represents the Boolean value false.
selfEvaluates to the current object. (See Chapter 7 for more about self.)
__FILE__Evaluates to a string that names the file that the Ruby interpreter is executing. This can be useful in error messages.
__LINE__Evaluates to an integer that specifies the line number within __FILE__ of the current line of code.
__ENCODING__Evaluates to an Encoding object that specifies the encoding of the current file. (Ruby 1.9 only.)

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required