Intro to Ruby

Class 4

Welcome!

Girl Develop It is here to provide affordable programs for adult women interested in learning web and software development in a judgment-free environment.

Some "rules"

  • We are here for you!
  • Every question is important.
  • Help each other.
  • Have fun!

Girl Develop It is dedicated to providing a harrasment free learning experience for everyone.
For more information, see our Code of Conduct.

Homework Discussion

How was last week's homework?

Do you have any questions or concepts that you'd like to discuss?

The Homework was:

Expand upon englishNumber.

Use the ask method to enhance your text-based Adventure game.

What other methods did you make?

Review

  • Methods
  • Objects
  • Brief Discussion of Classes

What would you like to see reviewed?

Built in classes of Ruby

Ruby has many classes predefined:

  • String
  • Integer
  • Float
  • Array
  • Hash

They are commonly used object types, and have methods associated with them already. How convenient!


              a = Array.new
              b = String.new

              

Built in classes of Ruby

When we create new objects from these classes,
we can do things with them immediately.

To see all methods associated with an object or class,
run .methods on it.


              b = "holy cow!"
              b.methods
              

You can view all the built in classes and their associated methods in the Ruby documentation.

Creating a Class

It's very easy to create your own classes in Ruby.


              # die.rb
              class Die

                def roll
                   @numberShowing = 1 + rand(6)
                  #rand(6) returns a random-ish number between 0-5
                end

                def showing
                  return @numberShowing
                end

              end
              

Inside the class, define its methods.

Creating a Class

You can use your class right away by loading it into IRB.


                #in irb
                load 'die.rb'
                die = Die.new
                die.roll
                puts die.showing
                

You can use it in another file by requiring it. We'll discuss this later.

Refactoring a Class

What is the result of calling the showing method on a newly-created, un-rolled Die object?

We can avoid this by calling the roll method as part of the creation of a new instance of Die.


              # die.rb
              class Die

                def initialize
                  roll
                end

                def roll
                   @numberShowing = 1 + rand(6)
                end

                def showing
                  @numberShowing
                end

              end
              

Let's Develop It

  • In your text editor, create a "Character" class with an initialize method that sets the Character's name, and at least one other method.
  • Open IRB and load the class. Create one or more objects from the class and run some methods on them.
  • You could use the next slides as an example.

Example of creating a class


            # in character.rb
            class Character

              def initialize(name)
                @name = name
                @health = 10
              end

              def heal
                @health += 6
              end

              def adventure
                if @health > 0
                  puts "#{@name} goes on a great adventure and meets a dragon!"
                  puts "The dragon hugged #{@name} kind of hard..."
                  @health -= 5
                else
                  puts "#{@name} is dead :("
                  exit
                end
              end

            end
            

Running example program in IRB


                    # in irb
                    load 'character.rb'
                    me = Character.new("Cheri")
                    me.adventure
                    me.heal
                    me.adventure
                    # repeat until you're done having fun

                    

Inheritance

Classes can inherit from one other class.

All elves are characters, so if all characters have an adventure method, so do all elves.

Elves may also have their own methods that other characters do not.

Inheritance

Denote that Elf inherits from Character by using the < symbol


            # in character.rb, after Character class code
            class Elf < Character
              def twinkle
                puts "I'm super magical!"
              end
            end

            #in irb
            load 'character.rb'
            me = Elf.new("Cheri")
            me.adventure
            me.twinkle
            

Notice that the initialize method was also inherited, as our new Elf knows its name and started off with 10 health.

Inheritance

Subclasses may differ from from their super classes in some ways. Methods can be overwritten when this is the case.


              # in character.rb, after Character class code
              class Elf < Character
                def twinkle
                  puts "I'm super magical!"
                end

                def heal
                  @health += 8 # it's easier to heal when you're magic
                end
              end

              #in irb
              load 'character.rb'
              me = Elf.new("Cheri")
              me.heal
              

More information about inheritance can be found here.

Putting it all together

For a command line program, you need these pieces:

  1. File(s) containing your class definitions
  2. A file containing your program, which requires the class file(s)
  3. To call the program file from the command line (not IRB)

Putting it all together

The file containing your class definitions, here called character.rb:


              # character.rb

              class Character
                # contents of class here
              end

              class Elf < Character
                # contents of class here
              end
                    

Putting it all together

The file containing your program, here called adventure.rb, which will run from the command line and requires the class file:


            # adventure.rb

            require_relative 'character.rb'
              #file path relative to the location of adventure.rb file
            require_relative 'die.rb'


            puts "Your name?"
            char = Character.new(gets.chomp)
            # plus lots more adventuring.....
            

Putting it all together

Call the program file from the command line:


              #in command line
              ruby adventure.rb
              # then have some fun!
                    

Let's Develop It

Putting it all together: A role-playing game!

  • If you didn't write a Character class, copy and paste the code to get one started.
  • Create a few subclasses of Character.
  • Write a command-line program that calls your character and die classes to allow the user to have an adventure!
  • Maybe user can choose their character type?
  • Maybe the user's progress will be dependent on outcome of dice-rolling?

Questions?

Further Resources

Ruby-doc.org Official Ruby Documentation
Project Euler Offers tons of small math problems to be solved via programming, plus forums to share and discuss solutions
Ruby Monk Free, interactive, in-browser tutorials
Ruby the Hard Way Fun, free (HTML version) book with great information about programming
Sinatra A basic web app framework that runs on Ruby
The Rails Tutorial The Rails web app framework is the most popular use of Ruby... are you ready to dive in?

Homework

Practice: Make your final project even bigger and better! BONUS: Post it someplace so we can all play it!

If you're taking this class as part of a job plan, attend a Dayton Ruby Brigage or Dayton Dynamic Languages meet ups and talk to a couple of strangers about what you've learned and what you're excited about doing with programming.

Intro to Programming in Ruby

@gdidayton   |   #GDIDAY3


We are done! You are all offically programmers!

We have done a lot, I know you have questions so ask them!

Setup   |   Class 1   |   Class 2   |   Class 3   |   Class 4