خب سلام سوال که میدونیم چیه! حقیقتش نمیشه به این سوال جواب قطع | بنیاد پایتون کاران فارسی
خب سلام سوال که میدونیم چیه! حقیقتش نمیشه به این سوال جواب قطعی داد که یا قطعا generator یا قطعا نوشتن راهحل با یک کلاس و پیادهسازی یک iterable و iterator
اما بیاید از چند جهت بررسیاش کنیم: • سادگی و خوانا بودن: والا من که نمیتونم بگم کدوم سادهتر یا پیچیدهتره، اما اگه اینجوری به قضیه نگاه کنیم که جنریتور فقط یک تابع هست و یک حلقه توش داره و من میدونم که وقتی اون iter تموم بشه بهم excption عه StopIteration برمیگردونه، فهمیدم چیه!
یا از اون طرف اون کلاس، اگه من بدونم که کار داندر ایتر و داندر next چیه؟ (که از اسمشون میشه فهمید که یه ربطی به توابع iter و next دارن) و اگه یک کلاسی اینا رو داشته باشه چی میشه، مسئله رو فهمیدم.
*بنظر من* جنریتور با نگاه بالا سادهتره چون داندر متدها رو معمولا دیرتر از توابع و اینا یاد میگیریم!
• اما یکی از شاخصهاش سادگی یا پیچیدگی کد رو میشه با نگاه کردن به کدها بررسی کرد. منظورم دقیقا نگاه کردن بهشون هست و نه خوندنش.
اگر همینجوری که کد رو دارید نگاه میکنید، کد رو ۹۰ درجه به سمت چپ بچرخونید و با تورفتگیها یک کوه بکشید، میبینید که میزان قله و درهها و کنار هم بودنشون در کد generator بیشتره اما کد کلاس flat تره. توی ذن پایتون هم میخونیم: Flat is better than nested! پس *بنظر من* با نگاه بالا اینجا کد کلاس ساده تره. و در کل نمیشه گفت حتما این سادهتره یا اون
• کارایی: این دو نمونه کد *دقیقا* یک کار رو انجام میدن و یک خروجی دارن، هر دو lazy هستن، هر دو اون موقعی که ما روشون next میزنیم نتایج رو محاسبه میکنن و بهمون میدن و ... اما اما اما وقتی من از کلاس استفاده میکنم میتونم اون کلاس رو توسعهاش بدم و کاراییهاش و قابلیتهاش رو بیشتر کنم تا فقط یک NGiver خالی نباشه، اما این در مورد generator صادق نیست.