موضوع قبلی

متغیّرها

موضوع بعدی

2. دفتر یادنگاشت ریبرگ

1. چند نام برای یک شیئ

توجه

در انگلیسی کلمهٔ synonym یعنی هم‌معنی و معادل. این واژه برای تعریف کلمه‌هایی استفاده می‌شود که معنی یکسانی دارند. در نظر گرفتن متغیّرها به عنوان معادل شیئ داده شده می‌تواند سودمند باشد.

در مثال، قبل وقتی داشتیم در مورد پالایش‌ها حرف می زدیم؛ راه حلّی برای محیط همین دور و بر۴ پیدا کردیم که این طور بود:

from library import turn_right

#   با گذاشتن یک نشانه، نقطهٔ آغاز را نشان می‌کنیم
put()

# مسیر مشخّصی را پیدا و شروع به حرکت می‌کنیم.
while not front_is_clear():
    turn_left()
move()

'''  می‌دانیم که وقتی به جایی برسیم
که نشانه را گذاشته بودیم؛
دور میحط را دور زده‌ایم. ''''

while not object_here():
    if right_is_clear():  # از سمت راست حرکت کن
        turn_right()
        move()
    elif front_is_clear():    #  همین طور دیوار سمت راست را بگیر و برو
        move()
    else:
        turn_left()  #با گردش به چپ، در امتداد دیوار حرکت کن

سپس، ما تابع‌های جدیدی را تعریف می‌کنیم؛ تا هستهٔ اصلی این راه حل را توضیح دهد. این کار نیاز به افزودن یادداشت‌ها را کم کند. یکی از این تابع‌ها -که تنها تابعی هست که می‌گذاریم همان طور که هست بماند- مثل این بود:

def follow_right_wall():
    if right_is_clear():
        turn_right()
        move()
    elif front_is_clear():
        move()
    else:
        turn_left()

مهم

یادتان باشد پایتون یادداشت‌ها را نادیده می‌گیرد. بنابراین، ترجیح بر این است که همیشه برنامه‌ای نوشته شود؛ که هدف آن از طرز نوشته شدن خودِ کدهایش واضح و مشخّص باشد.

حالا بگذارید یک راه دیگر را هم امتحان کنیم. این تابع با را با بقیّهٔ برنامه‌ای که با استفاده از متغیّرها واضح‌ترش کردیم؛ ترکیب کنیم. مثلاً به جای نوشتن:

# با گذاشتن یک نشانه، نقطهٔ آغاز را نشان می‌کنیم.
put()

می‌نویسیم:

mark_starting_point = put
mark_starting_point()

به همین ترتیب به جای نوشتن:

#  مسیر مشخّصی را پیدا و شروع به حرکت می‌کنیم.
while not front_is_clear():
    turn_left()
move()

می‌نویسیم:

path_is_blocked = wall_in_front  # استفاده کن "not front_is_clear"  از این نام به جای

while path_is_blocked:
    turn_left()

move()

همچنین، به جای نوشتن:

'''  می‌دانیم که وقتی به جایی برسیم
 که نشانه را گذاشته بودیم؛
 دور میحط را دور زده‌ایم. ''''

 while not object_here():
    ...

می‌نویسیم:

back_to_starting_point = object_here

while not back_to_starting_point():
    ...

خب، بیاید همهٔ این تغییرات را کنار هم بگذاریم و برنامهٔمان را اوّل با تعریف چندتایی کلمهٔ جدید(متغیّرها) بازنویسی کنیم و بعد از آن استفاده کنیم:

from library import turn_right

mark_starting_point = put
path_is_blocked = wall_in_front
back_to_starting_point = object_here

def follow_right_wall():
    if right_is_clear():
        turn_right()
        move()
    elif front_is_clear():
        move()
    else:
        turn_left()

# پایان تعاریف. آغاز برنامهٔ اصلی

mark_starting_point()
while path_is_blocked():
    turn_left()
move()

while not back_to_starting_point():
    follow_right_wall()

با وجود این که یادداشت‌ها خیلی کمتر از قبل شده، منظور برنامه‌ باز هم کامل مشخّص است. مزیّت قابل توجّه استفاده از متغیّرهایی با نام‌های واضح به جای یادداشت‌ها، این است که پایتون کد را اجرا می‌کند، نه یادداشت را. بنابراین، اگر کد اشتباه باشد، آن را بلافاصله می‌بینیم و می‌فهمیم؛ ولی، اگر یادداشت‌ها اشتباه باشند، پایتون نمی‌تواند به ما بگوید.