feat: add Functions Overview
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
# 🧭 Topic: Function Basics
|
||||
|
||||
|
||||
> [!info] Quick Overview
|
||||
>
|
||||
|
||||
---
|
||||
## 📌 Covered in This Topic
|
||||
|
||||
**Introduction to Functions**
|
||||
- What functions are
|
||||
- Key goals: modularity, reuse, readability, debugging
|
||||
- Real-world analogy: “tasks” or “machines” that take input and produce output
|
||||
|
||||
**Why We Need Functions**
|
||||
- Code reuse
|
||||
- Reducing complexity
|
||||
- Avoiding repetition
|
||||
- Breaking problems into sub-problems
|
||||
- Making programs testable
|
||||
- Collaboration benefits: multiple people working on different functions
|
||||
|
||||
**Predefined Library Functions**
|
||||
- Overview of `<cmath>`, `<iomanip>`, helpers
|
||||
- Calling library functions (syntax, examples)
|
||||
|
||||
**User-Defined Functions**
|
||||
- Components of a user-defined function
|
||||
- **Declaration** vs. **Definition** vs. **Call**
|
||||
- Variables inside functions (local variables & scope)
|
||||
- Global variables — why to avoid them
|
||||
- Lifetime and visibility of variables
|
||||
|
||||
**Parameters, Arguments & Terminology**
|
||||
- Parameter vs. Argument (definition, examples)
|
||||
- Types of parameters: input, output, in-out
|
||||
- Naming conventions for parameters
|
||||
- Why parameter order and clarity matter
|
||||
- Common student mistakes (e.g., confusing scope)
|
||||
|
||||
**Return Types**
|
||||
- `void` vs. non-void
|
||||
- Returning multiple values → reference parameters
|
||||
- Return type limitations (only one return value)
|
||||
- Allowed data types
|
||||
- When to use `return;` in void functions
|
||||
- Early returns and readability. (Guard Clause)
|
||||
|
||||
**Function Prototypes**
|
||||
- What prototypes do
|
||||
- Why prototypes are needed in C++
|
||||
- Where to place prototypes (before `main` or in headers)
|
||||
- Typical student errors (e.g., mismatched signatures)
|
||||
|
||||
**Default Arguments**
|
||||
- Syntax for default values
|
||||
- Rules (right-to-left, only in declaration)
|
||||
- Good vs. bad use cases
|
||||
- Common pitfalls
|
||||
|
||||
**Parameter Passing Methods**
|
||||
- **Pass by value**
|
||||
- Cheap for ints, bools, chars
|
||||
- Safe, makes a copy
|
||||
- **Pass by reference (`&`)**
|
||||
- Used for modifying caller variables
|
||||
- Used for performance
|
||||
- **When to choose which method**
|
||||
- Memory model overview (stack frame, copies)
|
||||
|
||||
|
||||
**Function Overloading**
|
||||
- What overloading is
|
||||
- Rules for valid overloading
|
||||
- Overloading vs. default args and ambiguity
|
||||
- Examples: `abs`, `sort`, etc.
|
||||
- Common pitfalls (type conversion confusion)
|
||||
|
||||
**Clean Code & Best Practices**
|
||||
**Syntax**
|
||||
- Consistent formatting
|
||||
- Clear parameter naming
|
||||
- Avoid deeply nested logic inside functions
|
||||
|
||||
**Naming**
|
||||
- Verbs for functions (`calculateTotal`, `isValid`)
|
||||
- Avoid generic names (`func1`, `doStuff`)
|
||||
- Self-documenting naming
|
||||
|
||||
**SRP (Single Responsibility Principle)**
|
||||
- One function should do one thing
|
||||
- How complex is “too complex”?
|
||||
- When to break a function into smaller pieces
|
||||
|
||||
**Function Length & Complexity**
|
||||
- Cyclomatic complexity
|
||||
- Indicators that a function needs refactoring
|
||||
- How to make logic testable
|
||||
|
||||
**Scope, Lifetime & Static Functions**
|
||||
- Local vs. global variables
|
||||
- Shadowing
|
||||
- `static` local variables
|
||||
- When to use function-level statics
|
||||
- Danger of relying on state
|
||||
|
||||
**Common Student Mistakes**
|
||||
- Defining a function inside another function
|
||||
- Forgetting to return a value
|
||||
- Mismatched declaration and definition
|
||||
- Depending on global variables instead of parameters
|
||||
- (Optional) Passing large objects by value
|
||||
|
||||
---
|
||||
|
||||
## 📑 Slides & Materials
|
||||
- 👨🏫 [Professor Slides (PDF)](01-topics/04-function-1/4-ProfessorSlides.md)
|
||||
- 🧑🏫 [TA Workshop Slides (PDF)](01-topics/04-function-1/5-TASlides.md)
|
||||
|
||||
---
|
||||
## 🛠️ Workshop & Assignments
|
||||
|
||||
- 💬 [Workshop Questions](01-topics/04-function-1/2-Assignment.md)
|
||||
- 🧮 [Assignments](01-topics/04-function-1/2-Assignment.md)
|
||||
- ❓ [Q&A and Common Issues]()
|
||||
|
||||
---
|
||||
## 🌐 Additional Resources
|
||||
|
||||
- [C++ Reference](https://cplusplus.com/reference/)
|
||||
- [Learn C++](https://www.learncpp.com/)
|
||||
- [Data Types in C++ (W3Schools)](https://www.w3schools.com/cpp/cpp_data_types.asp)
|
||||
|
||||
---
|
||||
## ⏩ Navigation
|
||||
|
||||
- ⬅️ [Previous Topic: Conditions & Loops](../03-conditions-loops/0-Overview.md)
|
||||
- ➡️ [Next Topic: Arrays](../05-arrays/0-Overview.md)
|
||||
---
|
||||
|
||||
> [!tip] Tip
|
||||
> If something doesn’t make sense — **don’t stay stuck alone**. Ask the TA to clarify it right away. Often, a quick question can save you a lot of time and frustration. Remember: if you’re confused, chances are others are too.
|
||||
|
||||
Reference in New Issue
Block a user