Bird
Raised Fist0
Rubyprogramming~10 mins

Dynamic typing vs strong typing in Ruby - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - Dynamic typing vs strong typing
Start
↓
Assign variable
↓
Dynamic typing: variable type decided at runtime
↓
Use variable in operation
↓
Strong typing: type rules enforced
↓
If type mismatch: Error
↓
Operation succeeds if types compatible
↓
End
This flow shows how Ruby assigns variable types at runtime (dynamic typing) and enforces type rules during operations (strong typing).
Execution Sample
Ruby
x = 5
x = "hello"
result = x + 10
Assigns an integer to x, then a string, then tries to add a number to a string causing a type error.
Execution Table
StepCode LineVariable StateOperationResult/Output
1x = 5x = 5 (Integer)Assign integer 5 to xx holds integer 5
2x = "hello"x = "hello" (String)Assign string "hello" to xx now holds string "hello"
3result = x + 10x = "hello" (String)Add integer 10 to string xTypeError: String can't be coerced into Integer
💡 Execution stops at step 3 due to type error from adding integer to string.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3
xundefined5 (Integer)"hello" (String)"hello" (String)
resultundefinedundefinedundefinedundefined (error, not assigned)
Key Moments - 2 Insights
Why can x change from an integer to a string without error?
Because Ruby uses dynamic typing, the variable x can hold any type and changes type at runtime as shown in steps 1 and 2.
Why does adding a number to a string cause an error?
Ruby is strongly typed, so it does not allow mixing incompatible types in operations, causing a TypeError at step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the type of x after step 2?
AInteger
BString
CFloat
DUndefined
💡 Hint
Check the 'Variable State' column at step 2 in the execution table.
At which step does the program stop due to a type error?
AStep 1
BStep 2
CStep 3
DNo error occurs
💡 Hint
Look at the 'Result/Output' column for the error message.
If Ruby was not strongly typed, what would happen at step 3?
AIt would perform the addition without error
BIt would convert string to integer automatically
CIt would raise a different error
DIt would convert integer to string automatically
💡 Hint
Strong typing enforces type rules; without it, operations might succeed despite type differences.
Concept Snapshot
Dynamic typing means variables can hold any type and change type at runtime.
Strong typing means operations enforce type rules and prevent mixing incompatible types.
Ruby is dynamically and strongly typed.
Example: x = 5; x = "hello" works, but x + 10 causes error.
This helps catch type errors early during execution.
Full Transcript
This visual execution shows how Ruby handles dynamic and strong typing. First, variable x is assigned the integer 5. Then x is reassigned to the string "hello" without error because Ruby uses dynamic typing, allowing variables to change types at runtime. Next, the code tries to add 10 (an integer) to x (a string). Ruby raises a TypeError because it is strongly typed and does not allow mixing incompatible types in operations. The execution table tracks each step, showing variable states and the error at step 3. This helps learners see how dynamic typing allows flexible variable types, while strong typing enforces safe operations.

Practice

(1/5)
1. Which statement best describes Ruby's typing system?
easy
A. Ruby is dynamically typed and strongly typed.
B. Ruby is statically typed and weakly typed.
C. Ruby is statically typed and strongly typed.
D. Ruby is dynamically typed and weakly typed.

Solution

  1. Step 1: Understand dynamic typing

    Dynamic typing means variables can hold any type and change types anytime during execution.
  2. Step 2: Understand strong typing

    Strong typing means the language prevents mixing incompatible types without explicit conversion.
  3. Final Answer:

    Ruby is dynamically typed and strongly typed. -> Option A
  4. Quick Check:

    Dynamic + Strong = C [OK]
Hint: Remember Ruby allows type changes but checks type safety [OK]
Common Mistakes:
  • Confusing dynamic with static typing
  • Thinking Ruby allows unsafe type mixing
  • Mixing weak and strong typing concepts
2. Which Ruby code snippet shows dynamic typing in action?
easy
A. x = 10; x = "hello"
B. int x = 10; x = "hello"
C. var x: Integer = 10; x = "hello"
D. let x = 10; x = true

Solution

  1. Step 1: Identify Ruby syntax

    Ruby allows assigning different types to the same variable without error.
  2. Step 2: Check each option

    x = 10; x = "hello" uses Ruby syntax and changes x from integer to string, showing dynamic typing.
  3. Final Answer:

    x = 10; x = "hello" -> Option A
  4. Quick Check:

    Variable changes type dynamically = A [OK]
Hint: Look for variable reassignment with different types in Ruby syntax [OK]
Common Mistakes:
  • Choosing code with static typing syntax
  • Confusing variable declaration styles
  • Ignoring language-specific syntax rules
3. What will be the output of this Ruby code?
def add(a, b)
  a + b
end

puts add(5, "10")
medium
A. 15
B. TypeError
C. 510
D. nil

Solution

  1. Step 1: Analyze the method call

    The method add tries to add an integer (5) and a string ("10") using + operator.
  2. Step 2: Understand Ruby's strong typing

    Ruby does not automatically convert types for +; adding integer and string causes a TypeError.
  3. Final Answer:

    TypeError -> Option B
  4. Quick Check:

    Strong typing prevents int + string = B [OK]
Hint: Adding different types without conversion causes TypeError [OK]
Common Mistakes:
  • Assuming automatic string conversion
  • Expecting concatenation of numbers and strings
  • Ignoring Ruby's type safety rules
4. Identify the error in this Ruby code:
def multiply(x, y)
  x * y
end

result = multiply(3, "4")
puts result
medium
A. NameError for undefined variable
B. SyntaxError due to method definition
C. No error, outputs 12
D. TypeError due to multiplying integer and string

Solution

  1. Step 1: Check method parameters and call

    The method multiply is called with an integer (3) and a string ("4").
  2. Step 2: Understand Ruby's type rules for *

    Multiplying integer by string without conversion causes a TypeError in Ruby.
  3. Final Answer:

    TypeError due to multiplying integer and string -> Option D
  4. Quick Check:

    Strong typing blocks int * string = A [OK]
Hint: Check operand types for * operator to avoid TypeError [OK]
Common Mistakes:
  • Thinking Ruby auto-converts string to integer
  • Assuming no error on mixed types
  • Confusing SyntaxError with TypeError
5. You want to write a Ruby method that adds two values but safely handles if one is a string representing a number. Which approach best uses Ruby's dynamic and strong typing?
hard
A. Convert both to strings and concatenate.
B. Add values directly without conversion.
C. Convert both to integers before adding using to_i method.
D. Use static type declarations for parameters.

Solution

  1. Step 1: Understand dynamic typing flexibility

    Ruby variables can hold any type, so inputs can be string or integer.
  2. Step 2: Use strong typing safety

    To avoid TypeError, convert strings to integers explicitly before adding.
  3. Step 3: Evaluate options

    Converting both to integers using to_i before adding is safe. Adding directly risks TypeError. Static type declarations are invalid in Ruby. Converting to strings performs concatenation instead of addition.
  4. Final Answer:

    Convert both to integers before adding using to_i method. -> Option C
  5. Quick Check:

    Dynamic + Strong typing = explicit conversion [OK]
Hint: Convert strings to numbers before math to avoid errors [OK]
Common Mistakes:
  • Ignoring type conversion before arithmetic
  • Assuming Ruby auto-converts types
  • Using static typing syntax in Ruby
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