--- title: Use Verb Phrases for Method Names impact: MEDIUM-HIGH impactDescription: reduces "what does this method do" lookups by 80% tags: name, method, verb, action --- ## Use Verb Phrases for Method Names Method names should be verbs or verb phrases. Methods do things, so their names should say what they do. Follow JavaBean conventions for accessors and mutators. **Incorrect (non-verb or unclear):** ```java // Noun names for methods public String name() {} public int size() {} // Acceptable for collections // Unclear action public void customer() {} // Does what to customer? // Missing verb public boolean valid() {} ``` **Correct (verb phrases):** ```java // Clear verb phrases public void postPayment() {} public void deletePage() {} public void saveCustomer() {} // Accessors, mutators, predicates follow conventions public String getName() {} public void setName(String name) {} public boolean isPosted() {} public boolean hasPermission() {} // Static factory methods describe what is created Complex fulcrumPoint = Complex.fromRealNumber(23.0); ``` Use `get`, `set`, `is`, and `has` prefixes consistently for accessors, mutators, and predicates. **Language-specific conventions:** - **Java/C#:** `getName()`, `setName()`, `isActive()` (JavaBean conventions) - **Python:** Use `@property` decorators — `user.name` not `user.get_name()` - **Kotlin/Swift:** Direct property access with `val`/`var` — `user.name` not `user.getName()` - **TypeScript:** Direct properties or getters — `get name(): string` - **Go:** `Name()` not `GetName()` (Go convention omits `Get` prefix) The underlying principle (methods describe actions, names describe things) is universal. The accessor/mutator conventions are language-specific. Reference: [Clean Code, Chapter 2: Meaningful Names](https://www.oreilly.com/library/view/clean-code-a/9780136083238/)