Bird
Raised Fist0
Rubyprogramming~10 mins

Block given? check in Ruby - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to check if a block is given.

Ruby
def greet
  if [1]
    yield
  else
    puts "No block given"
  end
end
Drag options to blanks, or click blank then click option'
Ablock?
Bblock_given?
Cblock_given
Dgiven_block?
Attempts:
3 left
💡 Hint
Common Mistakes
Using block_given without the question mark
Using block? which is not a Ruby method
Using given_block? which does not exist
2fill in blank
medium

Complete the code to print a message only if a block is given.

Ruby
def check
  puts "Block is given" if [1]
end
Drag options to blanks, or click blank then click option'
Ablock_given?
Bblock_given
Cgiven_block?
Dblock?
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting the question mark in block_given?
Using block_given without parentheses
3fill in blank
hard

Fix the error in the code to correctly check for a block.

Ruby
def run
  if [1]
    yield
  else
    puts "No block"
  end
end
Drag options to blanks, or click blank then click option'
Ablock_given?
Bblock_given
Cblock?
Dgiven_block?
Attempts:
3 left
💡 Hint
Common Mistakes
Using block_given without question mark
Using block? which is not a Ruby method
4fill in blank
hard

Fill both blanks to create a hash with word lengths only if block is given and length > 3.

Ruby
lengths = {word: [1] for word in words if [2]
Drag options to blanks, or click blank then click option'
Aword.length
Bblock_given?
Cword.length > 3
Dyield
Attempts:
3 left
💡 Hint
Common Mistakes
Using block_given? as a condition inside the hash comprehension
Using yield incorrectly in the hash comprehension
5fill in blank
hard

Fill all three blanks to create a hash with uppercase keys and values only if block is given and value > 0.

Ruby
result = { [1]: [2] for [3], v in data.items() if block_given? && v > 0 }
Drag options to blanks, or click blank then click option'
Ak.upcase
Bv
Ck
Dkey
Attempts:
3 left
💡 Hint
Common Mistakes
Using key instead of k as loop variable
Not converting keys to uppercase
Using block_given? incorrectly in the comprehension

Practice

(1/5)
1. What does the Ruby method block_given? check inside a method?
easy
A. If the method is defined inside a class
B. If the method has any parameters
C. If the method returns a value
D. If a block was passed to the method

Solution

  1. Step 1: Understand the purpose of block_given?

    This method returns true if the current method was called with a block passed to it.
  2. Step 2: Differentiate from other method checks

    It does not check parameters, return values, or class definitions, only the presence of a block.
  3. Final Answer:

    If a block was passed to the method -> Option D
  4. Quick Check:

    block_given? checks block presence = A [OK]
Hint: block_given? tells if a block is passed to method [OK]
Common Mistakes:
  • Confusing block_given? with method parameters
  • Thinking it checks return values
  • Assuming it checks class membership
2. Which of the following is the correct syntax to check if a block was given inside a Ruby method?
easy
A. if block_given then yield end
B. if block_given? () yield end
C. if block_given? then yield end
D. if block_given? yield () end

Solution

  1. Step 1: Identify correct method call syntax

    block_given? is a method and should be called with a question mark and optionally parentheses. The most common and clear syntax is block_given? without parentheses.
  2. Step 2: Confirm correct use of yield

    The yield keyword runs the block if it exists. The syntax if block_given? then yield end is correct and clear.
  3. Final Answer:

    if block_given? then yield end -> Option C
  4. Quick Check:

    Correct syntax uses block_given? and yield [OK]
Hint: Use block_given? with question mark and yield inside if [OK]
Common Mistakes:
  • Omitting question mark in block_given?
  • Using block_given without parentheses incorrectly
  • Calling yield with parentheses unnecessarily
3. What will be the output of this Ruby code?
def greet
  if block_given?
    yield
  else
    puts "Hello!"
  end
end

greet { puts "Hi there!" }
greet
medium
A. Hi there!\nHello!
B. Hello!\nHello!
C. Hi there!\nHi there!
D. No output

Solution

  1. Step 1: Analyze first greet call with block

    The first call passes a block that prints "Hi there!". Since block_given? is true, yield runs the block, printing "Hi there!".
  2. Step 2: Analyze second greet call without block

    The second call has no block, so block_given? is false and the else branch runs, printing "Hello!".
  3. Final Answer:

    Hi there!\nHello! -> Option A
  4. Quick Check:

    Block runs first, then default message = A [OK]
Hint: Block runs if given; else default runs [OK]
Common Mistakes:
  • Assuming yield runs even without block
  • Thinking both calls print the same message
  • Confusing order of outputs
4. Identify the error in this Ruby method:
def show
  yield if block_given
end

show { puts "Hello!" }
medium
A. Missing question mark in block_given method call
B. yield cannot be used without arguments
C. Method show requires a parameter
D. Block cannot be passed to show method

Solution

  1. Step 1: Check block_given usage

    The method block_given? requires the question mark and should be called as block_given? or block_given?(). Here it is missing the question mark.
  2. Step 2: Confirm yield usage

    The yield is correctly used and does not require arguments here. The method does not require parameters to accept a block.
  3. Final Answer:

    Missing question mark in block_given method call -> Option A
  4. Quick Check:

    block_given? needs question mark [OK]
Hint: Always use block_given? with question mark [OK]
Common Mistakes:
  • Omitting question mark in block_given
  • Thinking yield needs arguments always
  • Assuming method needs parameters for blocks
5. You want to write a Ruby method process_items that takes an array and optionally a block. If a block is given, it should yield each item to the block; otherwise, it should return the array unchanged. Which code correctly implements this behavior?
hard
A. def process_items(arr) arr.each { |item| yield item if block_given? } end
B. def process_items(arr) if block_given? arr.each { |item| yield item } else arr end end
C. def process_items(arr) if block_given arr.each { |item| yield item } else arr end end
D. def process_items(arr) arr.each { |item| yield item } end

Solution

  1. Step 1: Check block presence correctly

    def process_items(arr) if block_given? arr.each { |item| yield item } else arr end end uses block_given? correctly to check if a block is passed before yielding.
  2. Step 2: Handle both cases properly

    If a block is given, it yields each item; otherwise, it returns the original array unchanged, matching the requirement.
  3. Step 3: Review other options for errors

    def process_items(arr) arr.each { |item| yield item } end always yields without checking block presence, causing error if no block given. def process_items(arr) if block_given arr.each { |item| yield item } else arr end end misses question mark in block_given. def process_items(arr) arr.each { |item| yield item if block_given? } end yields conditionally inside each, but block_given? inside the each block always returns false so no yielding occurs, though it returns the array.
  4. Final Answer:

    def process_items(arr) if block_given? arr.each { |item| yield item } else arr end end -> Option B
  5. Quick Check:

    Check block_given? before yield and return array if no block [OK]
Hint: Check block_given? before yield; else return array [OK]
Common Mistakes:
  • Not checking block_given? before yield
  • Missing question mark in block_given
  • Returning nil instead of array when no block
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