The Art of Naming in Programming: Why Good Names Matter!

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:

  1. 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

  1. 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

  1. 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

  1. Be consistent
  2. Be descriptive
  3. Keep it simple
  4. 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!

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
Do not find excuses for failure, to chase success reasons.
不要找失败的借口,去追成功的理由
评论 抢沙发

请登录后发表评论

    暂无评论内容