تابع کوچک و خالص با ورودی یکسان خروجی یکسان میده و بیرون خودش رو تغییر نمیده. این ویژگی آزمون رو ساده میکنه، چون لازم نیست تاریخچه اجرا یا وضعیت متغیرهای سراسری رو حدس بزنیم. یک محاسبه پیچیده رو میتونیم به چند بخش روشن تقسیم کنیم و بعد رابطه اونها رو هم بررسی کنیم.
مثال محاسبه مساحت رو از پردازش چند مستطیل جدا میکنه. تمرین محاسبه مبلغ هر ردیف فاکتور رو به یک تابع کوچک میسپاره و تابع دوم روی فهرست ردیفها اعمالش میکنه. خطای رایج نگهداشتن total در متغیر سراسریه؛ اون وقت اجرای دوم ممکنه نتیجه اجرای اول رو هم داشته باشه. اینجا نیازی به چنین وضعیت مشترکی نداریم. هر ردیف فقط قیمت و تعداد داره و نتیجه هم یک عدد حاصل ضربه. ورودی خالی باید فهرست خالی بده و تعداد صفر مبلغ صفر. آزمون کمکی حفظ ورودی رو هم نشان میده تا خالصبودن فقط یک ادعای توضیحی نمونه.
✍️ مثال حلشده:
def area(width, height):
return width * height
def areas(rectangles):
return [area(w, h) for w, h in rectangles]
assert areas([[2, 3], [4, 5]]) == [6, 20]
حالا نوبت توئه: دو تابع بنویس: line_total(price, quantity) حاصل ضرب دو عدد نامنفی را بدهد و invoice_lines(lines) برای هر جفت [price,quantity] یک مبلغ بهترتیب بسازد. [[100,2],[50,0]]=>[200,0] و []=>[]. هیچ ورودی یا متغیر سراسری تغییر نکند؛ inspect_lines آماده باید ورودی اصلی را هم بدون تغییر برگرداند.
فعالیت شما
دو تابع بنویس: line_total(price, quantity) حاصل ضرب دو عدد نامنفی را بدهد و invoice_lines(lines) برای هر جفت [price,quantity] یک مبلغ بهترتیب بسازد. [[100,2],[50,0]]=>[200,0] و []=>[]. هیچ ورودی یا متغیر سراسری تغییر نکند؛ inspect_lines آماده باید ورودی اصلی را هم بدون تغییر برگرداند.