Routine Parameter Design
Use this skill when defining new functions, refactoring existing method signatures, or designing API interfaces to ensure proper parameter design.
When to Use
- •Defining or refactoring a function's parameter list
- •Designing API interfaces or method signatures
- •Reviewing code for parameter-related issues
- •Optimizing function interfaces for clarity and maintainability
Core Design Principles
1. Limit Parameter Count
- •Minimize the number of parameters to improve readability and usability
- •Consider using parameter objects or structs when parameters exceed 3-5 items
- •Each parameter should serve a distinct, necessary purpose
2. Order Parameters (Input-Modify-Output)
Arrange parameters in this specific sequence:
- •Input parameters: Data the routine reads but does not modify
- •Modify parameters: Data the routine both reads and modifies
- •Output parameters: Data the routine writes but does not read
3. Choose Appropriate Pass Mechanisms
- •Pass by value: For primitive types and small objects that won't be modified
- •Pass by reference: For objects that need modification or to avoid copying overhead
- •Objects: Typically passed as object references (not individual fields)
- •Pointers: Follow the asterisk rule (use
*consistently for pointer parameters)
4. Ensure Interface Consistency
- •Match actual parameters with formal parameter types
- •Follow language-specific conventions (e.g., C library ordering when applicable)
- •Maintain consistent ordering across related functions
- •Use similar parameter names for similar purposes across the codebase
5. Apply Modifiers Appropriately
- •Use
constprefix to prevent modification of input parameters - •Use
inkeyword to explicitly mark input-only parameters - •Use
outkeyword to explicitly mark output-only parameters - •Consider
inoutor equivalent for parameters that are both read and modified
6. Document and Name Clearly
- •Use descriptive, self-documenting parameter names
- •Write clear comments explaining parameter purpose and constraints
- •Document expected ranges, valid values, and edge cases
- •Include units of measurement when applicable
7. Validate Parameter Usage
- •Ensure the routine uses all passed parameters
- •Remove unused parameters to avoid confusion
- •If a parameter is temporarily unused, document why and when it will be used
8. Avoid Global Variables
- •Never use global variables as substitutes for parameters
- •Pass all required data explicitly through the parameter list
- •Global variables make code harder to test, understand, and maintain
Language-Specific Considerations
- •C/C++: Pay attention to pointer vs reference semantics, const correctness
- •Java: All objects are passed by reference; primitives by value
- •Visual Basic: Use
ByValandByRefkeywords explicitly - •Always check language-specific syntax limitations and conventions
Review Checklist
- • Parameter count is minimized and reasonable
- • Parameters follow input-modify-output ordering
- • Pass mechanism is appropriate for each parameter
- • Modifiers (const, in, out) are used correctly
- • All parameters have clear names and documentation
- • All parameters are actually used by the routine
- • No global variables are used as parameter substitutes
- • Interface is consistent with related functions