Hey there, fellow Programmers! Let’s talk about something we all do but rarely think about: naming our code.
Why Names Are Your Code’s First Impression
Imagine walking into a room where everything is labeled with “thing1”, “thing2”, “thing3”. Confusing, right? That’s exactly how bad code names feel to other developers.
Here’s a terrible example:
<span>def</span> <span>f</span><span>(</span><span>x</span><span>,</span> <span>y</span><span>):</span><span>return</span> <span>x</span> <span>*</span> <span>y</span><span>def</span> <span>f</span><span>(</span><span>x</span><span>,</span> <span>y</span><span>):</span> <span>return</span> <span>x</span> <span>*</span> <span>y</span>def f(x, y): return x * y
Enter fullscreen mode Exit fullscreen mode
Now, a better version:
<span>def</span> <span>calculate_rectangle_area</span><span>(</span><span>length</span><span>,</span> <span>width</span><span>):</span><span>return</span> <span>length</span> <span>*</span> <span>width</span><span>def</span> <span>calculate_rectangle_area</span><span>(</span><span>length</span><span>,</span> <span>width</span><span>):</span> <span>return</span> <span>length</span> <span>*</span> <span>width</span>def calculate_rectangle_area(length, width): return length * width
Enter fullscreen mode Exit fullscreen mode
See the difference? The second version tells you exactly what’s happening.
Revealing Intent Matters
Good names answer three key questions:
- What does this do?
- Why does it exist?
- How will it be used?
Let’s look at a real-world example:
<span># Bad: Unclear purpose </span><span>def</span> <span>process</span><span>(</span><span>data</span><span>):</span><span>result</span> <span>=</span> <span>[]</span><span>for</span> <span>item</span> <span>in</span> <span>data</span><span>:</span><span>if</span> <span>item</span> <span>></span> <span>0</span><span>:</span><span>result</span><span>.</span><span>append</span><span>(</span><span>item</span><span>)</span><span>return</span> <span>result</span><span># Better: Clear and intentional </span><span>def</span> <span>filter_positive_numbers</span><span>(</span><span>number_list</span><span>):</span><span>return</span> <span>[</span><span>number</span> <span>for</span> <span>number</span> <span>in</span> <span>number_list</span> <span>if</span> <span>number</span> <span>></span> <span>0</span><span>]</span><span># Bad: Unclear purpose </span><span>def</span> <span>process</span><span>(</span><span>data</span><span>):</span> <span>result</span> <span>=</span> <span>[]</span> <span>for</span> <span>item</span> <span>in</span> <span>data</span><span>:</span> <span>if</span> <span>item</span> <span>></span> <span>0</span><span>:</span> <span>result</span><span>.</span><span>append</span><span>(</span><span>item</span><span>)</span> <span>return</span> <span>result</span> <span># Better: Clear and intentional </span><span>def</span> <span>filter_positive_numbers</span><span>(</span><span>number_list</span><span>):</span> <span>return</span> <span>[</span><span>number</span> <span>for</span> <span>number</span> <span>in</span> <span>number_list</span> <span>if</span> <span>number</span> <span>></span> <span>0</span><span>]</span># Bad: Unclear purpose def process(data): result = [] for item in data: if item > 0: result.append(item) return result # Better: Clear and intentional def filter_positive_numbers(number_list): return [number for number in number_list if number > 0]
Enter fullscreen mode Exit fullscreen mode
Avoiding the Naming Pitfalls
Common mistakes to dodge:
- Cryptic Abbreviations:
<span># Avoid </span><span>usr_cnt</span> <span>=</span> <span>len</span><span>(</span><span>users</span><span>)</span><span># Prefer </span><span>user_count</span> <span>=</span> <span>len</span><span>(</span><span>users</span><span>)</span><span># Avoid </span><span>usr_cnt</span> <span>=</span> <span>len</span><span>(</span><span>users</span><span>)</span> <span># Prefer </span><span>user_count</span> <span>=</span> <span>len</span><span>(</span><span>users</span><span>)</span># Avoid usr_cnt = len(users) # Prefer user_count = len(users)
Enter fullscreen mode Exit fullscreen mode
- Meaningless Variations:
<span># Confusing </span><span>def</span> <span>get_user_info</span><span>()</span><span>def</span> <span>get_user_data</span><span>()</span><span>def</span> <span>get_user_details</span><span>()</span><span># Clear </span><span>def</span> <span>get_user_profile</span><span>()</span><span># Confusing </span><span>def</span> <span>get_user_info</span><span>()</span> <span>def</span> <span>get_user_data</span><span>()</span> <span>def</span> <span>get_user_details</span><span>()</span> <span># Clear </span><span>def</span> <span>get_user_profile</span><span>()</span># Confusing def get_user_info() def get_user_data() def get_user_details() # Clear def get_user_profile()
Enter fullscreen mode Exit fullscreen mode
- Single-Letter Names:
<span># Bad </span><span>def</span> <span>calc</span><span>(</span><span>x</span><span>,</span> <span>y</span><span>,</span> <span>z</span><span>):</span><span>return</span> <span>x</span> <span>*</span> <span>y</span> <span>/</span> <span>z</span><span># Good </span><span>def</span> <span>calculate_average_rate</span><span>(</span><span>total_revenue</span><span>,</span> <span>total_hours</span><span>,</span> <span>number_of_projects</span><span>):</span><span>return</span> <span>total_revenue</span> <span>/</span> <span>(</span><span>total_hours</span> <span>*</span> <span>number_of_projects</span><span>)</span><span># Bad </span><span>def</span> <span>calc</span><span>(</span><span>x</span><span>,</span> <span>y</span><span>,</span> <span>z</span><span>):</span> <span>return</span> <span>x</span> <span>*</span> <span>y</span> <span>/</span> <span>z</span> <span># Good </span><span>def</span> <span>calculate_average_rate</span><span>(</span><span>total_revenue</span><span>,</span> <span>total_hours</span><span>,</span> <span>number_of_projects</span><span>):</span> <span>return</span> <span>total_revenue</span> <span>/</span> <span>(</span><span>total_hours</span> <span>*</span> <span>number_of_projects</span><span>)</span># Bad def calc(x, y, z): return x * y / z # Good def calculate_average_rate(total_revenue, total_hours, number_of_projects): return total_revenue / (total_hours * number_of_projects)
Enter fullscreen mode Exit fullscreen mode
Practical Naming Guidelines
- Classes: Use nouns
- Functions: Use verbs
- Variables: Be specific
- Constants: ALL_UPPERCASE
<span># Great naming example </span><span>class</span> <span>CustomerAccount</span><span>:</span><span>MAX_WITHDRAWAL_LIMIT</span> <span>=</span> <span>5000</span><span>def</span> <span>calculate_monthly_interest</span><span>(</span><span>self</span><span>,</span> <span>balance</span><span>):</span><span>return</span> <span>balance</span> <span>*</span> <span>0.05</span><span># Great naming example </span><span>class</span> <span>CustomerAccount</span><span>:</span> <span>MAX_WITHDRAWAL_LIMIT</span> <span>=</span> <span>5000</span> <span>def</span> <span>calculate_monthly_interest</span><span>(</span><span>self</span><span>,</span> <span>balance</span><span>):</span> <span>return</span> <span>balance</span> <span>*</span> <span>0.05</span># Great naming example class CustomerAccount: MAX_WITHDRAWAL_LIMIT = 5000 def calculate_monthly_interest(self, balance): return balance * 0.05
Enter fullscreen mode Exit fullscreen mode
Context is King
Names should make sense in their environment. A variable like state
could mean anything. But customer_state
or order_processing_state
is crystal clear.
<span># Unclear </span><span>def</span> <span>update</span><span>(</span><span>state</span><span>):</span><span>pass</span><span># Clear </span><span>def</span> <span>update_order_processing_state</span><span>(</span><span>order_status</span><span>):</span><span>pass</span><span># Unclear </span><span>def</span> <span>update</span><span>(</span><span>state</span><span>):</span> <span>pass</span> <span># Clear </span><span>def</span> <span>update_order_processing_state</span><span>(</span><span>order_status</span><span>):</span> <span>pass</span># Unclear def update(state): pass # Clear def update_order_processing_state(order_status): pass
Enter fullscreen mode Exit fullscreen mode
The Golden Rules
- Be consistent
- Be descriptive
- Keep it simple
- Think about the next developer (maybe future you!)
Final Thoughts
Naming isn’t just typing words. It’s communication. You’re telling a story with your code. Make it a story others want to read.
Your future self will thank you. Your teammates will thank you. Heck, even your computer might give you a virtual high-five.
原文链接:The Art of Naming in Programming: Why Good Names Matter!
暂无评论内容