Enter your Sign on user name and password.

Forgot password?
Sign In | Sign Up
Start learning today, and be successful in your academic & professional career. Start Today!

Use Chrome browser to play professor video
Justin Mui

Justin Mui

Loops

Slide Duration:

Table of Contents

I. Introduction to Ruby
Setting Up Your Environment

22m 8s

Intro
0:00
Installing Ruby
0:06
Ruby-lan.org
0:07
Three Ways of Installing Ruby
2:26
Compiling Ruby-Source Code
3:02
Third Party Tools
3:28
Other Implementations of Ruby
4:48
Windows Installation
5:21
RubyInstaller.org
5:22
Mac OSX and Linux Installation
6:13
Mac OSX and Linux Installation
6:14
Setting Up Debian/Linux
6:42
Setting Up Debian/Linux
6:43
Installing HomeBrew
6:56
HomeBrew for MAC OSX
6:57
HomeBrew Wiki
9:44
Installing HomeBrew
10:02
Setting Up Mac OSX
11:46
HomeBrew, RVM, OSX-GCC Installer, and Install Ruby 1.9.3
11:47
Ruby Version Manager (RVM)
12:11
Ruby Version Manager (RVM) Overview
12:12
Installing Ruby Version Manager (RVM): http://rvm.io
12:35
Install RVM with Ruby
14:20
Install RVM with Ruby
14:21
Install OSX-GCC-Installer
16:18
Download and Install Package for Your OSX
16:19
Install Ruby 1.9.3
17:28
Install Ruby 1.9.3
17:29
Test It Out!
18:09
rvm-help & ruby-v
18:10
Example: rvm gemset create educator
18:52
Set It As Default!
20:47
rvm Use 1.9.3@educator--default
20:48
Intro to Ruby

22m 20s

Intro
0:00
What is Ruby?
0:06
What is Ruby?
0:07
Ruby Standard Library
0:52
Who Created Ruby?
1:22
Yukihiro Matsumoto
1:23
History
2:45
The Name 'Ruby'
2:46
Ruby v0.95
3:10
Ruby v1.0
3:56
English Language Mailing List Rubytalk
4:08
ruby-forum.com & the Mailing Lists
4:27
Ruby In The West
9:51
Ruby on Rails
10:39
The Pragmatic Programmer's Guide to Ruby
11:30
rubyonrails.org
13:34
Current Ruby
14:42
Ruby 1.8.7, Ruby 1.9.3, and Ruby 2.0
14:43
Why Programmers Enjoy Ruby?
15:40
Why Programmers Enjoy Ruby?
15:41
Ruby Is An Interpreted Language
16:21
Ruby Is An Interpreted Language
16:22
What Is It Used For?
16:50
What Is It Used For?
16:51
Ruby is Object-Oriented
18:17
Example: 5.class
18:18
Example: 0.0.class
18:54
Example: true.class
19:03
Example: nil.class
19:12
Object Class
19:19
BasicObject
19:20
Example
19:52
Superclass
20:50
Fixnum → Integer → Numeric → Object
21:32
Basic Tools for Using Ruby

27m 44s

Intro
0:00
Interactive Ruby
0:08
irb: Interactive Command-Line Environment
0:09
Example
0:49
irb-v
0:50
irb-executes terminal
1:02
1.9.3-p125 > 'hi'
1:09
Live Demonstration
1:31
Why Use Interactive Ruby?
2:21
Why Use Interactive Ruby?
2:22
RDoc
3:05
RDoc
3:06
Ruby Core Documentation
3:32
Ruby Core Documentation: Example
5:30
Ruby Core Documentation: Markup
6:12
Ruby Core Documentation: Headings
7:44
Coding Example: RDoc
9:30
Why Use RDoc?
13:02
Learning Core Ruby Functions
13:03
Generating RDoc
15:31
rdoc-help # usage
15:32
Ruby Interpreter
15:57
ruby -- help
15:58
ruby [switches] [-] program [arguments]
16:16
Example: How to Run a Ruby Script
16:28
Rake
18:38
Rake Overview
18:39
Ruby Core Documentation: Rake
19:46
Coding Example: Rake
23:14
Why Was It Created?
24:30
Why Was It Created?
24:31
Lesson Summary
25:13
Lesson Summary
25:14
IDE/script Editors: MacVIM
26:24
Ruby Specifics

20m 45s

Intro
0:00
Ruby Specifics
0:06
Comments
0:51
Hashtags
1:00
Example
1:23
Multi-Line Comment
2:04
Example
3:10
RDoc Comments
4:02
When do you generate an Rdoc?
4:10
Headings and subheadings
4:24
Examples
4:48
Generating an Rdoc - example
4:50
Common Code Conventions
6:28
For every tab use two spaces indentation
7:38
Never use tabs
7:42
Common Code Conventions (Cont.)
8:18
Camel case
8:20
Snake case
9:18
Identifiers
9:44
Constants begin with CAP letter
10:00
Examples
10:10
Identifiers with Different Scoping
10:26
Global
10:34
Instance Variable
10:40
Class Variable
10:46
Examples
10:56
Reserved Keywords
12:22
Do not use reserved keywords in code
12:25
Parentheses are Sometimes Optional
13:04
Functions do not require parentheses
13:16
When in doubt, use parentheses
13:54
Examples
14:10
Newlines Are Statement Terminators
14:20
Examples
15:10
Continuation with a Period
16:20
Period means continue to next line
16:46
Multiple Statements Allowed on a Single Line
17:38
Try not to use semi-colons
17:58
Code Blocks
18:20
Use code blocks for one liners
18:28
Examples
18:40
Recommended for multiple lines
20:16
Ruby Data Types (Part 1)

29m 37s

Intro
0:00
Overview
0:10
Ruby Data Types
0:10
Numbers
0:16
Strings
0:18
Symbols
0:24
Numbers
0:30
Numeric
0:44
Float
0:50
Complex
0:56
BigDecimal
0:58
Rational
1:00
Integer (most popular) - Fixnum and Bignum
1:06
Fixnum stores 31 bits
1:18
Bignum stores larger bits
1:24
All number objects are instances of Numeric
1:28
Integer Literals
2:28
Represent whole-numbers
2:40
Examples - Different bases
2:42
Binary
3:04
Octal
3:30
Hexadecimal
3:44
Examples
4:06
Floating Point Literals
4:45
Examples
4:58
e-value can be capital or lowercase
5:30
Example
5:44
Strings
6:16
Mutable objects
6:18
Used for inserting and deleting text, searching, and replacing
6:26
String Rdoc
6:46
Definition
7:00
String Literals
8:20
Single-Quoted
8:28
Double-Quoted (most used)
8:50
Example
9:32
Escape Sequences
11:10
Newline
11:16
Tab
11:22
Double quote
11:28
Blackslash
11:36
Interpolation
11:50
Sprintf
13:48
Unicode Escaping
14:38
Example
15:50
Delimiters
16:18
Here Documents
17:18
Example
17:25
String Operators
19:58
Concatenation
20:03
Appending
20:40
String Equality
21:04
Example
21:24
Substrings
22:00
Range object (inclusive)
22:22
String Encoding
24:52
Differences between Ruby 1.8 and 1.9
24:56
Symbols
26:02
Definitions
26:04
Examples
26:46
When to use symbols
26:54
Symbols and Strings
27:42
Symbols Rdoc
28:22
Ruby Gems

25m 50s

Intro
0:00
RubyGems
0:08
What are RubyGems?
0:24
RubyGems.org
0:44
How RubyGems are used
2:06
Java's jar utility
2:50
Unix/Linux's tar utility
3:06
What is a Gem?
3:16
Definition of Gem
3:20
Version
3:34
Date
3:44
Author
3:50
Description
5:58
What Are the Uses?
4:18
Uses for Gems
4:22
Installation
5:06
How to install RubyGems
5:30
Updating to the Latest Ruby Gems
5:54
Testing
6:22
Example
6:34
Installing Rake
7:24
Example
7:46
Verifying
9:22
Example
9:56
Structure
10:56
gem.gemspec
11:30
Specification
13:40
What is in the gem?
13:42
Who made it?
13:50
Update gem version
13:58
Example
14:10
Create Our First Gem
17:20
Steps involved
17:28
RubyGems Guides
17:36
Example
20:02
Steps Review
18:56
Create Our First Gem (Cont.)
23:08
Building the gem
19:38
Example
20:00
Installing the gem
22:32
Run it
22:52
Publish it
23:04
Get Some Gems!
25:06
rake
25:14
rails
25:19
fastercsv
25:25
koala
25:37
Ruby Data Types (Part 2)

40m 24s

Intro
0:00
Ruby Data Types
0:15
Boolean
0:21
Arrays
0:27
Hashes
0:33
Range
0:37
Boolean Types
0:42
TrueClass
0:56
FalseClass
1:12
NilClass
1:18
TrueClass Examples
2:48
FalseClass Examples
3:22
Arrays
4:16
Ordered collection of objects
4:22
Can hold different objects
4:32
Starts at index 0
4:50
Array of Strings
5:50
Example
5:52
Arrays (Cont.)
6:20
Can be created using literals
6:22
Can be created using constructors
6:54
Position and indexed value
8:04
Negative Indexed Values
8:56
Shift and Unshift
10:18
Push and Pop
11:38
.delete method
12:38
Addition and Subtraction
13:32
Union and Intersection
14:48
Insert
15:52
Iteration
16:52
Arrays Rdoc
17:48
Hashes
22:08
Maps and Associative Arrays
22:44
Created using the constructor
22:56
Created using a hash literal
24:02
Stored in a hash table
25:26
Example
25:50
Accessing Key-Values
27:46
Deletion
29:48
Iteration
31:04
Hashes Rdoc
32:04
Ranges
36:40
Two dots are inclusive
36:57
Three dots are exclusive
37:16
Example
37:50
Ranges Rdoc
38:24
Objects

1h 5m 46s

Intro
0:00
Objects
0:10
Object References
1:36
Ruby Core
2:16
Example
4:30
Creating New Objects
6:00
New Method
6:08
Initialize Method
6:31
Example
7:18
Garbage Collection
9:54
Global values always reachable
10:25
Object Identity
11:08
Every object has an object identifier
11:20
Object identifier is constant and unique
11:30
Example
11:54
Object Class
12:58
Class method
13:10
Superclass method
13:28
Object Testing
14:46
is_a?
15:49
respond_to?
16:26
String and Regexp
18:10
Comparing two object instances
20:06
Example
23:30
Object Equality
25:48
Comparing objects
25:54
equal?
25:58
Popular way to test for equality
27:16
Opposite way to test for equality
27:25
Arrays
28:30
Hash
29:42
Case equality operator
30:47
Class tests
31:16
Range tests
31:48
Symbol tests
32:32
Object Conversion
33:14
Explicit conversion
33:54
Implicit conversion
35:00
Example
36:12
Object Conversion: Kernel Module
38:22
Array
38:38
Float
39:26
Integer
39:58
String
40:10
Example
40:34
Object Conversion: Coerce
42:00
Used for mixed type numeric operations
42:08
Example
43:40
Object Conversion: Boolean
47:42
Every object has a boolean value
47:44
Example
48:54
Object Copying
50:52
dup
50:58
clone
51:03
Example
51:42
Object Freezing
57:36
Object Marshaling
58:38
Save state
59:04
Load state
59:27
Example
59:32
Tainted Objects
1:01:50
taint
1:02:08
farm field
1:02:12
Untrusted Objects
1:04:06
trust
1:04:24
untrust
1:04:34
untrusted?
1:04:42
Loops

38m 54s

Intro
0:00
Loops
0:12
while and until
0:48
for and in
0:54
iterators
1:04
enumerable in objects
1:06
While-loop
1:14
Will keep going is condition is true
1:18
Until-loop
2:58
Will keep going until condition becomes true
3:06
Single Expression Loops
4:20
Compact form
4:30
Expressed as a modifier
4:42
Do-While Loop
5:52
Executes body first
6:06
Do-Until Loop
7:54
Similar to do-while loop
7:58
Using Break Inside Loops
8:54
break
8:58
For-In Loop
11:56
for-loop
12:06
var
12:34
collection
12:54
body
13:00
Examples
13:08
Examples (Cont.)
15:54
Nested loops
16:40
Numeric Iterators
18:32
upto
18:40
downto
18:42
times
18:48
Examples
20:28
External Iterators
21:00
Enumerator class
21:04
Rdoc
21:16
Enumerables in Objects
24:35
Enumerable is a mix-in
24:41
RDoc
25:24
Commonly Used Enumerables in Objects
27:01
Array
27:19
Hash
27:51
Range
28:47
Examples
29:29
Enumerables in Objects (Cont.)
31:13
File Processing
31:15
Example
31:45
Enumerables in Objects (Cont.)
33:07
collect
33:23
select
34:11
reject
34:59
inject
35:29
Strings

28m 30s

Intro
0:00
Strings
0:08
Why do you want to get familiar with strings?
1:00
String Creation
1:16
new
1:28
empty?
1:50
length or size
2:10
Example
3:12
String Manipulation
4:40
slice
4:56
square brackets [ ]
5:02
token
5:40
[fixnum]
6:52
offset and length
8:40
chaining
12:42
String Insertion
12:56
insert
12:58
positive or negative index
13:46
String Updates
15:24
[token]
15:36
Examples
16:40
chop or chop!
17:54
chomp!
18:56
gsub
20:28
String Deletion
21:38
delete
21:38
String Reversal
22:46
reverse
22:52
String Manipulation
23:16
split(pattern=$, limit)
23:22
pattern
24:10
limit
24:15
upcase or upcase!
25:28
downcase or downcase!
26:02
swapcase
26:24
Incrementing Strings
27:26
next or next!
27:32
Check Out the Other Lessons
28:00
Ruby Data Types Part 1
28:12
Regular Expressions
28:18
Regular Expressions

33m 27s

Intro
0:00
Regular Expressions
0:10
How to create a regular expression
0:48
What goes inside
1:36
Metacharacters
3:10
Bracket expressions
3:14
Quantifiers
3:18
Anchors
3:20
Metacharacters
3:30
word and non-word characters
4:04
digit and non-digit characters
4:44
hexdigit and non-hexdigit characters
4:56
whitespace and non-whitespace characters
5:08
Examples
5:24
POSIX Bracket Expressions
7:48
Non-POSIX Bracket Expressions
9:48
Bracket Expression Examples
10:58
Quantifiers
12:34
Examples
13:30
Character Properties
17:24
Similar to POSIX bracket classes
18:22
More Character Properties
18:48
Examples
19:32
Anchors
20:08
Examples
21:14
Regular Expression Matching: Regexp Object
22:40
match
22:51
Regular Expression Matching: String Object
24:14
match
24:26
Regular Expression Modifier Characters
25:14
pat
25:38
Example
26:42
Regular Expression Modifier Objects
27:14
Example
28:38
Regexp Rdoc
30:40
Arrays

14m 35s

Intro
0:00
Arrays
0:12
Creating an Array with a Block
0:50
Alternative Ways to Create an Array
3:52
Checking the Class
5:14
Iterate through the array
5:26
Call the class method
5:28
Array Shortcuts
6:38
at(index)
6:44
delete_at(index)
7:28
first(n)
8:28
last(n)
9:28
Removing Duplicates
9:58
uniq or uniq!
10:04
Sorting the Array
10:48
sort or sort!
10:54
Getting the Index
11:35
index
11:56
rindex
12:38
Multidimensional Arrays
12:56
flatten
13:33
Check Out the Earlier Lesson
14:16
Ruby Data Types Part 2
14:26
Hashes

27m 48s

Intro
0:00
Hashes
0:12
Creating Hashes
1:18
Setting a Default Value
2:24
Accessing Hashes
4:16
Accessible by keys or by values
4:28
Keys must be unique
4:36
Creating Hashes
5:16
Comma-separated list
5:42
Hash rocket
8:28
Examples
10:16
Iterating Keys and Values
11:43
each_key
12:04
each_value
14:04
Merging Hashes
16:10
merge(other_hash)
16:20
Sorting Hashes
18:46
Replacing Hashes
20:57
replace(other_hash)
21:18
Converting Hashes to Other Classes
22:04
to_a
22:22
to_s
23:22
Example
24:34
Check Out the Earlier Lesson
27:22
Ruby Data Types Part 2
27:32
Math Operations, Part 1

28m 47s

Intro
0:00
Math Objects
0:12
Numeric
0:26
Integer
0:38
Float
1:02
Fixnum
1:14
Bignum
1:56
Rational
2:04
Math
2:24
Math Operations
2:36
Example
3:14
div(numeric)
4:54
divmod(numeric)
6:30
modulo(numeric)
7:23
quo(numeric)
8:18
remainder(numeric)
9:35
Operation Precedence 1 of 3
10:35
Operation Precedence 2 of 3
13:18
Operation Precedence 3 of 3
14:28
Abbreviated Math Operations
14:54
Move the operator in front of the equal sign
15:52
Numbers
16:36
Numeric Class
17:06
Numeric Methods
18:41
ceil
18:52
floor
19:32
round
19:50
Example with Numbers
20:20
Numeric Methods (Cont.)
22:20
truncate
22:28
num.step(limit, step)
23:02
Numeric Rdoc
25:26
Math Operations, Part 2

28m 51s

Intro
0:00
Math Operations
0:12
Math Module
0:24
Rational Numbers
0:44
Complex Numbers
0:52
Prime Numbers
0:58
Matrices
1:06
Math Module
1:12
PI and E
1:32
Math Module Methods
2:47
atan2(x,y)
2:56
cos(x)
3:14
exp(x)
3:44
Examples
4:38
log(x)
5:44
log(num, base)
6:34
log10(x)
7:04
sin(x)
7:34
sqrt(x)
7:52
tan(x)
8:06
Math Functions: Part 1 of 3
8:12
Math Functions: Part 2 of 3
9:32
Math Functions: Part 3 of 3
10:19
Math Module Rdoc
11:25
Rational Numbers
13:23
How to use
14:06
Example
15:02
Mathematical Ruby Scripts (Mathn)
16:25
Example
17:28
Complex Numbers
18:26
polar
18:56
rect
19:10
Complex Number Examples
19:18
Prime Numbers
20:14
each(ubound=nil)
20:44
prime?
21:22
Example
21:58
Matrices
23:15
build(row_size, column_size=row_size)
23:44
Example
24:44
Matrix Rdoc
24:58
Dates and Times

26m 1s

Intro
0:00
Dates and Times
0:12
Time Class
0:38
Methods of the Time Class
1:43
now
1:44
at(time)
2:10
Epoch & Unix Timestamp Conversion Tools
3:19
Components of a Time
5:07
Convert Time to an Array
5:54
to_a
6:08
Creating a New Time
6:48
Time.local
7:08
Year is required
7:22
Time.utc
8:12
What should be specified
9:30
More Methods of the Time Class
10:16
strftime(string)
11:26
RDoc
12:50
Date Library
16:46
Initializing a New Date
17:08
Parsing Dates
18:28
parse(string)
18:42
Today's Date
19:19
Date.today
19:22
Tomorrow's Date
20:22
Next
20:28
Next week
21:22
Count Down
21:26
Count Up
22:37
Components of a Date
23:20
Converting to Datetime
23:48
to_datetime
24:00
Initializing a Datetime
24:24
Converting to Time
25:23
self.to_time
25:32
Methods: Part 1

31m 24s

Intro
0:00
What is a Method?
0:12
Basic Method
0:58
Return Value
4:37
return
4:46
Factorial Example
6:18
Example
8:46
Return Two Values
10:06
Set the return keyword
10:14
Collected and returned as an array
10:28
Undefining Methods
11:22
undef method_to_undefine
11:44
Example
12:32
Method Names
13:02
Begin with lowercase letter
13:16
Separate longer words with underscores
13:26
Can end with equal sign, question mark, or exclamation point
14:03
Equal sign
14:26
Method Names with Question Mark
14:44
empty?
15:24
Method Names with Exclamation Point
16:01
mutators
16:12
! means use with caution
16:46
Method Aliases
18:05
alias new_method existing_method
18:42
Operator Methods
20:00
Operators
20:02
Array Operators
20:10
Unary Operators
20:32
Binary Operators
20:40
Example
21:28
Methods and Parentheses
25:00
Optional in most cases
25:20
Required in other cases
27:13
Methods and Blocks
27:54
Associated with blocks
28:18
block_given?
28:26
yield
28:36
Example
29:24
Methods: Part 2

20m 11s

Intro
0:00
Methods with the Unary Ampersand Operator
0:14
&
0:34
Block to a Proc
0:56
Example
2:02
Proc object
3:58
Example
5:04
Methods with Default Values
5:54
Example
7:12
Methods with variable-Length Arguments
8:05
How to create it
8:36
Example
11:06
Using Hashes with Arguments
13:02
Multiple arguments
13:08
Solution
13:30
Example
14:56
Rdoc
18:12
Classes: Part I

26m 51s

Intro
0:00
Classes
0:10
Definition of a class
0:14
Class represents a container
0:32
Can be reused
0:46
Creating our First Class
1:00
Keyword class will create new class
1:06
Name must begin with capital letter
1:30
Instantiating Our First Class
2:46
New will create a new instance of class
2:58
Initializing Values
3:58
Definition of def
4:14
Instance method
5:08
Example
7:02
Defining the to_s Method
8:24
Creating a string representation class
8:34
Example
10:54
Self in the Class
12:16
Definition of self
12:26
Example
13:54
Accessor Methods
15:52
getter methods
16:22
Example
17:00
Setter Methods
18:00
Mutator methods
18:02
Example
19:46
Automating Getter and Setter Methods
21:10
Defined in the module class
21:30
attr_reader
21:54
attr_writer
22:48
attr creates getter and setter methods
23:50
Example
24:28
Notes on Ruby's Accessor Methods
25:32
Classes: Part II

26m 42s

Intro
0:00
Defining Operators
0:10
You can define arithmetic operators
0:32
Unary Operators
0:46
Let's define operators in our class!
0:56
Example
2:52
Class Methods
6:24
Examples
6:56
Opening Up the Class
9:38
Adds an additional method
9:54
Examples
11:04
Array and Hash Access Method
15:40
Use square brackets
16:02
Define your own has access method
16:08
Example
16:56
Enumerating The Values
18:40
Define the each iterator
18:40
Testing for Equality
19:36
Class Triplex
19:50
Examples
20:54
Constants
25:00
Usually defined at the top of class
25:24
Classes: Part III

53m 36s

Intro
0:00
Class Variables
0:14
Example
2:16
Ruby Glass Jar Example
8:50
Class Instance Variables
10:20
Instance variables of class objects
10:46
Advantage of class instance variables
11:18
Examples
11:30
Method Visibility
16:16
Three types of method visibility
16:26
Public methods
17:34
Private methods
17:38
Protected methods
18:04
Invoking Method Visibility
19:21
Public , Protected, and Private Visibility
19:22
Invoking Method Visibility With Arguments
21:39
Example: Invoking Method Visibility
22:12
Class Visibility
23:31
Instance and Class Variables are Private
23:32
Constants are Public
24:00
Makes Existing Class Methods Private
24:27
Makes Existing Class Methods Public
25:08
Example: Class Visibility and class GlassJar
25:43
Subclassing
27:08
Subclassing: Subclass and Superclass
27:09
Example: Subclassing
29:43
Inheritance
30:05
Inheritance
30:06
Example: Inheritance
31:25
Subclassing and Inheritance
31:34
Descendants
31:41
Ancestors
31:56
More On Descendants and Ancestors
32:08
Extending a Class
33:27
Extending a Class
33:28
Coding Example: Extending a Class
34:24
Overriding a Method
36:41
Overriding a Method
36:42
Coding Example: Overriding a Method
37:18
Modifying Methods with Chaining
38:52
Modifying Methods with Chaining
38:53
Super
39:25
Coding Example: Modifying Methods with Chaining
39:51
The Singleton Pattern
44:52
Introduction to The Singleton Pattern
44:53
Setting Up Singleton
45:28
The Instance Method
45:58
Rdoc for Singleton: Usage
46:23
Rdoc for Singleton: Implementation
47:45
Coding Example: Singleton
49:38
Modules

24m 19s

Intro
0:00
Modules
0:04
What is Modules?
0:05
Modules Examples
0:40
Modules: Mix-Ins
3:31
What is a Mix-in?
3:32
Modules: Namespace
4:07
What is a Namespace?
4:08
Why Use a Namespace?
5:13
Example of a Namespace Module
5:59
Example of Mixing in The Module Into the Global Scope
6:00
Modules: Creation
7:04
How to Create a New Module?
7:05
Modules: Usage
8:19
How to Use It?
8:20
class Poker & class Bridge
9:13
Creating Our Module as a Mix-In
9:41
Example of a Module Using Instance Methods
9:42
Coding Example
10:20
Creating Our Module as a Namespace
12:11
Implement Class Methods for the Module
12:12
Coding Example
14:56
Loading Our Module
19:46
Loading Our Module Overview
19:47
Require & Load
20:15
Coding Example: Loading Module
20:48
Lesson Summary
23:36
Loading...
This is a quick preview of the lesson. For full access, please Log In or Sign up.
For more information, please see full course syllabus of Introduction to Ruby
  • Discussion

  • Study Guides

  • Download Lecture Slides

  • Table of Contents

  • Transcription

  • Related Services

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.
  • Learn at your own pace... anytime, anywhere!

Loops

  • This course goes over Ruby's extensive collection of loops: while and until, for and in, iterators, and enumerables
  • while-loop executes while a certain condition is true
  • until-loop executes until the condition becomes true
  • do-while-loop executes body first and continues while a certain condition is true
  • keyword break allows you to stop the execution of a loop
  • Integer has three commonly used iterators: upto, downto, and times
  • External iterators use the Enumerator object
  • RDoc: http://www.ruby-doc.org/core-1.9.3/Enumerator.html
  • Enumerable is a mix-in allowing several traversal and searching methods for classes
  • RDoc: http://ruby-doc.org/core-1.9.3/Enumerable.html
  • Array, Hash, and Range are commonly used enumerable objects
  • collect, select, reject, and inject are commonly used iterators.

Loops

Lecture Slides are screen-captured images of important points in the lecture. Students can download and print out these lecture slide images to do practice problems as well as take notes while watching the lecture.

  • Intro 0:00
  • Loops 0:12
    • while and until
    • for and in
    • iterators
    • enumerable in objects
  • While-loop 1:14
    • Will keep going is condition is true
  • Until-loop 2:58
    • Will keep going until condition becomes true
  • Single Expression Loops 4:20
    • Compact form
    • Expressed as a modifier
  • Do-While Loop 5:52
    • Executes body first
  • Do-Until Loop 7:54
    • Similar to do-while loop
    • Using Break Inside Loops
    • break
  • For-In Loop 11:56
    • for-loop
    • var
    • collection
    • body
    • Examples
    • Examples (Cont.)
    • Nested loops
  • Numeric Iterators 18:32
    • upto
    • downto
    • times
    • Examples
  • External Iterators 21:00
    • Enumerator class
    • Rdoc
  • Enumerables in Objects 24:35
    • Enumerable is a mix-in
    • RDoc
  • Commonly Used Enumerables in Objects 27:01
    • Array
    • Hash
    • Range
    • Examples
  • Enumerables in Objects (Cont.) 31:13
    • File Processing
    • Example
  • Enumerables in Objects (Cont.) 33:07
    • collect
    • select
    • reject
    • inject

Transcription: Loops

Welcome back to Educator.com.0000

Today's lesson is on Ruby loops.0001

Ruby has quite an extensive collection of loops.0009

When you are working with Ruby, there are many different ways you can do your coding--it's very flexible--and in the same sense, there are many different types of loops you can be using.0016

That's why I say, in this next one: You have the flexibility to choose the one that is best for you.0032

We are going to go over the four different types.0039

The first two are real loops: the while and the until loop.0046

Next, we will look at the for...in loop, and then we will look at more loops that you will see in objects.0053

We are going to do this through iterators and enumerables and objects.0062

The first one we are looking at is the while loop.0071

The while loop has code that executes while a certain condition is true.0075

This while loop will keep going if this condition holds true.0086

For this example, we have the items=0, and we have a loop that says, "While the items is less than 10, do the things in this code block."0090

Here is the code block.0107

It says, "I want you to print out the number of items that it puts"--so that is a new line--and then it says, "Increment the number of items by 1."0114

When this first gets in this loop, it is going to print the value 0, it's going to increment items, and then it's going to go back to this check that says, "Items less than ten?"--and if it is, then it's going to say, "OK, we're going to go back in the loop."0125

So, it's going to say 0,1,2,3,4,5,6, all the way down; the question is, when it hits this mark here: at the 9 value, it's going to print that out.0144

But the last one is going to increment to 10, and that is going to hold false.0162

So that is where it is going to stop.0167

It's going to print 0 to 9.0169

The next one we will look at is the until loop.0176

The until loop says, "Until this condition becomes true..." so that means, while it's not true, it's going to continue doing it.0179

It's interesting, because most other languages, you won't see an until loop; so this is kind of a special one that is in Ruby.0193

Here we have items=0, and this loop says, "Until items is greater than or equal to ten, continue doing these things."0203

It says, in this case, that I want to print out the items and then increment the items by 1.0212

This is just like the while loop, but we are using the until loop for this.0220

Notice also, our check here has changed, so this is going to print out the value 0, print out the value 1, 2...and once this items equals 10, it is going to stop.0226

Again, it's going to go all the way down to value 9, and it's going to have the exact same code as the while loop, but we are using the until loop for this case.0243

The next thing we're going to look at is single expression loops.0258

This is a very compact form--usually you see single expression loops as a kind of one-liner loop.0262

It is expressed as a modifier.0275

When I say "modifier"--you have your while here--and for example, let's say x=0.0281

What I'm going to say here is, "I want you to print out x=x+1 while x is less than 5."0292

Notice, it's all in one line; so, it's going to continue doing this while x is less than 5, and then once it hits this condition, then that is going to end that line.0307

Notice, the end result is x=5.0322

Again, I'm going to do that with an until loop--I'm going to use y=10, and it says, "Until y=1, continue to decrement that y value 1 by 1."0326

Once it hits 0, it will hit this condition, and the until loop will say, "I'm going to stop now"--when this y is equal to 0.0338

The next one we're going to look at is the do while loop.0351

What this does is...first, the body will execute: the body executes before it checks the condition.0354

The second one...it is not followed as a Ruby convention...there really isn't a do while loop in Ruby, so we are kind of using that flexibility to create our own.0364

It's useful if you are adjusting to Ruby from another language, which...many people use do while loops in Java, C, C++...so it might be common to use it this way, too, because it's more familiar to you.0376

So, for example, we have this x=10; we have this begin loop that says, "Hey, I'm going to take this x value and decrement it by 1."0389

It's going to end, because it's also going to say, "While x > 10"...so you notice, for this one, the end result is 9.0399

What happens is, you get this value 10, and it gets decremented to 9, and then it goes in this while loop, and it says, "OK, 9 is not greater than 10, so I'm going to stop there."0413

Another interesting thing you can do is use parentheses.0426

With parentheses, the condition actually executes before the body.0431

Let's take that exact same example.0436

If I take x=10...I have my parentheses here; inside, there is a block that will decrement the value of x to 9.0439

It goes down by 1; but my condition is "while x > 10".0451

Now, since, with these parentheses, the condition executes before the body, the end result will still be x=10.0455

It never actually runs the block in there.0463

The next one we are going to look at is the do until loop.0470

This is very similar to the do while loop.0474

For this one, we are going to make a countdown; once it hits 0, it goes "Boom!"0477

So, I have my countdown=100; again, I'm using the begin/end; this is my block of code; and it's going to print 100, decrement it by 1, and check this condition.0483

This will have the value 100, all the way to 1, and then it's going to say, "Boom!"0505

Notice, here it says, "Once the countdown=0, don't run that code again," so it does not print out 00518

1 is the last one, and then it prints "Boom!" there.0525

Let's look at using the break inside the loops.0530

This keyword 'break' allows you to stop the execution of the loop.0535

I have this countdown, and it's equal to this huge number here.0543

While the countdown > 0...what we're going to do is say, "If this countdown class is equal to Bignum,"...it's going to say, "Oh, this number is too huge; it is going to take forever to count down to 0."0552

So, I'm going to say "Abort it, and break out"...it's going to break out of the while loop.0566

This break here allows you to stop the execution of the loop.0572

After that, if that case doesn't exist with this countdown, it's going to go ahead and decrement that countdown, one by one.0580

In this case, this is actually going to run.0591

Here is another example.0603

In this one, we are taking an Array, and we are going to break out that loop if it's not a fruit.0606

In this case, we are going to do a check, since we have this Array here: let's say a carrot came up--that's a vegetable, so we are going to abort out of this loop.0613

We are doing this until loop here, so first we check, "Hey, is the 'fruits' already empty?"--if it's empty, we're going to stop it.0622

First, we pop one fruit out.0636

If that fruit is equal to a carrot, then we are going to say, "Abort it: carrot is not a fruit."0640

What you will see with this is, it's going to first print out the apple...it's going to pop that out, I mean; so part of this 'fruit' is going to be popped out--so this is popped out.0648

Then, it's going to pop out the banana.0666

Then, it's going to get to this 'carrot', and it says, "Hey, wait: I can't work with this--this isn't a fruit."0674

It does this check, and it's going to abort and say it's not a valid fruit.0680

Now, because we actually had it pop before...it is still going to call this pop command, so it's going to be carrot here...and then it's going to say that it's aborting.0685

"Carrot is not a fruit."0703

That is how we use break for that.0709

Now, let's look at the for...in loop.0715

This is also known as the for loop.0722

Here is the structure of it: You have this for value; it has this var, and that is the value in the collection; and then you have your body of the code.0728

Now, what is var? Var is a variable or a comma-separated list of variables--we will go over that.0744

Collection is an object that contains an 'each' iteration method.0755

So, this object that is the collection itself has to have an 'each' method in there so it can do this for loop process.0763

Body is the code inside the for loop.0775

Here is an example we have: for the first one, we have a numbers array, 1 through 9.0785

Notice, what is our var? That is the i; our collection is this numbers, and this is our body--the puts i.0794

Notice what it is doing here for this loop; it's going to just print 1 to 9.0812

With this for...in, this i is this value 1, and then it will be this value 2, and what it will do is, it will go through each one of these, one by one, until it gets to the end; then it prints all the values out.0822

Again, you can do this with a range, too; range is an object that has an each method, so you can do the exact same thing.0846

It's going to print the exact same output with this.0852

For this third example here, I want to show you that you don't even need to use the do declaration.0857

Notice, here I just do for i in 1..9, and it's still going to output the same value.0865

Now, for this last example here, I have this numbers=1...this hash: numbers, 1, has a value of 1; this key 2 has a value of 2; key 3 has a value of 3.0874

What is interesting here is, notice, the var actually is a comma-separated list now.0895

The var here is actually k,v.0901

Our collection is this numbers hash.0910

It's using the hash each method, so it says, "Hey, for this each method, I'm allowed to put in two arguments," so it says, "I'm going to put k is v and a dot."0914

So, for this one, it's going to say, for the output...it will say 1 is 1, 2 is 2, 3 is 3.0926

An example here...I can show you a live example.0946

Let's do the numbers equals...1 is 1, 2 is 2, 3 equals 3.0958

We have our hash; now I'm going to create my loop.0969

For k in numbers plus k is v...end.0975

I have that same output here: 1 is 1, 2 is 2, 3 is 3.0987

Next, we are going to look at a nested loop.0997

With your loops, you can do nested loops: what is a nested loop?1002

It's this example here; what it does first is, it looks at this value i.1005

The first one will be 1.1015

And, in this loop, then, it's going to go through this j loop.1018

It's going to go ten iterations in, and then it's going to go back to the i loop, and then it's going to work with 2,3,4,5,6,7,8,9,10.1021

This is best with an example, so let me show that to you.1033

Let's go ahead and clear this out.1038

I'm going to just put the exact same loop here.1041

We are using the range for i, and 1 to 10 for j, and 1 to 10...and I'm going to just do print i.2s--take that integer value and convert it to a string...1045

Notice that we get this huge table of values because we're running this nested loop.1079

This first value is the i value, and the second one is the j one, and the output goes all the way down.1091

That is our nested loop.1102

Next, we are going to look at numeric iterators.1112

The Integer has three commonly used iterators: upto, downto, and times.1116

There are other iterators, but we are just going to look at these popular ones.1126

The first one is this example: it's 1.upto(5), and it's really self-explanatory.1130

The upto will increment by one.1136

For this example, it's going to output 1,2,3,4, and the last one, 5.1146

Now, let's look at the downto; the downto one says, "This is 10, and I'm going down to 1."1156

This is going to decrement the value by one.1164

This is going to go 10,9,...all the way down to 1; that is where it's going to stop.1172

The last one is this times method.1179

It's interesting, because with this times, you can actually see the same thing you did with upto...so I call this 10.times with this block--it's similar to 0.upto(n-1).1185

This would be like 0.upto(9).1205

We can see that in action.1218

I do 10.times...notice that the output here is 0 to 9.1223

That is the output that is printed out.1251

The next thing we are going to look at is external iterators.1258

This uses the Enumerator class; let's take a look at that.1264

This is the Enumerable class; this is not the same one...here is the Enumerator class here; we can specify...the Enumerable class will get to that, but let's just change that for now.1274

The Enumerator class allows both internal and external iteration.1305

"An Enumerator can be created by the following methods"--there are Kernel methods here.1320

These methods "have two forms: a block form where the contents are evaluated for each item in the enumeration, and a non-block form which returns a new Enumerator wrapping the iteration."1329

The main ones we want to know are the each method...so you will notice there is an each method, and this allow external iteration, so I can put the e.next, e.next, e.next, and every time I do next, it outputs a value.1344

The next thing I want to show you is this peek_values and rewind.1368

As you create this iteration, you can see the values that are next.1376

First, you have this peek, so I can say, "Hey, I want you to tell me what will be next in this Enumerator value."1385

I can use this peek, and under peek, see, it's going to say that it's 1.1395

Peek--that is 2, and then I can go to the next, and I can do a peek again to check.1400

You can also do peek_values just to see how far you are in the enumeration.1407

First, let's look at one external iterator.1414

We are using the downto, but this time, we're storing it in a value.1421

I call this countdown method, equals 10.downto(1)...so when I do the output, I do countdown, next, and the first one is 10; I call it again, countdown, next, the next one is 9; and again--it's 8; and I can go down all the way with that.1427

Here is another external iterator; this one is just using each.1451

I can just do e.next; it refers to this value here--the first next; the second one refers to this value, and the third one returns with that.1456

It returns the elements one by one through the iterator.1466

The next one we are going to go through is Enumerables.1473

What is an Enumerable? An Enumerable is a mixin that allows several traversal and search methods for classes.1475

It has built-in internal iterators, so you don't have to create your own.1486

Again, for this class, you have to define this each method; it's very important to using this mixin called Enumerable.1501

These mixins--you can just include them in the class you want them in, and then you have these cool traversal and search features as part of it.1509

Let's take a look at the RDoc.1518

Now we can look at our Enumerable class, here.1520

You can see it's a mixin, it provides classes for these traversal methods...I'll give you an example of what it does.1525

For example, here--look at this one--this [ant bear cat].1536

You can call this .all? method, and you can return a block.1545

And this block--you can say, "Hey, do all these words have a length greater than or equal to three?"1549

Using this, it will do the iteration for you, and it will say, "If that's true, I'll return true."1555

But, on this next example, it says, "Hey, are all of them the length 4?"1561

Since they are not all 4--only bear has 4 letters--then it's going to return false.1564

This Enumerable class allows you all these cool little methods that allow you to do these things, and they are all common methods you could be using, but you don't have to create your own; it's already built in.1571

Another one is this 'any'.1586

You can pass a block into it, and say, "Are there any words that have more than three letters?" or "...four letters?", and it returns true.1588

If you go through here, you will see that there are a lot of different examples.1599

We're going to look at more of this collect, and you will notice there are a lot of others...so we're going through some of the more common ones.1605

OK, so the common ones we are going to look at for the Enumerable objects are this Array, the Hash, and the Range.1622

First, we are going to go over Arrays.1634

First, we are going to look at the each method.1639

I have my Array: it has three elements: 1,2,3; I call the each method, and it is going to put them out, one by one.1643

That is from the Enumerable class; it allows us to do that; it's 1,2,3.1656

Next, we have our Hash; again, we have our each method, and again, it's very similar to what we were doing before with the for loop, but now we have a different way.1662

Again, they have the same output: 1 is 1, 2 is 2, 3 is 3.1680

The last one is interesting: we have this each_with_index.1687

Now, when I call this each_with_index, it will pass me this element, plus it will pass me the index value.1693

So, for this one, it will get me the 1 with the 1, 2 is 2, 3 is 3, and I can inspect it and take a look at that.1706

It gives me parts of the Hash.1721

The Range: again you can do it with Ranges, also.1725

Notice how the output is all the same, but we are doing it with different objects, and it is giving us the same one.1731

This is 1,2,3,...we're all incrementing by one.1735

Here is how the each_with_index works--it hopefully clarifies what you just saw on the other slide.1740

First, it does take arguments, and it takes object.i, index, and then you take your block of code.1746

It calls this blick with two arguments, the item and the index.1759

Let's go through an example, so it may clear it up some more.1765

We're just going to use that example we were talking about--that numbers 1,1--key is 1, our value is 1--same with 2 and 2, key is 2--3 is the key, and the value is 3.1770

OK, we have our Hash, and let's create the each_with_index now.1792

We have our block, item and index, and then we're going to output this.1804

First, I want to output the actual parts of this Hash that we're doing: so we have our item, and then we're going to show you the index value it gets.1812

Notice, the Hash elements--one by one, they are actually converted to Arrays.1832

This object is an Array of key and value; then, in that same loop, it says this is the value 0.1837

On the second one--we're going to our second part, which is 2, our value 2, that index value 1; and it goes to our third one, which is Array 3,3, and our index value is 2.1847

That is the Enumerables.1866

Now, let's look at another example of file processing.1871

With file processing, you have this each method; it's used for the lines of code in the file.1874

This example we have is example.txt.1885

This file, open...you can open the file, and then you can print out line-by-line, using this each method.1890

Let's see that in action.1900

I have an example here: I have some lorem ipsum text.1905

You will notice that it's a ton of text.1910

There are four paragraphs total.1914

What I want to do is output that.1918

I run my IRB, and then I'm going to just say the name of this file, and I'm going to do file.open, so it's going to open the file, and then it's going to create a block for that.1922

I'm going to use that each, so it's going to use that Enumerable, but notice, this file defines each its own special way, and it's going to handle them, so it's going to be line-by-line.1939

I create a block called line, and I can declare it there, and one by one, each line is outputted to the screen.1950

So it's just like we opened that text file; it has all the text here, too.1964

I know it's a lot of text--a little overwhelming--but you can see it all there.1969

So we have that; let's look at some common iterators and Enumerables.1983

Let's look at collect, select, reject, and inject.1990

First, we're going to look at the collect method.2000

It's also known as map; you can call collect or map; they do the same thing.2004

It executes its associated block with the each element of the Enumerable object; again, you can define that each; and it returns values of the block into an Array.2011

For this example, we have this 1 to 5; we're calling the collect method, and it's adding them together.2024

It's going to do 1+1, and you see 2; 2+2, you have 4...all the way up to 5+5; that is the collect.2034

The next one is the select; it's also known as the find_all method.2048

Again, you are invoking the block for each element in the object; over here, it is going to return an Array of elements for which the block returns a value other than false or nil.2054

For our example here, we have this block: it's i.mod(4) if it's equal to 0.2067

This is our block: if this returns true, it's going to store it in an Array.2076

There are only two elements in 1 through 10 that allow it--that's 4 and 8; both of them are going to return 0 for the mod, so it's going to return that Array with 4 and 8.2081

The next one we will look at is the reject method.2096

This is the opposite of select.2098

In this case, it returns an Array of elements for which the block returns false or nil.2103

Here, you have 1..10; you call the reject, and this is the exact opposite of select, so it has all the other elements in this Array.2109

The last one we're going to look at is this inject method; it's also known as reduce.2128

It combines all of the elements with a binary operation.2139

Now, this binary operation can be a block, a symbol that names the method, or an operator.2144

We'll run through some examples.2155

It can be passed an initial value, too--so if a block exists, and each element is passed an accumulator value and element...2157

Here is an example: we have a range, 5 to 10, and we call this inject method.2169

It says, "OK, I have this sum value that I'm going to continue to create and build on, and the end result...I'm going to output that to you."2175

It says, "I have some value"--in this case, it's going to be 0--it starts out as 0--but it's going to add 5 to that, and then it's going to add 6,7,8, all the way to 10.2186

Then, you get your value, 45.2208

Notice, we didn't actually pass any argument here, but if you do pass an argument, 0, notice it's still the same 45.2212

It defaults to 0 by itself.2221

You can also have a starting state, so if I put a starting state of 2, it ends up with 45 instead of 45 there.2225

This inject method is quite handy, depending on what block of process you are doing in your object.2237

If you have a number of elements, you can use this each method, and it will process it to do some type of total.2247

Here is an example: if inject is passed a symbol, each element will be passed to the main method; so we have this 5..10 range; we have a symbol here that says I'm going to do some multiplication.2256

It's getting bigger, so let's do that...and then it's going to just multiply all of those numbers together.2272

Also, remember, reduce is the same as inject--so that is why we're using reduce now.2281

And then I do 2; if I do 2, which is my starter state, it's going to do 2 times 5, all the way to 10--whereas the first one, it defaults to just one.2288

You have to notice how there is a difference there...so this is...times 2 will get you that value.2306

Other than that, that is the end of the Educator loops course.2320

Thanks for being here, and we will see you next time!2329

Educator®

Please sign in for full access to this lesson.

Sign-InORCreate Account

Enter your Sign-on user name and password.

Forgot password?

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.

Use this form or mail us to .

For support articles click here.