موضوع قبلی

12. تمرین خواندن کدها

موضوع بعدی

14. تکرار کن

13. رساندن روزنامه، بازبینی

بیاید برگردیم به مثال تحویل روزنامه. تحویل روزنامه به ریچارد پتیس را در محیط روزنامه ۰ یادتان بیاورید. این زیر یک راه حل برای آن مسئله با چند خط یادداشت اضافه هست.

 1  take() #برداشتن روزنامهٔ استار
 2 
 3  # بالا رفتن از اوّلین طبقه
 4  turn_left()
 5  move()
 6  turn_left()
 7  turn_left()
 8  turn_left()
 9  move()
10  move()
11 
12  # بالا رفتن از طبقه دوم
13  turn_left()
14  move()
15  turn_left()
16  turn_left()
17  turn_left()
18  move()
19  move()
20 
21  # بالا رفتن از طبقه سوم
22  turn_left()
23  move()
24  turn_left()
25  turn_left()
26  turn_left()
27  move()
28  move()
29 
30  put() # گذاشتن روزنامه
31 
32  # دور زدن
33  turn_left()
34  turn_left()
35 
36  # پایین آمدن از طبقه
37  move()
38  move()
39  turn_left()
40  move()
41  turn_left()
42  turn_left()
43  turn_left()
44 
45  # پایین آمدن از طبقه
46  move()
47  move()
48  turn_left()
49  move()
50  turn_left()
51  turn_left()
52  turn_left()
53 
54  # پایین آمدن از طبقه
55  move()
56  move()
57  turn_left()
58  move()
59  turn_left()
60  turn_left()
61  turn_left()

این راه حل نسبتاً طولانی است ... و خیلی راحت هنگام تایپ آن می‌شود اشتباه کرد. با این همه، ما متوجّه شدیم که چند بخش کد تکراری است که می‌توانستیم برای آن‌ها تابع درست کنیم. از قبل تابع‌های ()turn_right و ()turn_around را تعریف کردیم. حالا بیاید از آن‌ها استفاده کنیم و چند تای دیگر هم تعریف کنیم.

 1  from library import turn_right, turn_around
 2 
 3  def climb_up_one_floor():
 4      turn_left()
 5      move()
 6      turn_right()
 7      move()
 8      move()
 9 
10  def climb_up_three_floors():
11      climb_up_one_floor()
12      climb_up_one_floor()
13      climb_up_one_floor()
14 
15  def climb_down_one_floor():
16      move()
17      move()
18      turn_left()
19      move()
20      turn_right()
21 
22  def climb_down_three_floors():
23      climb_down_one_floor()
24      climb_down_one_floor()
25      climb_down_one_floor()
26 
27 
28  # === پایان تعریف‌ها ===
29 
30  take()  # برداشتن روزنامهٔ استار
31  climb_up_three_floors()
32  put() # گذاشتن روزنامه
33  turn_around()
34  climb_down_three_floors()

هر تابع بیشتر از ۵ تا دستور ندارد. بررسی درست کار کردن هر تابع خیلی راحت‌تر از بررسی درستی تمام لیست دستورهایی هست که قبلاً دیدیم. وقتی که فهمیدم تابع‌ها درست کار می‌کنند؛ استفاده از آن‌ها به ما اجازه می‌دهد که یک برنامهٔ کامل را در ۵ سطر بنویسیم- که باز هم بررسیش راحت‌تر است. با همهٔ این‌ها، برای پرهیز از تکرار، دست آخر با توابع به برنامهٔ کوتاه‌تری رسیدیم که خواندنش خیلی راحت‌تر است.

نوبت شما!

برنامهٔ بالا را بنویسید و از درست کار کردن آن خاطر جمع بشوید. وقتی این کار انجام شد، شما آماده‌اید یک ترفند دیگر یاد بگیرید که کار را از این هم ساده‌تر می‌کند.

از آن‌جایی که تابع‌هایی مثل

climb_up_one_floor()
climb_up_three_floors()

و ... مخصوص این برنامه هستند، ذخیره کردن شان در کتابخانه فکر خوبی نیست. نمی‌خواهید که تابع‌های زیادی در کتابخانهٔتان داشته باشید؛ طوری که همیشه مجبور باشید همهٔ آن‌هایی را که توی کتابخانه هست را یادتان نگه دارید. اگر فهمیدید که از یک تابع دفعات زیادی در برنامه‌های مختلف استفاده کردید، آن وقت گذاشتنش در کتابخانهٔتان فکر خوبیست.