Bird
Raised Fist0
Rubyprogramming~5 mins

Method naming conventions (? and ! suffixes) in Ruby

Choose your learning style10 modes available
Introduction

These suffixes help you understand what a method does just by its name. They make your code easier to read and safer to use.

When you want to create a method that answers a yes/no question.
When you want to show a method might change the object it is called on.
When you want to warn users that a method is 'dangerous' or has side effects.
When you want to make your code clearer and easier to understand for others.
Syntax
Ruby
def method_name?
  # returns true or false
end

def method_name!
  # modifies the object or is 'dangerous'
end

Methods ending with ? should always return true or false.

Methods ending with ! usually change the object or do something risky.

Examples
This method checks if something is empty and returns true or false.
Ruby
def empty?
  @items.empty?
end
This method tries to save data and will raise an error if it cannot, showing it is 'dangerous'.
Ruby
def save!
  # saves data and raises error if it fails
end
Use ? for methods that answer a question about the object.
Ruby
def valid?
  # returns true if data is valid, false otherwise
end
Use ! for methods that modify the object or have important side effects.
Ruby
def update!
  # updates the object and may raise an error
end
Sample Program

This program shows a class with a ? method to check if the name is empty and a ! method to change the name to uppercase.

Ruby
class User
  attr_accessor :name

  def initialize(name)
    @name = name
  end

  def name_empty?
    @name.empty?
  end

  def upcase_name!
    @name.upcase!
  end
end

user = User.new("")
puts user.name_empty?  # true
user.name = "alice"
puts user.name_empty?  # false
user.upcase_name!
puts user.name        # ALICE
OutputSuccess
Important Notes

Not all methods with ! are dangerous, but they usually change the object.

Ruby does not enforce these rules, but following them helps others understand your code.

Use ? only for methods that return true or false.

Summary

Use ? at the end of method names that return true or false.

Use ! at the end of method names that modify the object or are 'dangerous'.

These conventions make your code easier to read and safer to use.

Practice

(1/5)
1. Which method name follows Ruby convention for a method that returns a boolean value?
? is used at the end of method names that return true or false.
easy
A. save
B. update!
C. calculate
D. valid?

Solution

  1. Step 1: Understand the meaning of ? suffix

    In Ruby, methods ending with ? return true or false, indicating a boolean check.
  2. Step 2: Identify the method that returns a boolean

    Among the options, valid? clearly suggests a boolean check, while others do not.
  3. Final Answer:

    valid? -> Option D
  4. Quick Check:

    Boolean methods end with ? = valid? [OK]
Hint: Boolean methods end with ? to show true/false result [OK]
Common Mistakes:
  • Confusing ! with ? suffix
  • Using ? for methods that modify objects
  • Not using ? for boolean-returning methods
2. Which of the following method names is correctly written to indicate it modifies the object in Ruby?
easy
A. delete
B. delete!
C. delete?
D. deleted

Solution

  1. Step 1: Understand the meaning of ! suffix

    In Ruby, methods ending with ! usually modify the object or perform a 'dangerous' action.
  2. Step 2: Identify the method that modifies the object

    delete! clearly indicates modification, while delete may not, and delete? suggests a boolean check.
  3. Final Answer:

    delete! -> Option B
  4. Quick Check:

    Modification methods end with ! = delete! [OK]
Hint: Use ! for methods that change the object [OK]
Common Mistakes:
  • Using ? instead of ! for modifying methods
  • Not adding ! for dangerous methods
  • Confusing method names without suffixes
3. What will be the output of this Ruby code?
class User
  def active?
    true
  end

  def deactivate!
    @active = false
    "User deactivated"
  end
end

user = User.new
puts user.active?
puts user.deactivate!
puts user.active?
medium
A. true User deactivated true
B. true User deactivated false
C. false User deactivated false
D. true User deactivated nil

Solution

  1. Step 1: Analyze the active? method

    This method always returns true because it returns the literal true without checking any variable.
  2. Step 2: Analyze the deactivate! method and second active? call

    deactivate! sets @active = false but active? does not use @active, so it still returns true.
  3. Final Answer:

    true User deactivated true -> Option A
  4. Quick Check:

    active? returns true always = true User deactivated true [OK]
Hint: Check if boolean method uses instance variables or fixed return [OK]
Common Mistakes:
  • Assuming deactivate! changes active? output
  • Confusing method side effects
  • Ignoring method return values
4. Identify the error in this Ruby method definition:
def save?
  # saves the object
  puts "Saving..."
  true
end

What is wrong with this method name?
medium
A. Method name cannot contain ?
B. Method should end with ! instead of ?
C. Method ends with ? but performs an action, not a boolean check
D. No error, method is correct

Solution

  1. Step 1: Understand the meaning of ? suffix

    Methods ending with ? should return true or false and not perform side effects like saving.
  2. Step 2: Analyze the method behavior

    This method prints "Saving..." which is a side effect, so it should not end with ?.
  3. Final Answer:

    Method ends with ? but performs an action, not a boolean check -> Option C
  4. Quick Check:

    Methods with ? should not have side effects [OK]
Hint: ? means boolean check, not side effects [OK]
Common Mistakes:
  • Using ? for methods that change state
  • Ignoring method side effects
  • Confusing ! and ? suffix meanings
5. You want to write a Ruby method that checks if a string is empty and also a method that clears the string content. Which method names follow Ruby conventions?
hard
A. empty? and clear!
B. empty! and clear?
C. empty and clear!
D. empty? and clear

Solution

  1. Step 1: Identify boolean check method

    The method checking if a string is empty should return true or false, so it should end with ?, e.g., empty?.
  2. Step 2: Identify modifying method

    The method that clears the string modifies it, so it should end with !, e.g., clear!.
  3. Final Answer:

    empty? and clear! -> Option A
  4. Quick Check:

    Boolean check ends with ?; modifying method ends with ! [OK]
Hint: Boolean methods end with ?; modifying methods end with ! [OK]
Common Mistakes:
  • Swapping ? and ! suffixes
  • Not using suffixes for clarity
  • Using no suffix for modifying methods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard