شروع کدنویسی- همین حالا شروع کنید (قسمت دوم)

همین حالا کدنویسی را شروع کنید اگر اولین بخش از مقالات “شروع کدنویسی – همین حالا شروع کنید.” را مطالعه نکرده‌اید، قبل از خواندن این بخش، لازم است بخش اول را مطالعه کرده باشید.

در این سری نوشتار که از آن را به سه بخش تقسیم کرده‌ام، سعی دارم دیدگاهی از شغل برنامه‌نویسی را در اختیار شما قرار دهم تا اگر پیش از این از برنامه‌نویسی هیولایی ترسناک در ذهنتان ساخته‌اید، کاملاً متقاعد شوید که این مهارت، کاملاً قابل یادگیری و قابل فهم است و تنها چیزی که نیاز دارد، پشتکار و انگیزه خودتان است. این که بپذیرید که شما هم می‌توانید برنامه‌نویس شوید.

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

Objectها یا اشیاء

یکی از بخش‌های مهم کدنویسی، یادگیری نحوه سازمان‌دهی به داده‌هاست. مثال تاریخ تولد را درنظر بگیرید: در فیسبوک، صدها میلیون تاریخ تولد (و تاریخ‌های مهم دیگر) وجود دارد که در حافظه کامپیوترهای موجود در انبار کامپیوترها ذخیره شده است. فیسبوک چه طور می‌فهمد این تاریخ‌ها کدام به کدام است؟ اگر من لیستی از میلیاردها تاریخ به شما بدهم، آیا می‌توانید بفهمید که این تاریخ‌ها هر کدام به چه درد می‌خورد؟ شما شاید بتوانید ولی انسان‌های عادی نمی‌توانند.

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

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

در جاوااسکریپت، objectها شبیه باقی متغیرها تعریف و اعمال می‌شوند. نمونه‌ای از یک object را در ادامه مشاهده می‌کنید:

var people = {

id: 12884002,

age: 28,

name: ‘ali’,

favorite_song: ‘babakaram, by Javadyasari’

}

هر قطعه از داده‌های موجود در یک object شبیه الاکلنگ است. نام در سمت چپ و یک علامت : در وسط برای این که تعادل را حفظ کند. حقیقتاً کل کاری که می‌کنیم این است که چهار متغیر تعریف می‌کنیم: دوتای اول، شماره هستند و دوتای آخر، حروف و کلمات. اما همه آن‌ها با هم مربوط هستند و به این ترتیب، هر زمان که بخواهیم در مورد People چیزی بدانیم، می‌توانیم آن‌ها را پیدا کنیم. و این که به جای این که اسم آن‌ها را متغیر (Variable) بگذاریم، به آن‌ها خصیصه (Properties) یا فیلد  (Fields) می‌گوییم. یک object می‌‌تواند به هر تعداد که شما بخواهید، خصیصه یا فیلد داشته باشد مهم این است که آن‌ها را داخل {کروشه‌ها} قرار بدهیم.

می‌توانیم آبجکتی را که نام people را برای آن درنظر گرفته‌ایم، جابه‌جا کنیم و درست مثل متغیرهای دیگر، به آن‌ها ارجاع دهیم. کامپیوتر، منظور ما را درک می‌کند. اگر بخواهیم می‌توانیم فقط به یکی از خصیصه‌ها یا فیلدهای people ارجاع دهیم و برای این کار از کاراکتر نقطه استفاده می‌کنیم. این‌طوری:

people.id
people.name
people.age
people.favorite_song

هرکدام از موارد بالا، درست شبیه متغیرهای دیگر به کار می‌روند. یعنی می‌توانیم چیزی را در آن‌ها قرار دهیم تا بعداً بتوانیم به آن مراجعه کنیم. می‌‌خواهید نام ali را تغییر دهید؟ کار ساده‌ایست:

people.name = ‘zahra’

همین. تمام شد. از حالا به بعد، هرگاه people.name را تایپ کنید، نام zahra درنظر گرفته می‌شود.

آرایه‌ها یا Arrays

گاهی اوقات برای خصیصه‌های یک object، نمی‌خواهید از اسامی منحصر به فرد استفاده کنید یا نمی‌دانید تعداد خصیصه‌های شما قرار است چه تعداد باشد. در این قبیل موارد، از آرایه یا Array استفاده می‌کنید. آرایه، فهرستی از قطعات داده مشابه است. آرایه‌ها می‌توانند بر حسب نیاز، بزرگ و کوچک شوند.

مثال خوب آن، اراجیفیست که در توییتر، توییت می‌کنید. توییتر نمی‌داند شما قصد دارید چه تعداد توییت ارسال کنید. توییتر برای نگهداری توییت‌های شما از یک آرایه استفاده می‌کند. آرایه‌ها در جاوااسکریپت، چیزی شبیه این هستند:

var dumb_tweets = [Salam, Twitter!’, ‘Rofagha Chetorid?’, ‘Kasi Ghahve mikhad?’]

اگر یادتان باشد، در objectها از {کروشه} استفاده می‌شد، درست است؟ آرایه‌ها از ]براکت[ استفاده می‌کنند. آرایه فوق، حاوی سه جمله است که با علامت کاما از هم جدا شده‌اند و درست می‌گویید، آن‌ها نیز متغیر یا Variable هستند. موقع کدنویسی، هر جا که نیاز داشتید می‌توانید dumb_tweets را تایپ کنید و کامپیوتر را به آن آرایه، ارجاع دهید.

اگر بخواهید می‌توانید به یکی از جلمات آرایه نیز ارجاع دهید و این کار را به این شکل انجام می‌دهید:

dumb_tweets[0]

dumb_tweets[1]

dumb_tweets[2]

ما ابتدا نام آرایه dumb_tweets را وارد کرده و سپس داخل ]براکت[، شماره (ایندکس) المان‌های داخلی را وارد می‌کنیم. عجیب نیست که اولین شماره آرایه، صفر است؟ اما شماره‌های زندگی شما از این به بعد از صفر شروع می‌شود و من بعد، هرگاه گفتند تا ده بشمارید باید از صفر شروع کنید. برنامه‌نویس‌ها این‌طوری می‌شمارند.

هر کدام از جملات بالا یک متغیر است (منظور از جمله، کدیست که وقتی اجرا می‌شود به یک قطعه داده تبدیل می‌شود) و اگر بخواهید می‌توانید چیزی را به آن‌ها الصاق کنید.

dumb_tweets[2] = ‘az tamame harfhaii ke goftam pashimanam.’

به این ترتیب، kasi ghahve mikhahad به چیز دیگری تبدیل می‌شود و برای همیشه ناپدید می‌شود.

ارایه‌ها می‌توانند حروف و کلمات، عدد، تاریخ‌، آبجکت و حتی آرایه‌های دیگر را در خود نگهداری کنند. می‌توانید داخل یک آرایه، آرایه‌های دیگری را قرار دهید.

پیشنهاد مقاله: آموزش برنامه ‌نویسی– شروع آموزش برنامه‌نویسی

کدهایی که به این شکل، داخل یکدیگر قرار می‌گیرند، کدهای تودرتو نامیده می‌شود (nested codes).

آرایه‌ها می‌توانند خصیصه‌ها یا فیلدهای آبجکت‌ها نیز باشند. خصیصه یا فیلدی که در یک آبجکت وجود دارد، می‌تواند آرایه‌ای از آبجکت‌های دیگر باشد که هر یک از آن آبجکت‌ها به خودی خود، آرایه‌های دیگری را به عنوان فیلد یا خصیصه مورد استفاده قرار می‌دهد و این فرایند تا بی‌نهایت می‌تواند ادامه پیدا کند. چیزی شبیه عروسک‌های تودرتوی روسی ولی ساختار داده‌ها به این شکل تعیین می‌شود. به عنوان مثال، اکانت توییتر شما می‌تواند آبجکتی باشد که یکی از فیلدها یا خصیصه‌های آن، آرایه‌ای از توییت‌های شماست. هر توییت نیز می‌تواند آبجکتی باشد که هر یک از خصیصه‌های موجود ‌در آن، آرایه‌ای از پاسخ‌های دریافتی از دیگران، لایک‌ها و retweetها را نگهداری می‌کند و هر پاسخ، لایک یا retweet دریافتی می‌تواند آبجکتی باشد که خصیصه‌های آن شامل نام، تصویر پروفایل، اطلاعات Bio و دیگر مشخصات کاربری باشد که به توییت شما واکنش نشان داده است.

var nested_object = {

an_array: [

{

another_array: [

{

yet_another: [

{

message: ‘اگه به کمک احتیاج دارید چشمک بزنید’

}

]

}

]

}

]

}

برای دسترسی به خصیصه message می‌توانید عبارت زیر را تایپ کنید:

nested_object.an_array[0].another_array[0].yet_another[0].message

به این ترتیب، کامپیوتر شما می‌داند که منظور شما ‘اگر به کمک احتیاج دارید، چشمک بزنید’ است.

در جاوااسکریپت، همه چیز به شکل رازگونه‌ای یک آبجکت است. به عنوان مثال، آرایه dumb_tweets خصیصه‌ای دارد که ما آن را هرگز مشخص نمی‌کنیم:

dumb_tweets.length

این خصیصه، طول آرایه است. جاوااسکریپت به طور اتوماتیک آن را ایجاد و به روزرسانی می‌کند. جاوااسکریپت می‌تواند به شما بگوید که چه تعداد المان در این آرایه وجود دارد. در مثال ما 3 المان وجود دارد. می‌توانید خودتان بشمارید ولی این بار از صفر شروع نکنید چون من به شما دروغ گفتم و فقط بعضی وقتها باید شمارش را از صفر شروع کنید.

API

وقت آن رسیده که داستان ترسناک آتش‌سوزی را برایتان بگویم.

روزی روزگاري، در یک جهان موازی، برنامه‌نویسی زندگی می‌کرد. او تنها کدنویسی بود که در کل آن جهان وجود داشت و باید به تنهایی تمام کدهای موجود در جهان را می‌نوشت.

نگران نباشید این فقط یک داستان است. خونسردی خود را حفظ کنید.

حقیقت این است که هیچ کدنویسی تنها نیست و ما مرتباً از کدهایی استفاده می‌کنیم که خودمان آن‌ها را ننوشته‌ایم.

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

اما چه طور از این کدهای زامبی استفاده کنیم؟ کپی و پیست چه طور است؟ بعضی وقت‌ها جواب می‌دهد ولی همیشه این طور نیست و در بیشتر مواقع، از API برای استفاده از آن‌ها کمک می‌گیریم. یک API ، مجموعه بسته‌بندی‌شده‌ای از خصیصه‌ها و متدها (تکه‌کدهایی که برای هدف خاصی ساخته شده‌اند) هستند که نام خاصی دارند و درست مثل متغیرها می‌توانید توسط آن نام در کدهای خود به آن‌ها ارجاع دهید. APIها کارهای بسیار مفیدی برای شما انجام می‌دهند.

آرایه‌های جاوااسکریپت، API خاص خود را دارند. خصیصه length، بخشی از این API است. بخش دیگر این API، متدیست به نام push که یک المان را به انتهای آرایه اضافه می‌کند:

dumb_tweets.push(‘پسر، من از ایده‌های خوب متنفرم.’)

یک متد شبیه یک خصیصه است چون با کمک یک نقطه می‌توانید به آن دسترسی پیدا کنید. متدها شکل دیگری از خصیصه‌ها هستند چون باید بعد از آن‌ها (پرانتز) درج شود. این پرانتزها داده‌هایی را که می‌خواهیم به آرایه خود اضافه کنیم، نگهداری می‌کنند. حال، آرایه dumb_tweets ما حاوی چهار المان است. چیزی شبیه این:

[‘Hello, Twitter!’, ‘My friends are so cool’, ‘I regret literally everything I have ever said’, ‘Man I hate good attitudes’]

به خاطر داشته باشید که ایندکس المان آخر، 3 است (چون از صفر شروع به شمارش می‌کنیم) و برای ارجاع به آن از [dumb_tweets[3 استفاده می‌کنیم و از حالا به بعد dumb_tweets، عدد 4 را نتیجه خواهد داد.

API آرایه جاوااسکریپت حاوی متدهای بسیار زیادیست که توضیح آن‌ها خارج از موضوع این نوشته است ولی در این‌جا می‌توانید به آن‌ها دسترسی پیدا کنید.

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

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

نوشته شروع کدنویسی- همین حالا شروع کنید (قسمت دوم) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

چطور یه تیم اسکرام خفن بسازیم؟ (۱۰ نکته کاربردی)

Scrum Team

در این پست می‌خوام بهتون بگم چطور می‌تونید با کمک ۱۰ نکته کاربردی، یه تیم اسکرام خیلی خفن بسازید.

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

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

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

نمی‌شه آدم‌ها رو به زور کنار هم گذاشت و گفت دیگه شما یه تیم هستید. در کار تیمی همه چیز درباره همکاری، ایمنی و توجه ب نقاط قوت همدیگه‌س.

برای ایجاد یه تیم اسکرام جدید، استفاده از مدل تاکمن (از اینجا می‌تونید با مدل تاکمن بیشتر آشنا شید.) خیلی خوبه. این مدل کمک می‌کنه بفهمید توی تیم چی می‌گذره و برای ادامه به چی نیاز داره. با صبر و حوصله به تیم نگاه کنید ببینید توی کدوم مرحله هستید. بعد از شناسایی مرحله مورد نظر، این ۱۰ نکته می‌تونه به شما در تیم‌سازی کمک کنه:

۱ زمانی رو برای استارت کار در نظر بگیرید.

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

روز اول رو صرف آموزش اسکرام و بازنگری اصول کنید. درباره چگونگی استفاده بهینه از اسکرام در تیم حرف بزنید.

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

روز سوم هم به ایجاد بک لاگ محصول و شروع اسپرینت اول اختصاص بدید.

بهتون تضمین می‌دم که همه تیم‌هایی که این بازه زمانی سه روز رو برای شروع در نظر بگیرن، در ادامه مشکلات کمتری رو تجربه می‌کنن و کارشون با سرعت بیشتری پیش می‌ره.

۲ شناختن همدیگه، نیمی از کاره

مهم‌ نیست که همه با هم غریبه هستن یا یه مدتی با هم کار کردن، به هر حال باید وقت بذارن و در اولین جلسه تیمی همدیگه رو بیشتر بشناسن.

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

۳ آموزش اسکرام

نباید اینطوری باشه که از کل تیم اسکرام فقط دو نفر درباره اسکرام خونده باشن. می‌شه توی ساعت‌های استراحت در حد ۱۵ دقیقه هر روز درباره‌ش حرف زد. متاسفانه علی‌رغم محبوبیت اسکرام، بیشتر مردم تفسیر یا برداشت غلطی نسبت به اسکرام دارن. (یادم بندازید بعدا یه خاطره درباره این تفسیر غلط واستون تعریف کنم.)

Development Team

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

۴ تدوین چشم‌انداز تیمی

به تیم بگید که بدترین تیم ممکن و بهترین تیم ممکن رو تصور کنن. بعد بگید دو نفر دو نفر درباره مواردی که برای تیم اتفاق می‌افته حرف بزنن و نتایج رو بگن. این کار به تیم کمک می‌کنه که درباره رفتارهای مولد و غیر مولد آگاه بشن و چشم اندازی از موانع داشته باشن. در اصل تیم دیدگاهی از معنای یه تیم خوب به دست میاره. در نهایت می‌تونه یه مانیفست تیمی برای خودش تدوین کنه و ببینه به کجا می‌خواد برسه.

۵ تدوین قرارداد تیمی

بهتره همین اول کار، شفافیت داشته باشید. چطور قراره به صورت تیمی کار کنیم؟ چه کسی مسئول چیه؟ رویدادها کی برگزار می‌شه؟ چه موقع به عنوان تیم خوشحالیم؟ هدف اسپرینت چیه؟ وضوح در نقش‌ها و رویدادها باعث ایجاد نظم می‌شه و در تشکیل تیم موثره. تیم در این مرحله هنوز احساس امنیت نداره و باید دغدغه‌هاش رفع شه. بهتره یه قرارداد تیمی بنویسید و همه چیز رو مشخص کنید.

۶ انتخاب نام تیم

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

۷ تعیین انتظارات

یه تیم اسکرام خوب با یکی دو اسپرینت، شکل اصلی خودش رو پیدا نمی‌کنه. زمان می‌بره تا بفهمید چطور بهترین کار رو انجام بدید اما در هر صورت صرف زمانی قبل از شروع کار باعث می‌شه بعضی چیزها سرعت بگیره. مواظب باشید انگیزه اولیه از بین نره و انتظارات تیم و آدم‌های بیرون از تیم رو مدیریت کنید.

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

۸ رترو، رترو و رترو

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

Retrospective

۹ درگیر کردن مدیریت برای حمایت از استارت کار

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

۱۰ «خودسازماندهی را به تیم بیاورید.»

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

نتیجه‌گیری:

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

ترجمه آزاد: https://medium.com/the-liberators/how-to-kickstart-a-great-scrum-team-10-practical-things-to-do-2143bdde1a8d

نوشته چطور یه تیم اسکرام خفن بسازیم؟ (۱۰ نکته کاربردی) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

درس‌هایی از سیستم عامل برای زندگی روزمره: الگوریتم‌های زمان‌بندی

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

چرا؟ در ادامه می‌بینیم.

تعریف ویکیپدیا:‌ سیستم عامل یا سامانهٔ عامل[۱] نرم‌افزار سیستمی ای است که مدیریت منابع رایانه را به عهده گرفته و بستری را فراهم می‌سازد که نرم‌افزار کاربردی اجرا شده و از خدمات آن استفاده کنند.

به زبان ساده یعنی سیستم‌عامل منابع کامپیوتر را در اختیار گرفته و کارهایی‌که باید انجام شوند (تسک‌ها) را مدیریت می‌کند یعنی به آن‌ها بسته به نیازشان منبع می‌دهد.

برای کاربرد‌های روزمره هم از همین واژه‌ها استفاده می‌کنم: یک سری کار برای انجام دادن داریم و یک سری منابع.

کار (task) که فکر نمی‌کنم ابهامی داشته باشد! مثلا تکلیف چهارم درس فلان، پروژه‌ای که برای خودم دارم و می‌خواهم با زبان X انجام دهم یا چیزی که کارفرما خواسته و تا آخر هفته باید تمام شود.

منبع (resource) یعنی امکاناتی که برای انجام کارها در اختیار داریم، مثلا زمان و سرمایه. اینجا بیشتر با زمان کار داریم. ولی می‌توانید برای چیزهای دیگر را هم منابع در نظر بگیرید مثلا فضای روی میز!

برای کامپیوتر فهمیدیم که چه کسی مسئول تخصیص منابع است، اما برای خودمان چی؟ متاسفانه کسی به این دقت برای ما برنامه‌ نمی‌ریزد و این کار خود ماست. کدام کار را انجام دهیم. کدام را انجام ندهیم. کدام را زودتر انجام دهیم چون واجب‌تر است و …


سیستم عامل خودت باش

خب من به عنوان سیستم‌عامل خودم که قرار است تسک‌ها را مدیریت کنم، چطوری باید این کار را انجام بدهم؟

روش‌های مختلفی برای مدیریت‌ کار‌ها هست.

از طریق مشاور دبیرستانمان با ماتریس آیزنهاور آشنا شدم. این روش می‌گوید کار‌ها ۴ حالت دارند:

  • مهم و فوری: باید به سرعت انجام شود.
  • مهم و غیرفوری: باید انجام شود ولی زمانش چندان اهمیتی ندارد.
  • غیرمهم و فوری: انجام شدنش برای شخص ما اهمیتی ندارد ولی زمان انجامش محدود است.
  • غیرمهم و غیرفوری: اسمش گویا هست.

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

https://zehnekhalag.ir/eisenhower/منبع و مطالعه بیشتر

روش معروف دیگر که در کتاب clean coder آمده روش مدیریت زمان گوجه‌ای یا پومودرو است. در این روش، فرد کار‌ها را در بازه‌های زمانی ۲۵ دقیقه‌ای انجام می‌دهد. در آن ۲۵ دقیقه هیچ کار دیگری انجام نمی‌شود. بعد از ۲۵ دقیقه چند دقیقه استراحت و سپس ۲۵ دقیقه بعدی

این مثال‌ها را دیدید؟ این‌ها روش‌هاییست برای مدیریت زمان برای انجام کارها. دقیقا کاری که سیستم عامل در کامپیوتر شما انجام می‌دهد.


الگوریتم‌های اولویت‌دهی در سیستم‌عامل

از اسم این قسمت نترسید! قرار نیست حرف پیچیده‌ای بزنم! حداقل پیچیده‌تر از «عمیق نگاه کردن به زندگی روزمره».

توضیح مختصر پس‌گیرنده و پس‌نگیرنده

اگر زمانی که در حال انجام یک کار هستیم، تا زمانی که تمام نشده با آمدن کارهای جدید، آن را متوقف نکنیم، می‌شود پس نگیرنده (non-Preemptive). اما اگر هنگامی که در حال یک کار هستیم با آمدن جدید سری هم به کار جدید بزنیم و یک دور لیست کار‌ها ها ورق بزنیم و بعد تصمیم بگیریم چه کاری را انجام دهیم، می‌شود پس‌گیرنده (preemptive). منظور از پس‌گیرنده این است که کاری که در حال اجرا بود را پس می‌دهیم و کار دیگری را برمی‌داریم اما در حالت پس‌نگیرنده کار گرفته شده تا وقتی کامل انجام نشود پس گرفته نمی‌شود.

الگوریتم‌های پس‌نگیرنده

  • هرکاری اول آمده را زودتر انجام بده (first come first serve): منتظر بمان تا کاری بیاید، آن را انجام بده و دوباره ببین (به ترتیب آمدن) کار بعدی را انتخاب کن و انجام بده.
  • کار کوتاه‌تر را زودتر انجام بده (shortest job first): بین کارها کاری را انتخاب کن که زمان کم‌تری برای انجام شدن نیاز دارد. با این ریسک که کار خیلی بلندی ممکن است هیچوقت انجام نشود.

صرفا برای زیبا(تر) کردن مطلب!

الگوریتم‌های پس‌گیرنده

  • کوتاه‌ترین زمان باقی‌مانده را اول انجام بده (shortest remaining time first): مثل حالت کار کوتاه‌تر است با این تفاوت که در زمانی که کار جدید بیاید (بدون توجه به اینکه کار فعلی انجام شده یا نشده) بررسی می‌کند و کاری که زمان باقی‌مانده کمتری دارد را انجام می‌دهد. مثلا یک کار ۲ ساعته دارم و یک ساعتش انجام شده، حالا یک کار نیم ساعته اضافه می‌شود. پس کار ۲ ساعته را رها می‌کنم و نیم ساعته را پیگیری می‌کنم. استفاده از این الگوریتم با این ریسک است که یک کار در لیست بماند و قدیمی و قدیمی‌تر شود.
  • بالاترین نسبت پاسخ (highest response ratio next): برای حل مشکل قدیمی‌شدن، علاوه بر اولویت‌دادن به «کوتاه‌ترها»، به کار‌های «قدیمی‌تر» هم اولویت می‌دهیم تا کاری در صف برای مدت زیادی نماند.
  • نوبت‌گردشی (round robin): به نظرم این روش خیلی به روش گوجه نزدیک است. روش کار به این صورت است که از هر کار مدت زمان معینی را انجام بده (مثلا همان ۲۵ دقیقه). سپس این کار را بگذار کنار و کار بعدی را ۲۵ دقیقه انجام بده. در این صورت همه کار‌ها در حال انجام شدن هستند.

در روش نوبت گردشی، دو نکته قابل توجه است. اول اینکه اگر کاری در صف است که اهمیت بیشتری‌دارد می‌توانیم چند نوبت به ان اختصاص دهیم، مثلا در طی یک دوره که از هر کار ۲۵ دقیقه انجام می‌دهیم، این این کر دو نوبت انجام دهیم. نکته دوم اینکه برای انتخاب زمان مناسب (در مثال ما ۲۵ دقیقه) باید تعادلی برقرار کنیم بین دیر شدن کار‌ها (اگر ۱۰۰ کار داشته باشیم، بعد از ۲۵۰۰ دقیقه دوباره نوبت کار فعلی می‌شود) و زمان کانتکست سوییچ.

از این نمودار برای نمایش و مثال زدن برای الگوریتم‌ها استفاده می‌شود ولی آوردنش اینجا هدفی ندارد.

کانتکست سوییچ؟

یعنی زمانی که بین انجام کارها هدر می‌رود برای تغییر از کار ۱ به کار ۲. مثلا الان در حال نوشتن وبلاگ هستم، از زمانی که این کار‌ را رها کنم تا زمانی که شروع کنم و به صورت موثر برای امتحان فردا بخوانم می‌شود زمان context switch. این زمان برای کامپیوتر معمولا اندک و قابل چشم‌پوشی است ولی برای ما نه! مثلا من تا جزوه را در بیاورم و شماره صفحه و فصل‌های مورد سوال و .. را پیدا کنم و اولین کلمه را بخوانم همه در زمان هدر رفته‌ی context switch هستند. اگر می‌خواهیم بازه‌های زمانی کوتاهی انتخاب کنیم باید حواسمان به این زمان هدر رفته باشد.

حالت چند‌صفی

ما قرار نیست همه کارهایمان را فقط در یک صف قرار دهیم. می توانیم برای کار‌های ددلاین‌دار یک صف داشته‌باشیم و بر اساس ددلاینشان زمان‌بندی کنیم و برای کار‌های بدون ددلاین (مثلا همان پروژه‌های شخصی) صف دیگری داشته باشیم. یا مثلا یک صف برای کارهای بزرگ و طولانی داشته‌باشیم و یک صف برای کارهای کوتاه که هر کدام جدا زمان‌بندی شوند. در آخر باید تصمیم بگیریم که چقدر از زمان را به هر صف بدهیم. مثلا ۷۰ درصد برای کارهای مهم (ضروری و غیرضروری) و ۳۰ درصد برای کارهای غیرمهم.

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

بازخورد گرفتن هم بسیار مهم است، مثلا می‌توانیم با بازخوردی که از کارایی یک کار در یک تسک داشتیم، تصمیم بگیریم در صف دیگری قرارش دهیم.

اگر این قسمت را خواندید قطعا یاد صف نانوایی افتاده‌اید. یک صف برای یک دانه‌ای و یک صف برای چندتایی. به این هدف که کسی که کار کوتاه‌تری دارد مدت زیادی برای کار کوتاهش معطل یک کار بزرگ نشود. هر صف به شیوه خودش (مثلا هرکس اول آمده را زودتر انجام بده) مدیریت می‌شود.

زمان‌بندی برای کارهای دوره‌ای

کارهای دوره‌ای یعنی مثلا کاری که هر هفته باید انجام شود، مثلا درسی که هر هفته تکلیف می‌دهد و مهلتش تا هفته دیگر همان موقع است. در همین حین ممکن است درس دیگری هر ۱۰ روز و درس دیگری هر ۱۴ روز تکلیف دهد.

کدام را باید اول انجام داد؟

  • هر کدام زمان کم تر داره (Rate-monotonic scheduling): به صورت پس‌گیرنده تسکی را انجام بده که زمان کم‌تری دارد. مثلا درسی که هرروز تکلیف می‌دهد را با اولویت بالا انجام بده.
  • هر کدام ددلاین نزدیک تری دارد (earliest deadline first): به صورت پس‌گیرنده، تسکی را انجام بده که ددلاین نزدیک‌تری دارد. (بیشتر توضیح دهم؟)
  • اونی که نسبت به زمان باقی‌مانده‌ش، تایم کم‌تری داریم (least laxity first): از بین تسک‌ها تسکی را انتخاب کن که زمان باقی‌ماندهتا ددلاین منهای زمان باقی‌مانده از تسک کم‌ترین باشد. به بیانی تنبلی (laxity) کم‌تری مجاز است.

از کجا بفهمیم این کار چقدر طول می‌کشد؟

در بعضی از الگوریتم‌ها نیاز داریم بدانیم که این کار چقدر طول می‌کشد. در کامپیوتر و زمانی‌ که یک کار ناشناخته را می‌خواهد انجام دهد این سوال خوبی است ولی جواب خوبی ندارد! برای پاک کردن صورت مسئله از الگوریتم‌هایی استفاده می‌شود که نیاز به این عدد ندارند مثلا نوبت‌گردشی.

برای ما انسان‌ها ولی اصولا تخمین زدن کار سختی نیست، با استناد به همین توانایی جلو بروید و هربار سعی کنید تخمین بهتری بزنید.

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

https://sabzdanesh.com/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D8%B2%D9%85%D8%A7%D9%86%D8%A8%D9%86%D8%AF%DB%8C-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D9%86%D8%AF%D9%87/

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

نوشته درس‌هایی از سیستم عامل برای زندگی روزمره: الگوریتم‌های زمان‌بندی اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

آموزش برنامه نویسی- همین حالا شروع کنید

در این نوشته، قصد ندارم آموزش برنامه‌نویسی را به طور کامل انجام دهم. در واقع هدفم این است که در سلسله مقالاتی، مفاهیم و کلیدواژه‌هایی را مطرح کنم که یک نفر با دانش صفر بتواند کدنویسی پایه را شروع کند. با من همراه باشید.

این آموزش که طی سلسله مقالاتی با همین عنوان، عرضه می‌شود، برای افراد زیر مناسب است:

  • کسانی که به برنامه‌نویسی علاقه دارند ولی قبل از این که زمان و انرژی خود را صرف آن کنند، می‌خواهند طعم آن را بچشند.
  • کسانی که در شروع سفر یادگیری علوم کامپیوتری هستند و می‌‌خواهند هر چه سریع‌تر به دانش اولیه لازم دست پیدا کنند.
  • کسانی که برنامه‌نویس‌ها را در تلویزیون و شبکه‌های اجتماعی دیده‌اند و کنجکاوند که بدانند این افراد دائماً مشغول چه کاری هستند.

اول از همه: نفس عمیقی بکشید. تصویری که در ابتدای این نوشته مشاهده می‌کنید، یک کد واقعی نیست و کسی از آن به عنوان کد استفاده نمی‌کند. بخش عمده کدها یا برنامه‌های واقعی (کدهایی که خود من می‌نویسم) از حروف انگلیسی، ارقام (هر 10 رقم نه فقط دو رقم صفر و یک) و نمادها تشکیل شده‌ است. در واقع، اگر با دستور زبان برنامه آشنا شوید، می‌توانید آن‌ها را بخوانید.

پیشنهاد مقاله: آموزش برنامه‌نویسی– شروع آموزش برنامه‌نویسی

در این‌جا درخواستی از شما دارم: اگر قسمتی از مطالبی که می‌گویم برایتان قابل فهم نیست، لطفاً زیر همین پست، آن را بنویسید تا بیشتر در مورد آن توضیح بدهم. من در نوشتن وسواس دارم و می‌خواهم مطلبم قابل فهم باشد.

بیایید شروع کنیم.

آموزش برنامه‌نویسی: برنامه کامپیوتری چیست؟

برنامه کامپیوتری که بعضاً با نام اَپ، اپلیکیشن یا نرم‌افزار نیز شناخته می‌شود، از مجموعه‌ای از سطور متنی به خصوص تشکیل می‌شود. این سطور متنی با سطور متنی معمولی فرق دارند زیرا علاوه بر انسان، کامپیوتر نیز می‌تواند آن‌ها را درک کند و کامپیوترها بی‌نهایت خنگ هستند. حتی در کوچک‌ترین برنامه‌ها هم می‌توان صدها سطر متنی از این نوع را مشاهده نمود. می‌پرسید برنامه‌های بزرگ چه؟ آن‌ها عموماً از میلیاردها سطر تشکیل می‌شوند.

ما اسم این متن‌های به خصوص را کد گذاشته‌ایم. کد، عبارت است از مجموعه‌ای از دستورالعمل‌های گام به گام است و به کامپیوتر می‌گوید که با داده‌ها چه کاری انجام دهد. داده، قطعه‌ای از اطلاعات است که کامپیوتر می‌تواند در حافظه خود آن را نگهداری کند. کامپیوترهای مدرن، در نگهداری این قبیل اطلاعات، توانایی بالایی دارند. اگر در توییتر حساب کاربری داشته باشید، اطلاعاتی مثل تاریخ تولد و تمام توییت‌های شما در تعدادی کامپیوتر غول‌پیکر ذخیره می‌شود که در انبار کامپیوترهای توییتر نگهداری می‌شوند. اطلاعات 300 میلیون نفر دیگری که در توییتر، حساب کاربری دارند نیز در این کامپیوترها نگهداری می‌شود.

ولی نگران نباشید کامپیوترها بی‌کار نیستند و برای سرگرمی به خواندن توییت‌های قدیمی شما مشغول نمی‌شوند. اگر هم این کار را بکنند، آن‌ها نمی‌توانند به توییت‌های قدیمی شما بخندند.

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

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

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

کل ماجرا از این قرار است. برنامه‌نویسی کار خیلی سختی نیست. فقط باید چند صد اصطلاح را حفظ کنید و با برخی قواعد گرامری آشنا شوید. همان کاری که وقتی 2 سالتان بود با زبان فارسی انجام دادید و آن موقع شاید فکر می‌کردید زبان فارسی خیلی پیچیده و عجیب است. سخت‌ترین بخش برنامه‌نویسی  هضم نا امیدی‌های بسیاریست که در مسیر یادگیری با آن رو به رو می‌شوید.

بخش خنده‌دار برنامه‌نویسی، حل مسأله است. مشکلات واقعی دنیا به صورت پازل‌هایی درآمده‌‌اند که می‌توان آن‌ها را به ایوسیله کدنویسی حل کرد (البته به شرطی که واقعاً این مشکلات را درک کرده باشید). بعد از این که تمام راه‌حل‌های ممکن برای یک مسأله را در ذهن خود حلاجی کردید، می‌توانید برنامه‌ای ‌بنویسید که به صورت مرحله به مرحله، آن را حل کند.

جعبه ابزار برنامه‌نویس‌ها

جعبه‌ابزار برنامه‌نویس‌ها نوعاً از چند چیز تشکیل می‌شود:

  • یک کامپیوتر
  • یک اتصال اینترنت. در واقع برای این که بتوانید از گوگل استفاده کنید باید یک اتصال اینترنت داشته باشید. به این ترتیب، هر وقت در مورد نحوه انجام کاری با سؤالاتی مواجه شدید (که معمولاً روزانه 69945983453 بار این اتفاق رخ می‌دهد)، می‌‌توانید در گوگل به جستجو بپردازید. وقتی هم که برنامه شما پیام خطا می‌دهد، آن را در گوگل سرچ می‌کنید. در واقع، معمولاً باید همه چیز را در گوگل سرچ کنید.
  • یک ویرایشگر کد (IDE). چیزی شبیه برنامه Microsoft Word کدنویس‌ها که به آن‌ها در سازماندهی و عیب‌یابی کدها کمک می‌کند.
  • یک کامپایلر یا تفسیرگر. برنامه‌ای که کدهای شما را می‌خواند و سعی می‌کند اشتباهات شما را پیدا کرده و به شما اطلاع دهد و بعد آن را برای اجرا به کامپیوتر منتقل کند. البته کارهای زیاد دیگری هم انجام می‌دهد ولی فعلاً تا همین حد بدانید کافیست.
  • یک هدفون خوب. هدفون به شما کمک می‌کند بی‌خیال اطرافیانتان شوید تا بتوانید تمرکز کنید.

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

بسیار خوب، پس شما ابزارهای لازم را در اختیار دارید، درست است؟

زبان‌های برنامه‌نویسی

در دنیا هزاران زبان برنامه‌نویسی وجود دارد. بسیاری از آن‌ها گنگ و بی‌فایده هستند و می‌توانید با شناختن سه یا چهار زبان برنامه‌نویسی، مدتها در شغل لذت‌بخش خود به کار ادامه دهید. ولی نگران نباشید، یاد گرفتن آن‌ها به سختی یاد گرفتن سه یا چهار زبان انسانی نیست.

زبان‌های برنامه‌نویسی، اغلب با پارادایمی توصیف می‌شوند که نوع ويژگی‌های درونی آن‌ها را طبقه‌بندی می‌کند. به عنوان مثال، جاوااسکریپت، زبانیست که تمام مرورگرهای وب آن را اجرا می‌کنند و احتمالاً محبوب‌ترین زبان برنامه‌نویسی دنیاست. ویژگی‌های گوناگونی در جاوااسکریپت وجود دارد. من می‌توانم بگویم جاوااسکریپت پارادایم‌های ساختارمند، شیء گرا و رویدادمحور را پشتیبانی می‌کند و در مقابل، شما می‌توانید من را یک بچه‌درس‌خوان پرمدعا خطاب کنید.

لازم نیست معنای تمام این کلمات را بدانید. چیزی که باید بدانید این است که معمولاً زبان‌های برنامه‌نویسی که پارادایم مشابه دارند، معمولاً سینتکس مشابه نیز دارند. منظور از سینتکس، فرهنگ لغات و گرامر است. لذا وقتی یک زبان برنامه‌نویسی (مثل جاوااسکریپت) را یاد گرفتید، 75 درصد از مسیر یادگیری زبان‌های مشابهی چون پایتون و رابی را نیز طی کرده‌اید.

کدنویس‌های ماهر قادرند مشکلات را به صورت الگوریتم بفهمند. الگوریتم، به مجموعه‌ گام‌هایی گفته می‌شود که برای انجام یک کار خاص باید انجام شوند، هر چند که جزئیات در شرایط مختلف، متفاوت باشد. تا به حال به سایت دیجی‌کالا رفته‌اید؟ عملیات پرداخت، مثالی از الگوریتم است. مهم نیست چه جنسی قریداری کرده‌اید، مراحل پرداخت، همیشه یکسان است: باید اطلاعات کارت بانکی، آدرس و نحوه ارسال محموله را وارد کنید. کدهای کامپیوتری این بخش کار، همیشه یکسان است و چیزی که تغییر می‌کند، داده‌هاییست که شما وارد می‌کنید. حال دقت کنید: تمام الگوریتم‌ها را می‌توان در تمام برنامه‌های کامپیوتری معمول، نوشت و به اجرا درآورد. این یک حقیقت ریاضیست. بعد از این که تفکر الگوریتمی را یاد گرفتید، زبان برنامه‌نویسی، در درجه اهمیت دوم قرار دارد. البته حس و حال برنامه‌ها تا حدی با هم متفاوت است ولی در نهایت، مسأله مهم، نمادها یا کلیدواژه‌هایی که به کار می‌برید، نیست، مسأله، فرایندیست که در حال توصیف آن هستید.

از این‌جا به بعد، می‌خواهم از زبان برنامه‌نویسی جاوااسکریپت استفاده کنم و مثال‌هایی برایتان بزنم. این را به خاطر حال دل خودم انجام می‌دهم چون جاوااسکریپت را خوب می‌فهمم.

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

در جمله بالا، سه اشتباه عمدی لحاظ شده است: فاصله اضافه‌ای که بعد از لغت for وجود دارد. آپوستروف اضافه‌ای که بعد از لغت Alice’s درج شده و لغت without که اشتباه املایی دارد و wihout نوشته شده. احتمالاً در همان سطر اول، توانسته‌اید این اشتباهات را تشخیص دهید ولی تشخیص آن‌ها در سطر دوم، ساده‌تر است و وقتی با یک کد 200 سطری سر و کار دارید، این سادگی بسیار ارزشمند است.

وارد کردن داده‌ها در قالب کد

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

به دو دلیل، باید داده‌های خود را نام‌گذاری کنید:

  • ما از قبل، هیچ اطلاعی راجع به داده‌ها نداریم. آیا فیسبوک، قبل از این که شما تاریخ تولد خود را وارد کنید، از آن آگاه است؟ نه، البته که نه. در پشت صحنه کدهای فیسبوک از اسمی شبیه people’s_birthday برای تعیین داده‌های مربوط به تاریخ تولد، استفاده می‌شود. از آن‌جا که نباید در اسامی متغیرها فاصله خالی وجود داشته باشد، از underscore برای جداکردن کلمات استفاده می‌شود. این کد، نام را به تاریخ تولدی که شما وارد می‌کنید، الصاق می‌کند و به این ترتیب، صرف نظر از این که تاریخ تولد شما 11 شهریور است یا 2 آبان، کدی که نوشته شده، یکسان است.
  • شما باید معنای داده را به خاطر بسپارید. فرض کنید می‌خواهید به کامپیوتر خود بگویید تاریخی به نام 83 فروردین، تاریخی نامعتبر است. بنابراین، باید جایی به کامپیوتر بگویید که ماه دسامبر، 30 روز دارد. 30 یک عدد است. یک قطعه داده است. اما اگر در تمام کدهایتان از عدد 30 استفاده کنید و از اعداد 31 و 28 هم استفاده کنید، کد شما برای خواندن آن دچار سردرگمی می‌شود. این اعداد چه هستند؟ به همین دلیل، نامی را برای آن تعیین می‌کنید. عدد 31 تبدیل می‌شود به the_number_of_days_in_farvardin و کد شما همه چیز را درک می‌کند. زیباست نه؟

کامپیوتر انتظار دارد که نام متغیرهای خود را اعلام کنید. اعلام نام یک متغیر، شبیه سند تولد یک قطعه داده است. چیزی مثل این:

var the_number_of_days_in_farvardin

در این عبارت، واژه عملیاتی، var است. در واقع، مخفف variable (به معنای متغیر) است. استفاده از مخفف‌ها کار قشنگیست زیرا سرعت تایپ را بالا می‌برد. حتی یک دستی هم می‌توانید آن را تایپ کنید. در این حالت، می‌توانید با دست دیگرتان قهوه بنوشید یا با یک تسبیح بازی کنید.

کار دیگری که می‌توانید با متغیرها انجام دهید، این است که آن‌ها را به چیز دیگری اعمال کنید. می‌توانید مثلاً نامی را به یک قطعه داده، الصاق کنید.

the_number_of_days_in_farvardin = 30

مطالب، بسیار ساده هستند. ابتدا متغیر را تعریف می‌کنید و بعد آن را به چیزهای مختلف اعمال می‌کند و بعد هر زمان که خواستید از شماره 30 در برنامه خود استفاده کنید، می‌توانید تایپ کنید the_number_of_days_in_farvardin و کامپیوتر نیز منظورتان را می‌فهمد.

هنگام نوشتن یک برنامه، متغیرها لزوماً به یک قطعه داده مشخص اعمال نمی‌شوند. می‌توانید متغیرها را تعریف کنید و بعد آن‌ها را به چیزهایی اعمال کنید که حتی وجود خارجی ندارند. به عنوان مثال، می‌توانید متغیری با نام people’s_birthday تعریف کنید و به برنامه بگویید منتظر بماند تا کاربر آن را تایپ کند. هر تاریخی که کاربر در این قسمت تایپ کند، تبدیل به people’s_birthday می‌شود و شما اصلاً کاری به کارش ندارید.

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

var_behtarin_shere_donya=’daram dam dam da dam’

دیدید؟ من در کد بالا، هم متغیر را تعریف کردم و هم آن را به چیزی اعمال کردم. از این به بعد، هر جا که در کدهایم بنویسم behtarin_shere_donya، کامپیوتر می‌داند که منظورم daram dam dam da dam است. در واقع مانند این است که با کامپیوترم به زبان کد صحبت می‌کنم.

حرفم را باور نمی‌کنید؟ همین حالا این کار را بکنید. اگر این مقاله را در تلفن همراهتان می‌خوانید، باید در یک کامپیوتر، مرورگر وب (گوگل کروم) را باز کنید. کلید f12 را روی صفحه کلید کامپیوتر فشار دهید. چیزی شبیه تصویر زیر را مشاهده می‌کنید:

مطمئن شوید زبانه Console فعال باشد. بعد روی فضای خالی، بعد از نماد < کلیک کنید. بعد مانند تصویر زیر، متغیر را تعریف کرده و آن را به چیزی مثل متن، الصاق کنید:

چون خط کدی که تایپ کرده‌اید، هیچ داده‌ای را تولید نمی‌کند، کنسول عبارت undefined (به معنای تعریف نشده) را نمایش می‌دهد.عیبی ندارد فکرش را نکنید. حال نام متغیر را تایپ کرده و کلید enter را فشار دهید.

تبریک می‌گم شما موفقت شدید! کنسول (که یک تفسیرگر است) متغیر شما را درک می‌کند. متغیر behtarin_shere_donya به عنوان  “daram dam dam da dam” مشخص می‌شود (شناخته می‌شود).

در بسیاری از زبان‌های برنامه‌نویسی باید نوع متغیری را که می‌خواهید تعریف کنید، مشخص کنید. مثلاً در c++ ، کلیدواژه var وجود ندارد. به جای آن از کلیدواژه int (برای مشخص کردن اعداد صحیح کوچک) و کلیدواژه long (برای مشخص کردن اعداد صحیح بزرگ) و کلید واژه float و double (برای مشخص کردن اعداد اعشاری) و کلیدواژه string (برای مشخص کردن متن) استفاده می‌شود. فعلاً نگران این‌ها نباشید چون بعداً همه آن‌ها را یاد می‌گیرید.

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

پیشنهاد مقاله: چه طور برنامه‌نویسی یاد بگیرم؟ ۱۱نکته مهم

اگر سؤالی داشتید، حتماً در زیر همین پست، مطرح کنید.  اگر بتوانم کمکی به شما بکنم، باعث خوشحالی من خواهد بود.

نوشته آموزش برنامه نویسی- همین حالا شروع کنید اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

زبان برنامه‌نویسی فینگیلیش؟!

به نام خدا… سلام!

https://vrgl.ir/hS6dg
https://vrgl.ir/IG910
https://vrgl.ir/1iNzj

توی نوشته‌های قبلیم درباره زبان برنامه‌نویسی فارسی‌ای که درست کردم نوشته‌بودم. از همون اول یه مشکلی که وجود داشت و هنوز هم وجود داره این بود که فارسی از معدود زبان‌های راست به چپ یا Right to Left هست و معمولاً کنسول‌ها و ترمینال‌های سیستم‌عامل‌های مشهور با این زبان‌ها مشکلات زیادی دارن.

در نتیجه این زبان نمیتونست زیاد جدی باشه و افراد زیادی ازش استفاده کنن… تا وقتی این جرقه توی ذهنم خورد! ایدهٔ ساختن یه نسخهٔ فینگیلیش یا پینگیلیش یا هر چیزی که اسم درستشه (!) از این زبان کوچک.

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

اینم یه نمونه برنامه برای آشنا شدن با حال و هوای این مود!

agar 1 barabare 2 bashad
	adad ra bepors
vagarna
	adad = 123
payan
adad ra benevis

میدونم یکم مسخره‌ـست ولی برای تمرین خوب بود!

البته این رو بگم که نسخه‌های بعدی تحت وب ارائه میشن و به همین دلیل نیازی به این کارا نیست. فقط خواستم یکم سر خودم رو گرم کنم.

راستی! یه سوال دیگه ازتون داشتم… به نظر شما این زبان نوشتنی باشه یا مثل اسکرچ بلوک‌بلوک باشه؟ چون فقط جنبه آموزشی برای تازه‌کارا داره از نظر من پس میتونه مثل اسکرچ هم باشه. یا میتونه هر دو نسخش باشه.

برای نسخه اسکرچ، میشه از Google Blockly استفاده کرد که خیلی کار رو راحت کرده! فقط باید سعی کنم یه تم قشنگ مثل اسکرچ براش بسازم.

ممنون که این نوشته رو هم تحمل کردین!

خدانگهدار

نوشته زبان برنامه‌نویسی فینگیلیش؟! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

زبان برنامه‌نویسی فردوسی؟

به نام خدا… سلام!

احتمالاً در جریان هستین که چند وقت پیش یه زبان برنامه‌نویسی فارسی طراحی کرده‌بودم. ولی توی این مرحله مونده‌بودم که اسمش چی باشه بهتره؟! توی نوشته‌هام کلی نظر درباره اسمش نوشته‌شده. از همونا هم برای پیدا کردن یه اسم خوب (از نظر خودم) استفاده کردم.

خب من سعی کردم انتخاب‌های نامناسب (همشون قشنگ بودن ولی من با سلیقه خودم رفتم جلو دیگه!) رو یکی‌یکی حذف کنم. اولش این اسامی بودن:

  • خوارزمی
  • فردوسی
  • فایتون
  • یوز
  • زبان پی (Plang)
  • خیام
  • رستم
  • کیکاووس
  • اسفندیار
  • اشکان
  • درخت
  • ریشه

اول از همه، من کلا از این چهار تا بیشتر از بقیه خوشم اومد:

  • خوارزمی
  • فردوسی
  • یوز
  • ریشه (داره به ریشه و اصل و نصب یعنی زبان فارسی اشاره میکنه)

خب راستش با این‌که خیلی بهم پیشنهاد شد ولی ته دلم دوست ندارم اسمش رو خوارزمی بزارم. فکر نکنین خوشم نمیاد خیلی هم به نام و خود خوارزمی علاقه دارم و درباره‌ـشون کلی مطالعه کردم. ولی چون یه زبان برنامه‌نویسی فارسی دیگه به اسم خوارزمی وجود داره پس به نظرم کار درستی نیست.

اون که حذف شد میمونن این سه تا:

  • فردوسی
  • یوز
  • ریشه

بین این‌ها میخوام یوز رو هم کنار بزارم؛ به خاطر موتور جستجوی نازنین‌ـمون! نمیخوام چیزی هم‌نامش باشه! پس حالا فقط این دو تا گزینه رو داریم: فردوسی و ریشه.

بعدش با خودم گفتم شاید ریشه هم توی لحظهٔ اول برای ٪۹۹ افراد نامفهوم به نظر بیاد… پس متاسفانه این هم میره کنار… میمونه فردوسی

نمیدونم این یه اسم که مونده واقعاً از بقیه بهتره؟! ولی بعد کلی تفکّر و تعقّل به این نتیجه رسیدم که فردوسی واقعاً اسم خوبیه… نظر شما چیه؟!

از همهٔ افرادی که من رو همراهی کردن خیلی سپاسگزارم. (شامل حسین و علیرضا آهنی و عباد و اشکان محمدی و مهدی مسرور و شهریار رخ‌افروز و هادی آذرنسب و آقا مصطفی و مهدی موسیوند و ابوالفضل آل کثیر و حسن کاشی و آقا علی و علی سالمی و محمد باقر فکوری و SMAH1 و امیر و محمدصالح کامیاب و عباس مهرعلیزاده و پارسه و همین حوالی که توی نوشته‌های مربوطه نظر دادن)

فعلاً تا نوشتهٔ بعدی خدانگهدار

نوشته زبان برنامه‌نویسی فردوسی؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

راه اندازی HttpClient برای دریافت اطلاعات از api برای انگولار

در این مقاله قصد راه اندازی HttpClient در یک سرویس برای انگولار 8 به بعد جهت برقراری ارتباط با api ها دارم.برای این کار اول از همه یه پروژه انگولار ایجاد می کنیم بعد میایم مرحله به مرحله کارهای خودمون جلو می بریم.

قدم 1- افزودن ماژول HttpClient

توی قدم اول app.module.ts توی این مسیر برید src/app/app.module.ts و این تغییرات اضافه کنید:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http';

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

قدم 2- یه سرویس جدید بسازید

ترمینال باز کنید و این دستور ایجاد سرویس توش بنویسید.

ng generate service backend

قدم 3- Importing and Injecting HttpClient

بعد از ساخت سرویس HttpClient بهش import کنید و بعد در constructor این سرویس HttpClient inject یا تزریق کنید. و در ادامه متد get برای گرفتن اطلاعات از rest api داخل این سرویس اضافه کنید:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})

export class BackendService {  
  constructor(private httpClient: HttpClient) { }  

  public get(){
    return this.httpClient.get(&quotآدرس سرویس api&quot);
  }
}

قدم 4- ساخت یک component

ng generate component home

برای صدا زدن HttpClient باید یه component داشته باشیم تا اطلاعات ازش بگیریم و به کاربر خودمون نشون بدیم،به کمک این دستور توی ترمینال یک component به نام home می سازیم.

قدم 5- افزودن سرویس HttpClient و دریافت داده

حالا به فایل src/app/home/home.component.ts میریم و این اطلاعات بهش اضافه می کنیم.

import { Component, OnInit } from '@angular/core';
import { BackendService } from '../backend.service';
@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})

export class HomeComponent implements OnInit {  
   data= [];  
   constructor(private backendService: BackendService) { }
   ngOnInit() {    
      this.backendService.get().subscribe((ret: any[])=>{
      console.log(ret);
      this.data = ret;
    })  
   }
}

همینجور که مشاهده می کنید بعد از اضاف کردن سرویس BackendService فایل home.component.ts و inject اون به constructor من اومدم برای دریافت اطلاعات از api داخل ngOnInit ، اطلاعات از سرویس مد نظر با متد get که به صورت observable هم هست subscribe کردم و اون داخل متغیری به نام data که توی همین component تعریفش کردم، مقدار دهی کردم.

من قبلا توی این مقاله درباره قرار دادن اطلاعات باید ها و نباید های نوشتن در Constructor و ngOnInit در انگولار صحبت کردم.

قدم 6- نمایش اطلاعات

حالا نوبت به نمایش اطلاعات رسیده از api برای کاربر هستش، میرم به سراغ فایل src/app/home/home.component.html و به کمک ngFor داخل یه تگ li اونها نمایش می دم:

<div>
 <ul>
    <li *ngFor=&quotlet item of data&quot>
        {{item.name}}
    </li>
 </ul>           
</div>

تو اینجا فرض بر این گذاشتم که name یکی از property ها object item هستش.


به انتهای این مقاله آموزشی رسیدم سعی کردم به صورت مختصر و قدم به قدم کار کردن با دستور HttpClient برای گرفتن اطلاعات از api service خدمتتون مطرح کنم.

ممنون از توجهتون 🙂

نوشته راه اندازی HttpClient برای دریافت اطلاعات از api برای انگولار اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

خدافظی با SharedPreferences – آموزش DataStore در اندروید

DataStore در اندروید

دیتا استور چیه؟

دیتا استور(DataStore) کامپوننت جدید Jetpack که قرار جایگزین SharedPreferences بشه، طبیعتا نو که بیاد به بازار یه سری ویژگی های جدید داره، بهترین ویژگی که دیتا استور نسبت به شردپرفرنسز داره اینه که خوندن و نوشتن دیتا به صورت Async و با Flow که کامپوننتی از Kotlin Coroutines هست انجام میشه. چندتا نکته که قبل از ادامه دادن باید بدونید اینه که:

  • دیتا استور در این زمان که این پست نوشته میشه تو حالت آلفا قرار داره که برای استفاده در پروداکشن مناسب نیست.
  • قراره ما با کاتلین کد بزنیم
  • ما از Kotlin Coroutines استفاده میکنیم(خیلی سطح پایین)
  • همچنین از Kotlin Extension هم استفاده شده
  • برای UI برنامه از Jetpack Compose استفاده شده

چطور ازش استفاده کنیم

مرحله اول – کتابخونه رو به پروژه اضافه میکنیم:

implementation &quotandroidx.datastore:datastore-preferences:1.0.0-alpha02&quot

مرحله دوم – ساخت یک نمونه از دیتا استور:

private val dataStore by lazy { context.createDataStore(name = &quotdata_store&quot) }

مرحله سوم – خوندن و نوشتن:

دیتا استور هم مثل شردپرفرنسز داده ها رو به صورت key-value سازماندهی میکنه، اما موضوع برای دیتا استور یکم فرق داره اونم اینه که مثل شردپرفرنسز key ها به صورت string نیستن بلکه اونا باید از نوع Preferences.Key باشن(جلوتر مسئله روشن‌تر میشه) و موضوع دیگه ای هم که هست اگه بخوایم دیتایی رو توی دیتا استور ذخیره کنیم حتما باید از کوروتین کاتلین استفاده کینم، که در ساده ترین حالت فرآیند ذخیره کردن به شکل زیر هست:

GlobalScope.launch {
    val TEXT_KEY = preferencesKey<String>(&quottext&quot)
    dataStore.edit {
        it[TEXT_KEY] = &quotThis is just a simple text&quot
    }
}

درست مثل شردپرفرنسز تو خط دوم یک کلید برای ذخیره کردن دیتامون ساختیم به اسم TEXT_KEY و خط های بعدی دیتا رو توی دیتا استور ذخیره میکنه

وقتی بخوایم داده هایی رو که قبلا ذخیره شدن رو از دیتا استور بخونیم، ما اون دیتا رو در قالب Flow دریافت میکنیم مثل کد زیر:

val text: Flow<String> = dataStore.data.map { data ->
    data[key] ?: &quotDefault value&quot // if the data is null we'll get the &quotDefault value&quot text
}

text.collect { data ->
    println(&quotdata is: $data&quot)
}

درسته یکم عجیب غریب به نظر میاد برای همین همونطوری که بالاتر قید شد برای اینکه کار با دیتا استور راحت‌تر و خوانایی کدها بالاتر بره یه سری Extension Function به سورس‌کدمون اضافه کردیم

@InternalCoroutinesApi
fun <T> DataStore<Preferences>.liveData(key: Preferences.Key<T>, defaultValue: T): LiveData<T> =
    data.map {
        it[key] ?: defaultValue // if the data is null we'll get the defaultValue
    }.asLiveData(IO)

fun <T> DataStore<Preferences>.saveData(data: Pair<Preferences.Key<T>, T>) = GlobalScope.launch {
    edit {
        it[data.first] = data.second
    }
}

فانکشن اول دیتای ذخیره شده تو دیتا استور رو به صورت LiveData به ما میده که نهایتا نحوه خوندن از دیتا استور رو آسونتر میکنه:

val textLiveData: LiveData<String> = dataStore.liveData(TEXT_KEY, &quotnot specified yet&quot) // &quotnot specified yet&quot is the default value

همینطور نحوه استفاده از فانکشن دوم:

dataStore.saveData(TEXT_KEY to &quotThis text is gonna be saved in data store&quot)

در نهایت کد کامل اکتیویتی:

class MainActivity : AppCompatActivity() {

    private val dataStore by lazy { createDataStore(name = &quotdata_store&quot) }

    @InternalCoroutinesApi
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val textLiveData: LiveData<String> = dataStore.liveData(TEXT_KEY, &quotnull&quot)

        setContent {
            AppScreen(
                textLiveData = textLiveData,
                onSaveClicked = { saveText(it) }
            )
        }
    }

    private fun saveText(value: String) = dataStore.saveData(TEXT_KEY to value)

    companion object {
        private val TEXT_KEY = preferencesKey<String>(&quottext&quot)
    }

میتونید کد کامل رو از گیت دریافت کنید

نوشته خدافظی با SharedPreferences – آموزش DataStore در اندروید اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

طراحی وب‌سایت رو چجوری شروع کنم؟

اولین باری که با “طراحی وب‌سایت” آشنا شدم، دوران دانشگاه بود، یادمه کارگاه کامپیوتر داشتیم که شروعش html و css بود.

الان هنوز هم در حال یادگیری‌ام و می‌تونم بگم که تو مسیر درستی قرار گرفتم اما نکته‌ای که اهمیت داره همین شروع کردن هست.

واسه شروع یادگیری طراحی وب‌سایت، بهتره که یک منبع آموزشی خوب پیدا کنین.

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

تمرین، تمرین و تمرین.

راه‌های زیادی واسه ادامه این مسیر هست که خودم با انجام این چند مورد واقعا نتیجه خیلی خوبی گرفتم:

۱. تعریف پروژه تمرینی

۲. گشت و گذار در گیت هاب

۳. بررسی کد‌های دیگر برنامه نویسان

۴. آشنایی با زبان‌های برنامه نویسی مختلف

۵. شناخت زبان‌های پرکاربرد

نوشته طراحی وب‌سایت رو چجوری شروع کنم؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

اصلاح جملات شرطی به کمک اپراتور Ternary در JavaScript

در این مقاله درباره عملگر شرطی (سه گانه) یا به اصطلاح انگلیسی The conditional (ternary) operator صحبت کنم.تنها عملگر جاوا اسکریپت که سه تا عملوند می گیره.این عملگر اغلب به عنوان میانبر برای دستور if استفاده می شود. Syntax این دستور به این شکل هستش :

condition ? exprIfTrue : exprIfFalse

خب همین جوری که می بینید وقتی از The conditional (ternary) operator یا عملگر شرطی (سه گانه) استفاده می کنیم از نوشتن if…else های اضافی میایم و خودمون خلاص می کنیم.

حالا فرض کنید ما مجبوریم کلی شرط اما و اگر تو پروژه واسه خودمون بچینیم مثل این :

این اشتباه نیستا! اما واقعا قشنگ تر هم می تونیم بنویسیم ، چطوری؟ این جوری :

حتی همین کد هم باز می تونیم کمترش کنیم :

به همین سادگی به کمک یه ساختار جدید توی برنامه نویسی جاوا اسکریپت اومدیم و کد خودمون کمتر از چیزی که هست کردیم ، خوانایی کارمون هم بهتر کردیم. البته من قبلا درباره ترفند های جاوا اسکریپت خدمتتون توضیح دادم و این روش شرطی هم اونجا معرفی کردم اما تصمیم گرفتم یه بار دیگه کامل تر درباره این موضوع صحبت کنم.امیدوارم از این مقاله استفاده کامل برده باشید.

ممنون از توجهتون 🙂

نوشته اصلاح جملات شرطی به کمک اپراتور Ternary در JavaScript اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی