ᝰ𝗦𝗲𝗴𝗺𝗲𝗻𝘁
354 subscribers
544 photos
161 videos
264 files
2.22K links
───• · · · ⌞⌝ · · ·

💻در این کانال قراره با هم به سفـری هیجان‌انگیـز در دنیای تکنولوژی بپـردازیم!

┋ 𝙲𝚑𝚊𝚗𝚗𝚎𝚕 @segmenttt

┋ 𝙲𝚘𝚗𝚝𝚎𝚗𝚝 @CodHub4


· · · ⌞⌝ · · · •───
Download Telegram
#ترفند
ترفند های شیطانی موبایل



🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
🅾️ وجه التزامی (subjunctive) 🅾️

🛑 وجه التزامی فعل برای بیان پیشنهادات، آرزوها و احتمالات استفاده می‌شود و با وجه خبری فعل (indicative) تفاوت دارد. پس از این فعل‌ها verb word بکار می‌رود که برای همه‌ی ضمایر یکسان است و صرف نمی‌شود (بدون استفاده از افعال modal ).
🛑 برخی از کلماتی که وجه التزامی دارند عبارتند از:

advise, advisable, ask, command, demand, desire, desirable, insist, prefer, propose, recommend, request, require, suggest, urge, urgent, best, crucial, essential, important, necessary, vital, imperative, unthinkable, adamant, anxious, determined, eager, keen + that

🔵 He speaks Engl
ish (وجه خبری).
🔴 She suggests that he speak English (وجه التزامی).
🔵 He sees a do
ctor (وجه خبری).
🔴 It is necessary that he see a doctor (وجه التزامی).
🔵 I hope that they do not enter the competition (وجه خبری).
🔴 I recommend that they not enter the competition (وجه التزامی).


💥جمله‌ی زیر اشتباه است💥
The doctor suggested that she will not smoke.

شکل صحیح ج
مله‌ی گفته‌شده 👇
The doctor suggested that she not smoke.

جمله‌ی زیر اشتباه است:
The foreign student advisor recommended that she studied more English before enrolling at the university.

شکل صحیح جمله‌ی گفته
‌شده 👇
The foreign student advisor recommended that she study more English before enrolling at the university.


🅾️ مثال‌های بیشتر 🅾️

🔵 I insist (that) he leave now.
🔴 We asked that it be done yesterday.
🔵 Tara is anxious that you return soon.
🔴 We were determined that it remain secret.
🔵 It is advisable that she rest for a week.
🔴 I suggest that he be removed (وجه التزامی).

💢 گاهی اوقات وجه التزامی و وجه خبری هر دو قابل استفاده هستند، اما از نظر معنایی تفاوت دارند: 💢


🔵 I insist that he is here (indicative, a forceful assertion of the fact that he is here)
🔴 I insist that he be here (subjunctive, a demand that the condition of his being here be fulfilled)

🔷 در زبان محاوره‌ای برای افعال
suggest، insist و propose
ممکن است از وجه خبری (بجای وجه التزامی) استفاده کنند که این امر برای رایتینگ مناسب نیست و اینفورمال است



🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
امروز میخوام درباره این مار خوش خط و خال یعنی پایتون صحبت کنم و ببینیم چرا این لامصب انقد محبوبه و همه دوسش دارن!😍

برو که بریم!

1️⃣ یادگرفتن مثه آب خوردن!
💢 یادگیری پایتون به خاطر اینکه کلید واژه های کمی داره ، سینتکسش(ساختار) خیلی سادس و قوائد روشن و مشخصی داره خیلی آسونه!

2️⃣ مناسب واسه تازه کار ها
💢 پایتون واسه کسایی که تازه وارد دنیای برنامه نویسی شدن انتخاب خیلی خوبیه! چون خیلی سادست!
با پایتون میشه سه سوت و خیلی راحت برنامه های کاربردی بسازی!

3️⃣ کلی کتابخونه(Library) داره!
💢 پایتون کتابخونه های زیادی داره که با پلتفرم هایی مثله Windows و Mac و لینوکس سازگاری داره👌

4️⃣ برنامه نویسی گرافیکی (GUI)
💢 شما میتونین به راحتی با پایتون واسه هر سیستم عاملی مثله ویندوز، مک و لینوکس برنامه گرافیکی بسازین!

5️⃣ رایگان و متن باز!
💢 پایتون رایگانه و دانلود یا استفاده کردن ازش هیچ هزینه ای نداره و حتی قابل ویرایشه!


6️⃣ فریمورک های قوی!!
💢 پایتون چون انعطاف فوق العاده زیادی داره تونسته محیط های برنامه نویسی و فریمورک های زیادی رو به خودش اختصاص بده که باعث تولید سریع و آسون یه اپلیکیشن میشه!
💯 محبوب ترین فریمورک پایتون جنگو هست





🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
•> #موج_انرژی_مثبت

فردا که بشه
این لحظه ، فقط یه خاطره است
به دیروزها فکر نکن
فقط همین لحظه امکان داره

#معصومه_صابر



🆑@segmenttt🌺

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
#ترفند
حل مشکل شناسایی نشدن هارد موقع نصب ویندوز



🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
🅾️ برای فعل suggest از دو ساختار زیر استفاده می‌شود:
🅾️1️⃣ suggest doing sth
• He suggested meeting us for a drink after the concert.
🔴 او ملاقات کردن ما به صرف یک نوشیدنی بعد از کنسرت را پیشنهاد کرد.

🅾️2️⃣ suggest (that) sb (should) do sth

🔵 The chairman suggested that the two sides should meet again the following day.
🔵 مدیر پیشنهاد کرد که هر دو طرف در روز بعدی ملاقات داشته باشند.

💥 درحالی که ساختار زیر اشتباه است:
🛑 suggest (someone) to do sth

◆◆◆◆◆◆
🛑 با توجه به توضیحات فوق، جمله‌ی زیر اشتباه است:
I suggest you to take more exercise.

شکل صحیح جمله‌ی گفته شده 👇
I suggest (that) you take more exercise.
من پیشنهاد می‌کنم که بیشتر ورزش کنی.

جمله‌ی زیر نیز اشتباه است:
She suggested to go to the zoo.
شکل صحیح جمله‌ی بالا 👇

She suggested going to the zoo.
او باغ وحش رفتن را پیشنهاد کرد.

🛑 فعل suggest جزو متداول‌ترین وجه‌های التزامی (subjunctive) است.


🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
#solid
#برنامه_نویسی
#اصول_سالید
اصول سالید به زبان ساده
SOLID (سالید) یک کلمه مخفف برای 5 اصل هست. هدف معرفی این اصول اینه که برنامه‌ها قابل درک‌تر، انعطاف‌پذیر تر و بیشتر قابل نگهداری باشن. به عنوان یک برنامه‌نویس، توسعه‌دهنده و مهندس نرم‌افزار، یادگیری این پنج اصل جزو "باید" ها هست. این اصول میتونن توی هر طراحی شی‌گرایی اعمال بشن.
سالید بر پایه پنج اصل زیر هست. من برای هر کدوم از این اصول توضیحات آکادمیک و رسمی اون اصل رو نوشتم و برای درک بهتر هر اصل، لینک توضیح کامل و اختصاصی رو براتون قرار دادم.
1. اصل تک مسئولیتی (Single Responsibility Principle)
هر کلاسی که توی برنامه‌ی ما وجود داره، باید یک مسئولیت خاص و مشخص داشته. در واقع این کلاس باید فقط و فقط مسئول یک عملکرد توی برنامه باشه.

2. اصل باز - بسته (Open/Closed Principle)
موجودیت‌های یک نرم‌افزار (کلاس‌ها، ماژول‌ها، توابع و ...) باید برای توسعه داده شدن، باز و برای تغییر دادن، بسته باشن

3. اصل جایگزینی لیسکوف (Liskov Substitution Principle)
اگر S یک زیر کلاس T باشه، آبجکت‌های نوع T باید بتونن بدون تغییر دادن کد برنامه، با آبجکت‌های نوع S جایگزین بشن.
به بیان ساده‌تر کلاس‌های فرزند نباید رفتار و ویژگی‌های کلاس والد رو تغییر بدن

4. اصل جداسازی اینترفیس‌ها (Interface Segregation Principle)
کلاس‌ها نباید مجبور باشن متدهایی که به اونها احتیاجی ندارن رو پیاده‌سازی کنن.
در واقع این اصل میگه که ما باید اینترفیس (Interface) ها رو جوری بنویسیم که وقتی یک کلاس از اون استفاده میکنه، مجبور نباشه متدهایی که لازم نداره رو پیاده‌سازی کنه.

5. اصل وارونگی وابستگی (Dependency Inversion Principle)
کلاس‌های سطح بالا نباید به کلاس‌های سطح پایین وابسته باشن؛ هر دو باید وابسته به انتزاع (Abstractions) باشن. موارد انتزاعی نباید وابسته به جزییات باشن. جزییات باید وابسته به انتزاع باشن

باید بدونیم که:
اکثر الگوهای طراحی (Design Patterns) که وجود دارن، تلاش میکنن اصول سالید رو پیاده‌سازی کنن. مخصوصا اصل اول و دوم.
برنامه‌های خیلی کمی وجود دارن که همه‌ی این 5 اصل رو همزمان پیاده‌سازی کرده باشن.
مثل دنیای واقعی، رعایت کردن همه اصول غیر ممکن هست.
اعمال کردن هر اصل باید با چشم باز انجام بگیره. وگرنه باعث میشه مشکل پیچیده‌تر بشه.
اصول سالید پای ثابت سوالات مصاحبه هست.


در روز های اینده توضیح کامل و اختصاصی هر کدوم از این اصول را میزارم


🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
•> #موج_انرژی_مثبت

خودت رو باور کن. پرنده‌هایی که روی شاخه‌ها نشستن، هیچ ترسی از شکسته شدن شاخه‌ها ندارن. چون اعتمادشون به شاخه‌ها نیست، به بال‌هاشونه.



🆑@segmenttt🌺

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
#ترفند

چطوری برای تلگرام استیکر بسازیم؟



🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
🅾️ کاربردهای Either و Neither 🅾️


🛑 الف) از عبارت …Either ... or به معنی "یا ... یا ..."؛ زمانی استفاده می کنیم که بخواهیم بگوییم از بین دو انتخاب تنها یکی عملی می شود.


🔴 Either Mike or Lisa will be there.
🔴 یا لیزا آنجا خواهد بود یا مایک.

🔵 Either you leave me alone or I will call the police.
🔵 یا تنهایم می گذاری یا پلیس را خبر می کنم.

🔴 We should bring either coffee or tea.
🔴 یا باید قهوه بیاوریم یا چای.

🔵 You can either help us or go to your room.
🔵یا می توانی به ما کمک کنی یا به اتاقت بروی.


🛑 ب)
either of + (one) + group of two

🅾️ در واقع می توانیم پس از #either از ضمایر مفعولی استفاده کنیم به شرطی که اشاره به دو نفر داشته باشند.

🔴 Either of us could do it
🔴 هر کدام از ما می توانست انجامش دهد.

🔵 Either one of us could do it
🔵 هر یک از ما می توانست انجامش دهد.

🔴 Either of you should know
🔴 هر کدام از شما باید بداند.

🔵 Either one of you should know
🔵 هر یک از شما باید بداند.


🛑 ج) عبارت Not ... either ... or

در واقع به کار بردن either ... or با فعل منفی است.

🔴 I don't think either Mike or Lisa will be there.
🔴 فکر می کنم نه لیزا آنجا خواهد بود نه مارک.

🔵 He doesn't speak either English or French.
🔵 او نه انگلیسی صحبت می کند نه فرانسوی.


🛑د) کاربرد Not ... either پس از جمله خبری منفی

🛑 پس از یک جمله خبری منفی می توانیم از not ... either استفاده کنیم و معنی آن "همینطور" خواهد بود.

🔴 He doesn't speak French. I don't, either.
🔴 او انگلیسی حرف نمی زند. من هم همینطور.

🔵 He isn't ready to go. We aren't, either.
🔵 او آماده ی رفتن نیست. ما هم همینطور.


🛑 2) کاربرد #Neither


🛑 الف) عبارت Neither ... nor
دقیقا معادل Not ... either ... or است.

🔴 Neither Mike nor Lisa will be there.
🔴 نه لیزا آنجا خواهد بود نه مایک.

🔵 He speaks neither English nor French.
🔵 او نه انگلیسی حرف می زند نه فرانسوی.

🔴 We brought neither coffee nor tea.
🔴 نه قهوه آورده ایم نه چای.

🔵 I will neither help you nor go to my room.
🔵 نه به تو کمک خواهم کرد نه به اتاقم خواهم رفت.


💥نکته💥
فعلی که همراه با #neither به کار می بریم باید #مثبت باشد.

ب)
neither of + (one) + group of two

💥 در واقع می توانیم پس از #neither از ضمایر مفعولی استفاده کنیم به شرطی که اشاره به دو نفر داشته باشند.

🔴 Neither of them is ready.
🔴 هیچ کدامشان آماده نیست.

🔵 Neither one of them is ready.
🔵 هیچ یک از آنها آماده نیست.

🔴 Neither of us has any money.
🔴 هیچکدام از ما پولی نداریم.

🔵 Neither one of us has any money.
🔵 هیچ یک از ما پولی نداریم.


ج) کاربرد neither معادل not ... either دقیقا مانند not ... either است. یعنی پس از یک جمله خبری #منفی می آید و معنی "#همینطور" میدهد. اما ساختار آن متفاوت است و به صورت
neither + auxiliary verb + subject pronoun
به کار می رود.

🔵 I don't speak French.
🔴 Neither do I.
🔵 من فرانسوی حرف نمی زنم.
🔴 منم همینطور.

🔴 He isn't ready to go.
🔵 Neither are we.
🔴 آماده ی رفتن نیست.
🔵 ما هم همینطور.

💥 این ساختار را به صورت غیر رسمی و خودمانی هم میتوانیم به صورت زیر بیان کنیم.

🔴 I don't speak French.
🔵 Me neither.
🔴 من فرانسوی حرف نمی زنم.
🔵 منم همینطور.


🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
#solid
#برنامه_نویسی
#اصول_سالید

1️⃣ اولین اصل یعنی SRP رو با هم بررسی می‌کنیم.

SRP مخفف Single Responsibility Principle هست. با ترجمه تحت‌اللفظی یعنی "اصلی تک مسئولیتی".

نقل قول زیر توضیح رسمی هست که برای SRP ارائه شده:

یک کلاس فقط باید به یک دلیل تغییر کنه.



یعنی چی؟ 🤔
این اصل به ما میگه که هر کلاسی که توی برنامه‌ی ما وجود داره، باید یک مسئولیت خاص و مشخص داشته. در واقع این کلاس باید فقط و فقط مسئول یک عملکرد توی برنامه باشه.

این جمله رو همه شنیدیم: یک کار انجام بده ولی درست انجام بده!

به مثال زیر دقت کنین:

class User {
public information() {}
public sendEmail() {}
public orders() {}
}
توی این کلاس ما سه تا متد داریم. متد information که اطلاعات کاربر رو برمیگردونه. متد sendMail برای ارسال ایمیل به کاربر و متد orders سفارش‌های کاربر رو برمی‌گردونه.

به نظرتون اگه کلاسی به اسم User داشته باشیم، هدف این کلاس چی هست؟ احتمالاً اطلاعاتی از کاربر رو ذخیره کنه یا نمایش بده. در واقع مسئولیتی در حوزه مربوط به یک کاربر. اگه به کلاس دقت کنیم، می‌بینیم که توی این کلاس، فقط متد information هست که با کلاس User مرتبط هست و بقیه متدها وظایفی متفاوت با این کلاس دارن.

کلاس User نباید مسئول ارسال ایمیل و یا هندل کردن سفارشات کاربر باشه. در این صورت کلاس ما با عملکردهای ذاتی خودش محصور شده نیست. یعنی کلاس User با یک سری عملکردهای غیرمرتبط آمیخته شده.

این مسئله زمانی مشکل‌ساز میشه که می‌خوایم کلاس رو گسترش بدیم. مثلاً ایمیل‌های مختلف و اختصاصی‌تر بفرستیم. که آخر کار نمی‌دونیم این کلاس User هست یا Email !



راه حل چیه؟ 🤔
خب راه حل اینه که عملکردهای اضافی رو از کلاس User جدا و به یک کلاس اختصاصی منتقل کنیم:

class User {
public information() {}
}

class Email {
public send(user: User) {}
}

class Order {
public show(user: User) {}
}
همونطور که میبینید، کلاس User ما خلوت‌تر، تمیزتر و مرتب تر شد. همچنین توسعه این کلاس و کلاس‌های دیگه راحت‌تر انجام میشه.

نکته: این اصل نه تنها توی سطح کلاس‌ها، بلکه توی سطح متدها و توابع هم می‌تونه اعمال بشه. برای مثال، متد send زیر این اصل رو نقض کرده:

class Mailer {
public send(text) {
mailer = new Mail();
mailer.login();

mailer.send(text);
}
}

mail = new Mailer;
mail.send('Salut');
متد send مسئول انجام ۲ کار هست: احراز هویت و بعد ارسال ایمیل. همچنین اصل دوم SOLID که قسمت بعد با اون آشنا می‌شیم هم اینجا نقض شده.

اگه بخوایم این متد رو بهتر بنویسیم و هم از اصل SRP تبعیت کنیم، می‌تونیم اون رو به این صورت بنویسیم:

class Mailer {
private mailer;

public constructor(mailer) {
this.mailer = mailer;
}

public send(text) {
this.mailer.send(text);
}
}

myEmail = new MyEmailService;
myEmail.login();

mail = new Mailer(myEmail);
mail.send('Salut');
همونطور که می‌بینیم، متد send فقط کاری رو انجام میده که وظیفه‌ اون هست.


🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
👍1
•> #موج_انرژی_مثبت

هیچکس جای تو نبوده و نیست
و احساس و شـرايط تو رو تجربه نکرده،

پس به خاطر نظرات دیگران
به تصمیمات خودت شک نکن.


🆑@segmenttt🌺

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
.#دانستنی
چطور از کند شدن گوشی اندرویدی جلوگیری کنیم؟

◀️ وقتی گوشی جدیدی می‌خریم تا مدتی سرعتش خیلی بالاست و همه برنامه‌ها رو اجرا می‌کنه، اما بعد از سرعتش کم میشه. اینجا چندتا پیشنهاد داریم که کمک می‌کنه سرعت گوشی‌تون خیلی کم نشه.

1️⃣پاک کردن برنامه های بدون استفاده

✳️حواستون به تعداد برنامه‌های گوشی باشه و برنامه‌هایی که خیلی باهاشون کار نمی‌کنید رو پاک کنید

2️⃣عدم اجرای برنامه های سنگین به صورت همزمان

✳️ظرفیت گوشی‌ها متفاوته و بهتره حواستون به برنامه‌های سنگین باشه بهتره که برنامه های سنگین رو با هم اجرا نکنید.

3️⃣همیشه برنامه‌ها و سیستم عامل رو آپدیت نگه دارین.

4️⃣سبک کردن گوشی به صورت دوره ای

✳️ نگه داشتن فایل‌های زیاد توی گوشی بهش آسیب می‌رسونه، بهتره که برای مرتب کردن فایل‌هاتون وقت بذارین تا حافظه داخلی جای خالی داشته باشه.

5️⃣صفحه اصلی گوشی خود را خلوت کنید

✳️درسته که ویجت‌های گوشی‌ها معمولا خوشگل و کاربردی هستن، اما حواستون باشه تعداد زیاد ویجت توی صفحه هوم گوشی ممکنه روی کارکرد و سرعتش اثر بذاره.

6️⃣به صورت دوره ای گوشی خود را خاموش روشن کنید

✳️گاهی وقتا گوشی رو خاموش کنین، نه اینکه باتری‌ش تموم بشه، بلکه خودتون خاموشش کنین.


🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
🅾️ #either, #neither, #both, #not_only 🅾️


🛑 either … or …
🛑 یا ... یا …

🔵 neither ... nor …
🔵 نه ... نه …

🔴 both ... and …
🔴 هم ... هم …

🔵 not only ... but also
🔵 نه تنها ... بلکه


🛑 چنانچه بعد از کلمه #either از #or استفاده شود هر دو کلمه معادل ( یا .... یا ) در زبان فارسی است.

🔴 I want either this book or that book.
🔴 من یا این کتاب را می خواهم یا آن کتاب را

🛑چنانچه بعد از کلمه #neither از #nor استفاده گردد هر دو کلمه معادل ( نه ...نه ) در زبان فارسی است . در این حالت جمله مفهوم منفی دارد و احتیاجی به کلمه #not نمی باشد.

🔴 I want neither this nor that.
🔴 من نه این را می خواهم نه آنرا

🛑 چنانچه بعد ازکلمه #both از #and استفاده گردد هر دو کلمه معادل(هم ... هم) در فارسی است.

🔴 I want both this book and that book.
🔴 من هم این کتاب را می خواهم هم ان کتاب را

یا

🔵 I want not only this book but also that book



🅾️ کلمات
(either ... or),(neither ... nor)
(both ... and), (not only ... but also)
هر جای جمله می توانند بیایند.قبل از دو فاعل متفاوت، قبل از دو فعل متفاوت، قبل از دو مفعول متفاوت، قبل از دو مکان متفاوت، قبل از دو زمان متفاوت، قبل از دو صفت متفاوت,.....

💥مثال💥

🔴 I am both tired and sick.
🔴 هم خسته ام هم مریض

🔵 My father is neither at home nor in his office.
🔵 پدرم نه تو خونه است نه محل کارش

🔴 You can sell either clothes or books.
🔴 شما می تونید یا لباس بفروشید یا کتاب



💥نکته در مورد( either و neither) 💥

🛑 فعلی که بعد از آنها به کار می رود تابع اسم یا ضمیری است که بعد از #nor و یا #or دیده می شود

🔴 Neither Ali nor Reza goes there on Friday.
🔴 نه علی و نه رضاهیچکدام روزهای جمعه به آنجا نمی روند.

🔵 Neither the students nor the teacher is ever late.
🔵 نه دانش اموزان و نه معلم هیچکدام هرگز دیر نمی ایند.

🔴 Either my brother or I have to go there.
🔴 یا برادرم و یا من (یکیمون) باید انجا بریم.


🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
۶ توصیه در استفاده از زولبیا و بامیه



🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
#سالم_باشیم

برخی از افراد از بی‌اشتهایی حین وعده سحر رنج میبرن و این موضوع باعث میشه با کاهش وعده سحری، طی روز احساس گرسنگی داشته باشن.
درمان بی‌اشتهایی در وعده سحر میتونه به روش‌های گوناگونی انجام بشه که اینجا به برخی از نکات اشاره کرد.

🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
#solid
#برنامه_نویسی
#اصول_سالید

2️⃣ دومین اصل یعنی OCP رو با هم بررسی میکنیم.

دومین اصل از اصول SOLID، اصل باز/بسته یا Open/Closed Principle هست که به اختصار OCP گفته میشه. تعریف رسمی این اصل به این صورت هست:

موجودیت‌های یک نرم‌افزار (کلاس‌ها، ماژول‌ها، توابع و ...) باید برای توسعه داده شدن، باز و برای تغییر دادن، بسته باشن

توی این اصل از کلمه‌های باز و بسته استفاده شده. این کلمات با چیزی که توی ذهنمون داریم یکم متفاوت هست. اول بذارید معنی کلاس باز و بسته رو با هم بررسی کنیم و بعد به توضیح این اصل بپردازیم.



چه زمانی به یک کلاس می‌گیم باز؟
به کلاسی که بشه اون رو توسعه داد، بشه از اون extend کرد، متدها و پراپرتی‌های جدید اضافه کرد و ویژگی‌ها و رفتار اون رو تغییر داد، میگن باز.



چه زمانی به یک کلاس میگیم بسته؟
کلاسی که کامل باشه. یعنی 100% تست شده باشه که بتونه توسط بقیه کلاس‌ها استفاده بشه، پایدار باشه و در آینده تغییر نکنه. توی بعضی از زبان‌های برنامه‌نویسی یکی از راه‌های بسته نگه داشتن یک کلاس، استفاده از کلمه کلیدی final هست.

خب حالا بپردازیم به توضیح اصل OCP:

اصل OCP میگه که ما باید کد رو جوری بنویسیم که وقتی می‌خوایم اون رو توسعه بدیم و ویژگی‌های جدید اضافه کنیم، مجبور نشیم اون رو تغییر بدیم و دستکاری کنیم. ویژگی‌های جدید باید براحتی و بدون دستکاری کردن قسمت‌های دیگه اضافه بشن.

طبق این اصل کلاس باید همزمان هم بسته باشه و هم باز! یعنی همزمان که توسعه داده میشه (باز بودن)، تغییر نکنه و دستکاری نشه (بسته بودن).

خب حالا وقتشه که با مثال درک بهتری از این اصل داشته باشم. کد زیر رو در نظر بگیرید:

class Hello {
public say(lang) {
if (lang == 'pr') {
return 'درود';
} else if (lang == 'en') {
return 'Hi';
}
}
}

let obj = new Hello;
console.log(obj.say('pr'));

این کلاس، با توجه به زبان ورودی، به ما سلام میکنه. همونطور که می‌بینیم درحال حاضر ۲ زبان توسط متد say پشتیبانی میشه. اگه بخوایم زبان‌های دیگه رو اضافه کنیم چطور؟ باید متد say رو ویرایش کنیم:

class Hello {
public say(lang) {
if (lang == 'pr') {
return 'درود';
} else if (lang == 'en') {
return 'Hi';
} else if (lang == 'fr') {
return 'Bonjour';
} else if (lang == 'de') {
return 'Hallo';
}
}
}

let obj = new Hello;
console.log(obj.say('de'));

اگه بخوایم تا 150 زبان به این لیست اضافه کنیم چطور؟ 🤔
همونطور که می‌بینیم وقتی ویژگی‌های جدید اضافه میشه، کلاس ما با توجه به نیازها دستکاری میشه. این اصلا خوب نیست. چون متد say در برابر تغییرات بسته نیست و همیشه از سمت بیرون در معرض دستکاری هست.


باید چکار کرد؟ 🤔
خب یه راه حل بهتر اینه که ما متد say رو کلی تر و عمومی تر بنویسیم. یعنی جوری که بدون توجه به تغییرات و نیازهای جدید، مستقل و دست نخورده باقی بمونه. به اصلاح Abstract کنیم. یعنی عمومی‌تر کردن.

خب برای اینکار، مثال رو به شکل زیر تغییر می‌دیم:

class Persian {
public sayHello() {
return 'درود';
}
}

class French {
public sayHello() {
return 'Bonjour';
}
}

class Hello {
public say(lang) {
return lang.sayHello();
}
}


myHello = new Hello();
myHello.say(new Persian());

همونطور که دیدیم، هر زبان رو به یک کلاس جدید منتقل کردیم. و به این صورت هر وقت که بخوایم زبان جدید اضافه کنیم، کافیه یک کلاس جدید درست کنیم. در نتیجه کلاس Hello و متد say دیگه دستکاری نیمشن.
البته این مثال با استفاده از interface ها می‌تونه بهینه‌تر هم نوشته بشه:

interface LanguageInterface {
sayHello(): string;
}

class Persian implements LanguageInterface {
public sayHello(): string {
return 'درود';
}
}

class French implements LanguageInterface {
public sayHello(): string {
return 'Bonjour';
}
}

class Hello {
public say(lang: LanguageInterface): string {
return lang.sayHello();
}
}

myHello = new Hello();
myHello.say(new Persian());



🆑@segmenttt🔰

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨
•> #موج_انرژی_مثبت

سفرِ زندگىِ خودت رو با هيچكس مقايسه نكن. همهٔ گلها در يک زمان مشابه شكوفه نميدهند.


🆑@segmenttt🌺

👁‍🗨با فوروارد کردن پست های چنل از ما حمایت کنید 👁‍🗨