diff --git a/research/activity37-programming-languages.yaml b/research/activity37-programming-languages.yaml index 521cbc7..a0fb74e 100644 --- a/research/activity37-programming-languages.yaml +++ b/research/activity37-programming-languages.yaml @@ -112,11 +112,41 @@ sections: title: Displaying Output content_blocks: - '## Your First Program: Hello World! 👋' - - The traditional first program in any language is 'Hello World' - a program that displays text to the screen. - '' - - '**In programming, we use stdout (standard output) to display messages.**' + - '### What is "Hello World"?' + - The traditional first program in any language is 'Hello World' - a program that displays text to the screen. This tradition dates back to the 1970s and serves as a simple test that your programming environment is working correctly. - '' - - 'Different languages have different ways to write to stdout, but they all do the same thing: show text to the user.' + - '### Understanding Standard Output (stdout)' + - '**What is stdout?** Standard output (stdout) is the default destination where programs send their text output. When you run a program in a terminal or console, stdout is what displays on the screen.' + - '' + - '**Why is this important?** Almost every program needs to communicate with its users. Whether it''s displaying results, showing error messages, or presenting information, stdout is the fundamental way programs "talk" to people.' + - '' + - '### How Different Languages Display Output' + - 'Every programming language has its own syntax, but they all accomplish the same goal. Here are examples across different languages:' + - '' + - '**Python:** Uses `print()` function' + - '```python' + - 'print("Hello, World!")' + - '```' + - '' + - '**JavaScript:** Uses `console.log()` function' + - '```javascript' + - 'console.log("Hello, World!");' + - '```' + - '' + - '**Java:** Uses `System.out.println()` method' + - '```java' + - 'System.out.println("Hello, World!");' + - '```' + - '' + - '**C++:** Uses `std::cout` stream' + - '```cpp' + - 'std::cout << "Hello, World!" << std::endl;' + - '```' + - '' + - '**Key Concept:** Notice that while the syntax differs, each language has a way to send text to stdout. The quotes around "Hello, World!" indicate it''s a **string** (text data).' + - '' + - '### Now It''s Your Turn!' question: How do you display 'Hello, World!' to stdout in your chosen language? Write the complete code. tokens_for_ai: 'IMPORTANT: Get the student''s chosen language from metadata (programming_language). @@ -226,9 +256,39 @@ sections: title: Multiple Outputs content_blocks: - '## Displaying Multiple Lines' - - Great! Now let's display multiple messages. - '' - - You can write to stdout multiple times in a row to display several lines of text. + - '### Building on What You''ve Learned' + - Great! Now that you can display one message, let's display multiple messages. This is a fundamental skill because real programs often need to show multiple pieces of information. + - '' + - '### Two Ways to Display Multiple Lines' + - '' + - '**Method 1: Multiple Output Statements**' + - You can call your output function multiple times in sequence. Each call displays one line. + - '' + - '**Example in Python:**' + - '```python' + - 'print("First line")' + - 'print("Second line")' + - 'print("Third line")' + - '```' + - '' + - '**Method 2: Newline Characters**' + - Many languages support special characters like `\n` (newline) that create line breaks within a single string. + - '' + - '**Example in Python:**' + - '```python' + - 'print("First line\nSecond line\nThird line")' + - '```' + - '' + - '### Understanding Newlines' + - The `\n` is called an "escape sequence" - a special character that represents a line break. When the computer sees `\n`, it moves to the next line.' + - '' + - '**Why use multiple statements vs newlines?**' + - '- Multiple statements are clearer and easier to read' + - '- Newlines are more compact and useful when you have a long block of text' + - '- Both are valid approaches!' + - '' + - '### Now It''s Your Turn!' question: 'Write a program that displays three lines to stdout: ''My first program'', ''Learning to code'', and ''This is fun!'' (each on its own line)' tokens_for_ai: 'The student should write code in THEIR chosen language (from metadata) that outputs three lines. @@ -323,15 +383,78 @@ sections: title: Creating Variables content_blocks: - '## Variables: Storing Information 📦' - - Variables let you store and reuse data in your programs. - '' + - '### What Are Variables?' + - Variables are one of the most fundamental concepts in programming. A variable is a named storage location in your computer''s memory that holds a value. Think of it as a labeled container where you can store information and retrieve it later. + - '' + - '### Why Do We Need Variables?' + - Imagine if you could only work with literal values. You''d have to write "Alice" everywhere you need that name. But with a variable, you write the name once, and then use the variable name to refer to it. This makes your code:' + - '- **Reusable:** Use the same value in multiple places' + - '- **Maintainable:** Change the value in one place, and it updates everywhere' + - '- **Dynamic:** The value can change while the program runs' + - '- **Readable:** `username` is clearer than "alice123"' + - '' + - '### The Box Analogy' - '**Think of a variable as a labeled box:**' - - '- The label is the variable name' - - '- The contents is the value' - - '- You can look inside the box (read the value)' - - '- You can change what''s inside (update the value)' + - '- **The label** = the variable name (like `name`, `age`, `score`)' + - '- **The contents** = the value stored inside (like `"Alice"`, `25`, `100`)' + - '- **Reading** = looking inside the box to see what''s there' + - '- **Writing/Updating** = putting new contents in the box' - '' - - Different languages have different syntax for creating variables, but the concept is universal. + - '### Variable Naming Rules' + - 'Most languages follow similar rules for naming variables:' + - '- Start with a letter or underscore (not a number)' + - '- Can contain letters, numbers, and underscores' + - '- Cannot use reserved words (like `if`, `for`, `while`)' + - '- **Case-sensitive:** `name` and `Name` are different variables' + - '' + - '**Good names:** `user_name`, `total_score`, `isActive`, `playerHealth`' + - '**Bad names:** `x`, `temp`, `asdf`, `thing1`' + - '' + - '### How to Create Variables in Different Languages' + - '' + - '**Python (dynamically typed):**' + - '```python' + - 'name = "Alice" # Create variable and assign value' + - 'print(name) # Display the variable''s value' + - '```' + - '' + - '**JavaScript (dynamically typed):**' + - '```javascript' + - 'let name = "Alice"; // Declare with let' + - 'console.log(name); // Display' + - '```' + - '' + - '**Java (statically typed):**' + - '```java' + - 'String name = "Alice"; // Must specify type' + - 'System.out.println(name); // Display' + - '```' + - '' + - '**C++ (statically typed):**' + - '```cpp' + - 'std::string name = "Alice"; // Must specify type' + - 'std::cout << name << std::endl; // Display' + - '```' + - '' + - '### Key Differences' + - '**Dynamically typed languages** (Python, JavaScript, Ruby): You don''t declare the type. The language figures it out automatically.' + - '' + - '**Statically typed languages** (Java, C++, C#, Go): You must specify the type (String, int, etc.) when creating a variable.' + - '' + - '### The Assignment Operator' + - 'The `=` sign is the **assignment operator**. It means "assign the value on the right to the variable on the left."' + - '' + - '```' + - 'name = "Alice"' + - '│ │' + - '│ └── The value (what goes in the box)' + - '└── The variable name (the label on the box)' + - '```' + - '' + - '**Important:** In programming, `=` means assignment, NOT mathematical equality! To test equality, most languages use `==`.' + - '' + - '### Now It''s Your Turn!' question: Write a program that creates a variable called 'name' with your name as the value, then displays it to stdout. tokens_for_ai: 'Check that student writes code in THEIR language that: @@ -438,15 +561,108 @@ sections: title: Data Types content_blocks: - '## Understanding Data Types' - - 'Variables can hold different types of data:' - '' - - '**Common data types:**' - - '- **Strings:** Text ("hello")' - - '- **Integers:** Whole numbers (42)' - - '- **Floats/Decimals:** Numbers with decimal points (3.14)' - - '- **Booleans:** True or false values' + - '### What Are Data Types?' + - 'Just as in real life we have different kinds of information (names, ages, prices, yes/no answers), programming has different **data types** to represent different kinds of values. The type of data determines what operations you can perform on it.' - '' - - Some languages require you to specify the type (statically typed), others figure it out automatically (dynamically typed). + - '### Why Data Types Matter' + - 'Data types tell the computer:' + - '- How much memory to allocate' + - '- What operations are valid (you can add numbers, but adding text doesn''t make mathematical sense)' + - '- How to interpret the bits in memory' + - '' + - 'For example: `"25" + "10"` (strings) might give `"2510"` (concatenation), but `25 + 10` (numbers) gives `35` (addition).' + - '' + - '### The Four Fundamental Data Types' + - '' + - '**1. Strings (Text)**' + - '- Represent text and characters' + - '- Enclosed in quotes: `"hello"`, `''world''`, `"Alice"`' + - '- Can contain letters, numbers, spaces, symbols' + - '- Examples: names, addresses, messages, file paths' + - '' + - '**2. Integers (Whole Numbers)**' + - '- Whole numbers without decimal points' + - '- Can be positive, negative, or zero' + - '- Examples: `42`, `-17`, `0`, `1000`' + - '- Used for: counting, indexing, discrete quantities' + - '' + - '**3. Floats/Doubles (Decimal Numbers)**' + - '- Numbers with decimal points' + - '- More precision for measurements' + - '- Examples: `3.14`, `-0.5`, `2.71828`, `1.75`' + - '- Used for: measurements, prices, scientific calculations' + - '- Note: "Float" = single precision, "Double" = double precision' + - '' + - '**4. Booleans (True/False)**' + - '- Only two possible values: `true` or `false`' + - '- Used for: decisions, conditions, flags' + - '- Examples: `isActive`, `hasPermission`, `gameOver`' + - '- We''ll use these heavily with if statements later!' + - '' + - '### Static vs Dynamic Typing' + - '' + - '**Statically Typed Languages** (Java, C++, C#, Go, Rust):' + - '- You MUST declare the type when creating a variable' + - '- Type cannot change after declaration' + - '- Catches type errors before the program runs' + - '' + - '**Example in Java:**' + - '```java' + - 'int age = 25; // Integer type' + - 'double height = 1.75; // Decimal type' + - 'String city = "Tokyo"; // String type' + - 'boolean isStudent = true; // Boolean type' + - '```' + - '' + - '**Dynamically Typed Languages** (Python, JavaScript, Ruby, PHP):' + - '- Type is inferred automatically from the value' + - '- Variables can hold different types at different times' + - '- More flexible but less type safety' + - '' + - '**Example in Python:**' + - '```python' + - 'age = 25 # Python knows it''s an integer' + - 'height = 1.75 # Python knows it''s a float' + - 'city = "Tokyo" # Python knows it''s a string' + - 'is_student = True # Python knows it''s a boolean' + - '```' + - '' + - '### Combining Strings and Variables in Output' + - 'When displaying variables with labels, you need to combine strings and values. Different languages have different approaches:' + - '' + - '**Python - f-strings (modern):**' + - '```python' + - 'age = 25' + - 'print(f"Age: {age}") # Output: Age: 25' + - '```' + - '' + - '**JavaScript - template literals:**' + - '```javascript' + - 'let age = 25;' + - 'console.log(`Age: ${age}`); // Output: Age: 25' + - '```' + - '' + - '**Java - concatenation:**' + - '```java' + - 'int age = 25;' + - 'System.out.println("Age: " + age); // Output: Age: 25' + - '```' + - '' + - '**C++ - stream insertion:**' + - '```cpp' + - 'int age = 25;' + - 'std::cout << "Age: " << age << std::endl; // Output: Age: 25' + - '```' + - '' + - '### Type Conversion' + - 'Sometimes you need to convert between types:' + - '- String to number: `int("25")` (Python), `parseInt("25")` (JavaScript)' + - '- Number to string: `str(25)` (Python), `String.valueOf(25)` (Java)' + - '- Integer to float: Usually automatic in most languages' + - '' + - '### Now It''s Your Turn!' + - 'Practice working with multiple data types by creating variables of different types and displaying them with descriptive labels.' question: 'Write a program with three variables: an integer (age), a decimal/float (height in meters), and a string (city). Display all three with labels, like ''Age: 25'', ''Height: 1.75'', ''City: Tokyo''' tokens_for_ai: 'Check that student creates three variables of different types and outputs them with labels. @@ -563,14 +779,120 @@ sections: - step_id: step_1 title: If Statements content_blocks: - - '## Conditional Logic 🔀' - - Programs need to make decisions based on conditions. + - '## Conditional Logic: Making Decisions 🔀' - '' - - '**If statements** let your code take different paths:' - - '- IF condition is true, do this' - - '- ELSE, do that' + - '### What Is Conditional Logic?' + - 'Up until now, your programs have been linear - they execute every line in order from top to bottom. But real programs need to make **decisions** based on different situations. This is called **conditional logic** or **branching**.' - '' - - This is how programs respond to different situations! + - '### Why Do We Need Conditionals?' + - 'Think about everyday decisions:' + - '- "IF it''s raining, take an umbrella. ELSE, leave it at home."' + - '- "IF you have enough money, buy the item. ELSE, save up more."' + - '- "IF the user is logged in, show their dashboard. ELSE, show the login page."' + - '' + - 'Programs need to make similar decisions based on the current state or user input.' + - '' + - '### The If Statement' + - 'An **if statement** tests a **condition** (something that evaluates to true or false) and executes code only if that condition is true.' + - '' + - '**Basic structure:**' + - '```' + - 'IF condition is true:' + - ' execute this code' + - '```' + - '' + - '**With else:**' + - '```' + - 'IF condition is true:' + - ' execute this code' + - 'ELSE:' + - ' execute this other code' + - '```' + - '' + - '### Comparison Operators' + - 'To test conditions, we use **comparison operators** that compare two values and return true or false:' + - '' + - '- `==` Equal to (Note: double equals for comparison, single = for assignment!)' + - '- `!=` Not equal to' + - '- `>` Greater than' + - '- `<` Less than' + - '- `>=` Greater than or equal to' + - '- `<=` Less than or equal to' + - '' + - '**Examples:**' + - '- `age >= 18` → true if age is 18 or more, false otherwise' + - '- `score == 100` → true if score is exactly 100' + - '- `temperature > 30` → true if temperature exceeds 30' + - '' + - '### If/Else in Different Languages' + - '' + - '**Python:**' + - '```python' + - 'age = 20' + - 'if age >= 18:' + - ' print("Adult")' + - 'else:' + - ' print("Minor")' + - '```' + - 'Note: Python uses **indentation** to show which code belongs to the if/else blocks. Colons (`:`) start each block.' + - '' + - '**JavaScript:**' + - '```javascript' + - 'let age = 20;' + - 'if (age >= 18) {' + - ' console.log("Adult");' + - '} else {' + - ' console.log("Minor");' + - '}' + - '```' + - 'Note: Curly braces `{}` group the code blocks. Condition must be in parentheses `()`.' + - '' + - '**Java:**' + - '```java' + - 'int age = 20;' + - 'if (age >= 18) {' + - ' System.out.println("Adult");' + - '} else {' + - ' System.out.println("Minor");' + - '}' + - '```' + - 'Similar to JavaScript - uses braces and parentheses.' + - '' + - '**C++:**' + - '```cpp' + - 'int age = 20;' + - 'if (age >= 18) {' + - ' std::cout << "Adult" << std::endl;' + - '} else {' + - ' std::cout << "Minor" << std::endl;' + - '}' + - '```' + - '' + - '### Multiple Conditions (Else If)' + - 'You can chain multiple conditions using else-if:' + - '' + - '```python' + - 'if age < 13:' + - ' print("Child")' + - 'elif age < 18: # else if in Python' + - ' print("Teen")' + - 'else:' + - ' print("Adult")' + - '```' + - '' + - '### How the Computer Evaluates Conditionals' + - '1. Evaluate the condition (does it produce true or false?)' + - '2. If true, execute the if block and skip the else' + - '3. If false, skip the if block and execute the else' + - '4. Continue with the rest of the program' + - '' + - '### Boolean Logic' + - 'Remember boolean data types? Conditions always evaluate to a boolean:' + - '- `age >= 18` → evaluates to `true` or `false`' + - '- You can also use boolean variables directly: `if isLoggedIn:`' + - '' + - '### Now It''s Your Turn!' + - 'Practice conditional logic by writing an if/else statement that checks age and displays different messages.' question: 'Write a program that: creates a variable for age, then uses an if/else statement to display ''Adult'' if age is 18 or older, or ''Minor'' if younger. Test with age = 20.' tokens_for_ai: 'Check their if/else code in their chosen language. @@ -677,13 +999,129 @@ sections: title: Loops content_blocks: - '## Loops: Repeating Actions 🔁' - - Loops let you repeat code multiple times without writing it over and over. - '' - - '**Common loop types:**' - - '- **For loop:** Repeat a specific number of times' - - '- **While loop:** Repeat as long as a condition is true' + - '### What Are Loops?' + - 'Imagine you want to display numbers 1 through 1000. Would you write 1000 print statements? Of course not! **Loops** let you repeat code multiple times without writing it over and over.' - '' - - Loops are essential for processing lists, counting, and repetitive tasks. + - '### Why Do We Need Loops?' + - 'Loops are essential for:' + - '- **Repetitive tasks:** Displaying numbers, processing items, running calculations' + - '- **Collections:** Going through every element in a list or array' + - '- **Automation:** Doing the same thing many times efficiently' + - '- **Iteration:** Repeating until a goal is reached' + - '' + - 'Without loops, programs would be extremely limited and repetitive!' + - '' + - '### The Two Main Types of Loops' + - '' + - '**1. For Loop (Counting Loop)**' + - '- Use when you know HOW MANY times to repeat' + - '- Has a counter variable that changes each iteration' + - '- Best for: counting, iterating a specific number of times' + - '' + - '**2. While Loop (Conditional Loop)**' + - '- Use when you want to repeat UNTIL a condition becomes false' + - '- Keeps going as long as the condition is true' + - '- Best for: unknown number of repetitions, waiting for something to happen' + - '' + - '### For Loops in Detail' + - 'A for loop typically has three parts:' + - '1. **Initialization:** Set up a counter variable' + - '2. **Condition:** When to stop looping' + - '3. **Update:** How to change the counter after each iteration' + - '' + - '### For Loops in Different Languages' + - '' + - '**Python (using range):**' + - '```python' + - 'for i in range(1, 6): # Start at 1, stop before 6 (so 1,2,3,4,5)' + - ' print(i)' + - '```' + - 'Python''s `range(start, stop)` generates numbers from start up to (but not including) stop.' + - '' + - '**JavaScript (C-style):**' + - '```javascript' + - 'for (let i = 1; i <= 5; i++) { // Start; Condition; Increment' + - ' console.log(i);' + - '}' + - '```' + - 'Breaking it down:' + - '- `let i = 1` - Initialize counter to 1' + - '- `i <= 5` - Keep going while i is 5 or less' + - '- `i++` - Add 1 to i after each iteration (`++` means increment by 1)' + - '' + - '**Java (same as JavaScript):**' + - '```java' + - 'for (int i = 1; i <= 5; i++) {' + - ' System.out.println(i);' + - '}' + - '```' + - '' + - '**C++ (same pattern):**' + - '```cpp' + - 'for (int i = 1; i <= 5; i++) {' + - ' std::cout << i << std::endl;' + - '}' + - '```' + - '' + - '**Ruby:**' + - '```ruby' + - '(1..5).each do |i| # Range from 1 to 5' + - ' puts i' + - 'end' + - '```' + - '' + - '**Go:**' + - '```go' + - 'for i := 1; i <= 5; i++ {' + - ' fmt.Println(i)' + - '}' + - '```' + - '' + - '### How a For Loop Executes' + - 'Let''s trace through `for (let i = 1; i <= 5; i++)`:' + - '' + - '1. **Iteration 1:** i=1, check 1<=5 (true), print 1, increment to i=2' + - '2. **Iteration 2:** i=2, check 2<=5 (true), print 2, increment to i=3' + - '3. **Iteration 3:** i=3, check 3<=5 (true), print 3, increment to i=4' + - '4. **Iteration 4:** i=4, check 4<=5 (true), print 4, increment to i=5' + - '5. **Iteration 5:** i=5, check 5<=5 (true), print 5, increment to i=6' + - '6. **Check:** i=6, check 6<=5 (false), exit loop' + - '' + - '### The Loop Variable' + - 'The variable `i` is called the **loop variable** or **counter**:' + - '- Common names: `i`, `j`, `k` (for nested loops), or descriptive names like `count`, `index`' + - '- It automatically updates each iteration' + - '- You can use it inside the loop for calculations or display' + - '' + - '### Common Loop Patterns' + - '' + - '**Count from 0 to N-1:**' + - '```python' + - 'for i in range(5): # 0, 1, 2, 3, 4' + - ' print(i)' + - '```' + - '' + - '**Count by 2s:**' + - '```python' + - 'for i in range(0, 11, 2): # 0, 2, 4, 6, 8, 10' + - ' print(i)' + - '```' + - '' + - '**Count backwards:**' + - '```python' + - 'for i in range(5, 0, -1): # 5, 4, 3, 2, 1' + - ' print(i)' + - '```' + - '' + - '### Avoiding Infinite Loops' + - 'Make sure your loop will eventually end! Common mistakes:' + - '- Forgetting to increment the counter' + - '- Wrong condition (using `<` when you need `>`)' + - '- Modifying the counter incorrectly inside the loop' + - '' + - '### Now It''s Your Turn!' + - 'Practice loops by writing a simple counting loop that displays numbers 1 through 5.' question: Write a program using a for loop that displays the numbers 1 through 5 to stdout, each on its own line. tokens_for_ai: 'Check their for loop code in their chosen language. @@ -810,18 +1248,153 @@ sections: - step_id: step_1 title: Creating Functions content_blocks: - - '## Functions: Organize Your Code 📦' - - Functions let you group code into reusable blocks that you can call by name. + - '## Functions: Organize and Reuse Your Code 📦' - '' - - '**Benefits of functions:**' - - '- Reusability (write once, use many times)' - - '- Organization (break complex programs into manageable pieces)' - - '- Abstraction (hide implementation details)' + - '### What Are Functions?' + - 'A **function** is a named block of reusable code that performs a specific task. Think of it as a mini-program within your program. Functions are one of the most important concepts in programming because they let you organize code and avoid repetition.' - '' - - '**Functions can:**' - - '- Take inputs (parameters/arguments)' - - '- Perform actions' - - '- Return outputs (return values)' + - '### Why Do We Need Functions?' + - '' + - '**Without functions, code becomes:**' + - '- Repetitive (copy-paste the same code everywhere)' + - '- Hard to maintain (fix a bug in 50 places instead of 1)' + - '- Difficult to understand (one giant block of code)' + - '- Impossible to test in isolation' + - '' + - '**With functions, code becomes:**' + - '- **Reusable:** Write once, use many times' + - '- **Organized:** Break complex programs into manageable pieces' + - '- **Readable:** `calculateTax()` is clearer than 50 lines of math' + - '- **Testable:** Test each function independently' + - '- **Abstract:** Hide implementation details behind a simple name' + - '' + - '### Real-World Analogy' + - 'Think of functions like recipes in a cookbook:' + - '- Each recipe has a **name** ("Chocolate Cake")' + - '- Each recipe takes **ingredients** (inputs/parameters)' + - '- Each recipe has **instructions** (the function body - what it does)' + - '- Each recipe produces **a result** (output/return value)' + - '' + - 'You don''t rewrite the recipe every time you want cake - you just refer to it by name: "Make Chocolate Cake"' + - '' + - '### Anatomy of a Function' + - '' + - 'Every function has these parts:' + - '' + - '1. **Name:** What you call the function (`greet`, `calculateTotal`, `isValid`)' + - '2. **Parameters:** Inputs the function needs (optional)' + - '3. **Body:** The code that runs when you call the function' + - '4. **Return value:** What the function sends back (optional)' + - '' + - '**Defining vs Calling:**' + - '- **Definition** = Creating the function (writing the recipe)' + - '- **Call** = Using the function (following the recipe)' + - '' + - '### Functions in Different Languages' + - '' + - '**Python:**' + - '```python' + - '# Define the function' + - 'def greet(name): # def = define, name = parameter' + - ' print(f"Hello, {name}!") # Function body (indented)' + - '' + - '# Call the function' + - 'greet("Alice") # Output: Hello, Alice!' + - 'greet("Bob") # Output: Hello, Bob!' + - '```' + - '' + - '**JavaScript:**' + - '```javascript' + - '// Define the function' + - 'function greet(name) { // function keyword' + - ' console.log(`Hello, ${name}!`); // Function body in braces' + - '}' + - '' + - '// Call the function' + - 'greet("Alice"); // Output: Hello, Alice!' + - 'greet("Bob"); // Output: Hello, Bob!' + - '```' + - '' + - '**Java:**' + - '```java' + - '// Define the function (method)' + - 'void greet(String name) { // void = no return value' + - ' System.out.println("Hello, " + name + "!");' + - '}' + - '' + - '// Call the function' + - 'greet("Alice");' + - 'greet("Bob");' + - '```' + - '' + - '**C++:**' + - '```cpp' + - '// Define the function' + - 'void greet(std::string name) { // void = no return' + - ' std::cout << "Hello, " << name << "!" << std::endl;' + - '}' + - '' + - '// Call the function' + - 'greet("Alice");' + - 'greet("Bob");' + - '```' + - '' + - '### Understanding Parameters' + - '' + - '**Parameters** (also called arguments) are values you pass into a function:' + - '' + - '```python' + - 'def greet(name): # "name" is a parameter' + - ' print(f"Hello, {name}!")' + - '' + - 'greet("Alice") # "Alice" is the argument passed to name' + - '```' + - '' + - 'When you call `greet("Alice")`:' + - '1. The value `"Alice"` is passed to the function' + - '2. Inside the function, `name = "Alice"`' + - '3. The function can use `name` like any other variable' + - '' + - '**Multiple parameters:**' + - '```python' + - 'def greet(first_name, last_name):' + - ' print(f"Hello, {first_name} {last_name}!")' + - '' + - 'greet("Alice", "Smith") # Output: Hello, Alice Smith!' + - '```' + - '' + - '### The DRY Principle' + - '**DRY = Don''t Repeat Yourself**' + - '' + - '**Without functions (repetitive):**' + - '```python' + - 'print("Hello, Alice!")' + - 'print("Hello, Bob!")' + - 'print("Hello, Carol!")' + - '```' + - '' + - '**With functions (DRY):**' + - '```python' + - 'def greet(name):' + - ' print(f"Hello, {name}!")' + - '' + - 'greet("Alice")' + - 'greet("Bob")' + - 'greet("Carol")' + - '```' + - '' + - 'If you need to change the greeting format, you only change it in ONE place (the function), not everywhere it''s used!' + - '' + - '### Function Naming Conventions' + - 'Choose clear, descriptive names that describe what the function does:' + - '' + - '**Good names:** `calculateTotal`, `isValid`, `getUserInput`, `sendEmail`' + - '**Bad names:** `doStuff`, `func1`, `xyz`, `temp`' + - '' + - 'Use verb names since functions perform actions: `get`, `set`, `calculate`, `validate`, `send`, `display`' + - '' + - '### Now It''s Your Turn!' + - 'Practice creating and calling a function with a parameter.' question: Write a function called 'greet' that takes a name as a parameter and displays 'Hello, [name]!' to stdout. Then call the function with your own name. tokens_for_ai: 'Check their function code in their chosen language. @@ -937,12 +1510,187 @@ sections: title: Return Values content_blocks: - '## Functions That Return Values' - - So far, our function just displays output. Functions can also RETURN values that can be used elsewhere. + - '' + - '### Display vs Return: A Critical Difference' + - 'So far, our `greet` function **displayed** output directly to stdout. But functions can also **return** values that can be used elsewhere. This is a crucial concept that many beginners find confusing at first.' + - '' + - '**Displaying (printing):**' + - '- Shows output to the user immediately' + - '- Cannot save or reuse the value' + - '- The function''s only effect is to show text' + - '' + - '**Returning:**' + - '- Sends a value back to the caller' + - '- The caller can store it, use it in calculations, or display it' + - '- More flexible and reusable' + - '' + - '### Why Return Values?' + - '' + - 'Imagine a calculator. It doesn''t just print results on paper - it gives you the answer so you can use it in the next calculation. That''s what return values do!' - '' - '**Return values let you:**' - - '- Calculate something and send the result back' - - '- Use the result in other calculations' - - '- Store the result in a variable' + - '- **Calculate and send back results:** `calculateTax(100)` returns `15`' + - '- **Use results in other operations:** `total = price + calculateTax(price)`' + - '- **Store results in variables:** `tax = calculateTax(price)`' + - '- **Chain functions together:** `display(formatCurrency(calculateTotal(items)))`' + - '' + - '### Visualizing the Difference' + - '' + - '**Function that displays:**' + - '```python' + - 'def add(a, b):' + - ' print(a + b) # Shows result but can''t reuse it' + - '' + - 'add(5, 3) # Displays: 8' + - 'result = add(5, 3) # result = None (nothing returned!)' + - '```' + - '' + - '**Function that returns:**' + - '```python' + - 'def add(a, b):' + - ' return a + b # Sends result back to caller' + - '' + - 'result = add(5, 3) # result = 8 (can use it!)' + - 'print(result) # Displays: 8' + - 'double = result * 2 # Can do more calculations!' + - '```' + - '' + - '### The Return Statement' + - '' + - 'The **return statement** does two things:' + - '1. Sends a value back to whoever called the function' + - '2. Immediately exits the function (no code after return runs)' + - '' + - '**Syntax in different languages:**' + - '```python' + - 'return value # Python' + - '```' + - '```javascript' + - 'return value; // JavaScript, Java, C++, etc.' + - '```' + - '' + - '### Return Values in Different Languages' + - '' + - '**Python:**' + - '```python' + - 'def add(a, b):' + - ' return a + b' + - '' + - 'result = add(5, 3) # result = 8' + - 'print(result) # Display the result' + - '```' + - '' + - '**JavaScript:**' + - '```javascript' + - 'function add(a, b) {' + - ' return a + b;' + - '}' + - '' + - 'let result = add(5, 3);' + - 'console.log(result); // Output: 8' + - '```' + - '' + - '**Java:**' + - '```java' + - 'int add(int a, int b) { // int before name = return type' + - ' return a + b;' + - '}' + - '' + - 'int result = add(5, 3);' + - 'System.out.println(result); // Output: 8' + - '```' + - 'Note: In statically typed languages like Java/C++, you must declare the return type!' + - '' + - '**C++:**' + - '```cpp' + - 'int add(int a, int b) { // int = return type' + - ' return a + b;' + - '}' + - '' + - 'int result = add(5, 3);' + - 'std::cout << result << std::endl; // Output: 8' + - '```' + - '' + - '### Understanding Return Types' + - '' + - '**Dynamically typed languages** (Python, JavaScript):' + - '- Don''t declare return type' + - '- Can return any type' + - '' + - '**Statically typed languages** (Java, C++, C#, Go):' + - '- Must declare return type before function name' + - '- `int add(...)` means function returns an integer' + - '- `String getName(...)` means function returns a string' + - '- `void doSomething(...)` means function returns nothing' + - '' + - '### Using Returned Values' + - '' + - 'Once a function returns a value, you can:' + - '' + - '**Store it in a variable:**' + - '```python' + - 'sum = add(5, 3) # sum = 8' + - '```' + - '' + - '**Use it in calculations:**' + - '```python' + - 'total = add(5, 3) * 2 # total = 16' + - '```' + - '' + - '**Pass it to another function:**' + - '```python' + - 'print(add(5, 3)) # Displays 8' + - '```' + - '' + - '**Use it in conditionals:**' + - '```python' + - 'if add(5, 3) > 10:' + - ' print("Big number!")' + - '```' + - '' + - '### Common Mistakes' + - '' + - '**Mistake 1: Forgetting to return**' + - '```python' + - 'def add(a, b):' + - ' a + b # Calculates but doesn''t return!' + - '' + - 'result = add(5, 3) # result = None ❌' + - '```' + - '' + - '**Mistake 2: Printing instead of returning**' + - '```python' + - 'def add(a, b):' + - ' print(a + b) # Displays but doesn''t return!' + - '' + - 'result = add(5, 3) # Shows 8, but result = None ❌' + - '```' + - '' + - '**Correct:**' + - '```python' + - 'def add(a, b):' + - ' return a + b # Returns the value ✓' + - '' + - 'result = add(5, 3) # result = 8 ✓' + - '```' + - '' + - '### When to Display vs Return' + - '' + - '**Use display (print) when:**' + - '- The function''s purpose is to show information to the user' + - '- You won''t need the value later' + - '- Example: `showWelcomeMessage()`, `displayReport()`' + - '' + - '**Use return when:**' + - '- The function calculates a result you''ll use later' + - '- You want flexibility (caller decides whether to display)' + - '- You''re building reusable utility functions' + - '- Example: `calculateTotal()`, `isValid()`, `formatName()`' + - '' + - '**Best practice:** Most functions should return values. Let the caller decide whether to display them.' + - '' + - '### Now It''s Your Turn!' + - 'Practice creating a function that returns a value, then using that returned value.' question: Write a function called 'add' that takes two numbers as parameters, returns their sum, and then call it with 5 and 3 and display the result to stdout. tokens_for_ai: 'Check their function with return value.