<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های صالح رضائی</title><link>https://virgool.ir/feed/@saleh.rezaei</link><description>https://salehrezaei.com</description><language>fa</language><pubDate>2026-11-11 10:12:12</pubDate><image><url>https://files.virgool.ir/upload/users/136448/avatar/8TG6HM.jpeg</url><title>صالح رضائی</title><link>https://virgool.ir/@saleh.rezaei</link></image><item><title>ساختارهای کنترلی در جاوا اسکریپت: مفاهیم، نحوه استفاده و مثال‌ها</title><link>https://virgool.ir/@saleh.rezaei/ساختارهای-کنترلی-در-جاوا-اسکریپت-مفاهیم-نحوه-استفاده-و-مثال-ها-sqfj4yiqel0o</link><description>مقدمه:در زبان برنامه‌نویسی جاوا اسکریپت، ساختارهای کنترلی برای کنترل جریان  اجرای برنامه بسیار اهمیت دارند. در این مقاله، به بررسی مفاهیم و نحوه  استفاده از ساختارهای کنترلی در جاوا اسکریپت می‌پردازیم و با مثال‌های  کاربردی هر ساختار آشنا می‌شویم.بخش اول: ساختار شرطی if-elseساختار شرطی if-else برای اجرای یک بلاک کد به شرطی خاص استفاده می‌شود.  در صورتی که شرط درست باشد، بلاک کد داخل if اجرا می‌شود؛ در غیر این  صورت، بلاک کد داخل else اجرا می‌شود.مثال:var age = 18;&#xA;&#xA;if (age &gt;= 18) {&#xA;    console.log(&#34;شما می‌توانید رای دهید.&#34;);&#xA;} else {&#xA;    console.log(&#34;شما نمی‌توانید رای دهید.&#34;);&#xA;}در این مثال، با استفاده از ساختار شرطی if-else، بررسی می‌شود که آیا  سن شخص بزرگتر یا مساوی 18 سال است یا خیر. اگر شرط برقرار باشد، پیام “شما  می‌توانید رای دهید.” نمایش داده می‌شود و در غیر این صورت پیام “شما  نمی‌توانید رای دهید.” نمایش داده می‌شود.بخش دوم: ساختار توالیساختار توالی برای اجرای چندین دستور به ترتیب خاص استفاده می‌شود.  دستورات داخل این ساختار به ترتیبی که نوشته شده‌اند، اجرا می‌شوند.مثال:var x = 10;&#xA;var y = 5;&#xA;var sum = x + y;&#xA;console.log(&#34;جمع دو عدد: &#34; + sum);در این مثال، دستورات جمع دو عدد و نمایش مقدار جمع در کنسول به ترتیب  اجرا می‌شوند. ابتدا مقادیر متغیرهای x و y محاسبه می‌شوند و سپس نتیجه جمع  در متغیر sum ذخیره می‌شود. در نهایت، پیام “جمع دو عدد: ” به همراه مقدار  sum نمایش داده می‌شود.بخش سوم: ساختار حلقهساختار حلقه برای تکرار یک بلاک کد تا زمانی که شرط مشخص شده برقرار  باشد استفاده می‌شود. این ساختار شامل حلقه for، حلقه while، حلقه do-while  و حلقه forEach است.مثال 1: حلقه forfor (var i = 1; i &lt;= 5; i++) {&#xA;    console.log(&#34;شماره: &#34; + i);&#xA;}در این مثال، با استفاده از ساختار حلقه for، بلاک کد “شماره: ” به  همراه مقدار i تا زمانی که i از 1 تا 5 تغییر می‌کند، تکرار می‌شود. در هر  مرحله از حلقه، مقدار i به پیام نمایش داده می‌شود.مثال 2: حلقه whilevar i = 1;&#xA;while (i &lt;= 5) {&#xA;    console.log(&#34;شماره: &#34; + i);&#xA;    i++;&#xA;}در این مثال، با استفاده از ساختار حلقه while، بلاک کد “شماره: ” به  همراه مقدار i تا زمانی که i از 1 تا 5 تغییر می‌کند، تکرار می‌شود. در هر  مرحله از حلقه، مقدار i به پیام نمایش داده می‌شود و سپس i افزایش می‌یابد.مثال 3: حلقه do-whilevar i = 1;&#xA;do {&#xA;    console.log(&#34;شماره: &#34; + i);&#xA;    i++;&#xA;} while (i &lt;= 5);در این مثال، با استفاده از ساختار حلقه do-while، بلاک کد “شماره: ” به  همراه مقدار i تا زمانی که i از 1 تا 5 تغییر می‌کند، تکرار می‌شود. در هر  مرحله از حلقه، مقدار i به پیام نمایش داده می‌شود و سپس i افزایش  می‌یابد. در این حلقه، حداقل یک بار بلاک کد اجرا می‌شود و سپس شرط بررسی  می‌شود.مثال 4: حلقه forEachvar numbers = [1, 2, 3, 4, 5];&#xA;&#xA;numbers.forEach(function(number) {&#xA;    console.log(&#34;عدد: &#34; + number);&#xA;});در این مثال، با استفاده از ساختار حلقه forEach، بلاک کد “عدد: ” به  همراه هر عدد در آرایه numbers تکرار می‌شود. هر عدد به ترتیب از آرایه  خوانده می‌شود و در پیام نمایش داده می‌شود.نتیجه‌گیری:در این مقاله، مفاهیم و نحوه استفاده از ساختارهای کنترلی در جاوا  اسکریپت را بررسی کردیم. ساختارهای شرطی if-else، توالی و حلقه‌ها (for،  while، do-while و forEach) برای کنترل جریان اجرای برنامه و تکرار بخش‌های  مورد نیاز استفاده می‌شوند. با استفاده از مثال‌های کاربردی، نحوه استفاده  از هر ساختار را بهتر می‌فهمیم. این مفاهیم بسیار مهم برای کنترل جریان  اجرای برنامه و ایجاد تکرار در برنامه‌های جاوا اسکریپت است.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Sat, 15 Jul 2023 13:36:44 +0330</pubDate></item><item><title>عملگرها و عبارات در جاوا اسکریپت: مفاهیم و مثال‌ها</title><link>https://virgool.ir/@saleh.rezaei/عملگرها-و-عبارات-در-جاوا-اسکریپت-مفاهیم-و-مثال-ها-sacltoca5ei1</link><description> مقدمه:  در زبان برنامه‌نویسی جاوا اسکریپت، عملگرها و عبارات از جمله اجزای اساسی هستند که برنامه‌نویسان باید با آنها آشنا باشند. عملگرها برای انجام عملیات مختلف مانند ارتباطی، ریاضی و مقایسه استفاده می‌شوند و عبارات ترکیبی از عملگرها و اعداد یا متغیرها هستند. در این مقاله، به بررسی مفاهیم و نحوه استفاده از عملگرها و عبارات در جاوا اسکریپت می‌پردازیم. بخش اول: نحوه استفاده از عملگرها  در این بخش، به مفهوم عملگرها و نحوه استفاده از آنها در جاوا اسکریپت می‌پردازیم. عملگرها برای انجام عملیات‌های مختلف مانند ارتباطی (مثل + و -)، ریاضی (مثل +، -، * و /)، منطقی (مثل &amp;&amp; و ||) و دیگر عملگرها به کار می‌روند.  مثال:  // عملگرهای ریاضی var a = 10; var b = 5; var sum = a + b; // جمع var sub = a - b; // تفریق var mul = a * b; // ضرب var div = a / b; // تقسیم  // عملگرهای ارتباطی var x = 5; var y = 10; var result1 = x &gt; y;  // بزرگتر از var result2 = x &lt;= y; // کوچکتر مساوی var result3 = x === y; // برابری مقدار و نوع داده  در این مثال، از عملگرهای ریاضی مانند +، -، * و / برای انجام عملیات جمع، تفریق، ضرب و تقسیم استفاده شده است. همچنین از عملگرهای ارتباطی مانند &gt;، &lt;= و === برای انجام عملیات مقایسه استفاده شده است. نتایج عملیات‌ها در متغیرهای sum، sub، mul، div و result1، result2، result3 ذخیره می‌شوند. بخش دوم: ترکیب عملگرها در عبارات  در این بخش، به نحوه ترکیب عملگرها در عبارات در جاوا اسکریپت می‌پردازیم. عبارات ترکیبی از عملگرها و اعداد یا متغیرها هستند و برای انجام عملیات پیچیده‌تر مورد استفاده قرار می‌گیرند.  مثال:  var x = 5; var y = 10; var z = 15; var result = (x + y) * z; // ترکیب عملگرهای ریاضی  در این مثال، بااستفاده از عملگرهای ریاضی + و *، مقدار دو عدد x و y جمع شده و سپس حاصل ضرب در مقدار z قرار می‌گیرد. نتیجه این عبارت در متغیر result ذخیره می‌شود. بخش سوم: نحوه انجام عملیات ریاضی و مقایسه‌ها  در این بخش، به نحوه انجام عملیات ریاضی و مقایسه‌ها در جاوا اسکریپت می‌پردازیم.  مثال:  var a = 10; var b = 5;  var sum = a + b;  // جمع var sub = a - b;  // تفریق var mul = a * b;  // ضرب var div = a / b;  // تقسیم  var result1 = a &gt; b;   // بزرگتر از var result2 = a &lt;= b;  // کوچکتر مساوی var result3 = a === b; // برابری مقدار و نوع داده  در این مثال، از عملگرهای ریاضی +، -، * و / برای انجام عملیات جمع، تفریق، ضرب و تقسیم استفاده شده است. همچنین از عملگرهای مقایسه‌ای مانند &gt;، &lt;= و === برای انجام عملیات مقایسه استفاده شده است. نتایج این عملیات‌ها در متغیرهای sum، sub، mul، div و result1، result2، result3 ذخیره می‌شوند. نتیجه‌گیری:  در این مقاله، مفاهیم عملگرها و عبارات در جاوا اسکریپت را بررسی کردیم. عملگرها برای انجام عملیات‌های مختلف مانند ارتباطی، ریاضی و مقایسه استفاده می‌شوند و عبارات ترکیبی از عملگرها و اعداد یا متغیرها هستند. با استفاده از مثال‌ها، نحوه استفاده از عملگرها و ترکیب آنها در عبارات را نشان دادیم. همچنین، نحوه انجام عملیات ریاضی و مقایسه‌ها را نیز مورد بررسی قرار دادیم. این مفاهیم بسیار اساسی و حیاتی هستند و برنامه‌نویسان باید با آنها به طور کامل آشنا باشند تا بتوانند عملیات‌های پیچیده‌تر را در برنامه‌های جاوا اسکریپت انجام دهند. مقدمه:در زبان برنامه‌نویسی جاوا اسکریپت، عملگرها و عبارات از جمله اجزای  اساسی هستند که برنامه‌نویسان باید با آنها آشنا باشند. عملگرها برای انجام  عملیات مختلف مانند ارتباطی، ریاضی و مقایسه استفاده می‌شوند و عبارات  ترکیبی از عملگرها و اعداد یا متغیرها هستند. در این مقاله، به بررسی  مفاهیم و نحوه استفاده از عملگرها و عبارات در جاوا اسکریپت می‌پردازیم.بخش اول: نحوه استفاده از عملگرهادر این بخش، به مفهوم عملگرها و نحوه استفاده از آنها در جاوا اسکریپت  می‌پردازیم. عملگرها برای انجام عملیات‌های مختلف مانند ارتباطی (مثل + و  -)، ریاضی (مثل +، -، * و /)، منطقی (مثل &amp;&amp; و ||) و دیگر عملگرها  به کار می‌روند.مثال:// عملگرهای ریاضی&#xA;var a = 10;&#xA;var b = 5;&#xA;var sum = a + b; // جمع&#xA;var sub = a - b; // تفریق&#xA;var mul = a * b; // ضرب&#xA;var div = a / b; // تقسیم&#xA;&#xA;// عملگرهای ارتباطی&#xA;var x = 5;&#xA;var y = 10;&#xA;var result1 = x &gt; y;  // بزرگتر از&#xA;var result2 = x &lt;= y; // کوچکتر مساوی&#xA;var result3 = x === y; // برابری مقدار و نوع دادهدر این مثال، از عملگرهای ریاضی مانند +، -، * و / برای انجام عملیات  جمع، تفریق، ضرب و تقسیم استفاده شده است. همچنین از عملگرهای ارتباطی  مانند &gt;، &lt;= و === برای انجام عملیات مقایسه استفاده شده است. نتایج  عملیات‌ها در متغیرهای sum، sub، mul، div و result1، result2، result3  ذخیره می‌شوند.بخش دوم: ترکیب عملگرها در عباراتدر این بخش، به نحوه ترکیب عملگرها در عبارات در جاوا اسکریپت  می‌پردازیم. عبارات ترکیبی از عملگرها و اعداد یا متغیرها هستند و برای  انجام عملیات پیچیده‌تر مورد استفاده قرار می‌گیرند.مثال:var x = 5;&#xA;var y = 10;&#xA;var z = 15;&#xA;var result = (x + y) * z; // ترکیب عملگرهای ریاضیدر این مثال، بااستفاده از عملگرهای ریاضی + و *، مقدار دو عدد x و y  جمع شده و سپس حاصل ضرب در مقدار z قرار می‌گیرد. نتیجه این عبارت در متغیر  result ذخیره می‌شود.بخش سوم: نحوه انجام عملیات ریاضی و مقایسه‌هادر این بخش، به نحوه انجام عملیات ریاضی و مقایسه‌ها در جاوا اسکریپت می‌پردازیم.مثال:var a = 10;&#xA;var b = 5;&#xA;&#xA;var sum = a + b;  // جمع&#xA;var sub = a - b;  // تفریق&#xA;var mul = a * b;  // ضرب&#xA;var div = a / b;  // تقسیم&#xA;&#xA;var result1 = a &gt; b;   // بزرگتر از&#xA;var result2 = a &lt;= b;  // کوچکتر مساوی&#xA;var result3 = a === b; // برابری مقدار و نوع دادهدر این مثال، از عملگرهای ریاضی +، -، * و / برای انجام عملیات جمع،  تفریق، ضرب و تقسیم استفاده شده است. همچنین از عملگرهای مقایسه‌ای مانند  &gt;، &lt;= و === برای انجام عملیات مقایسه استفاده شده است. نتایج این  عملیات‌ها در متغیرهای sum، sub، mul، div و result1، result2، result3  ذخیره می‌شوند.نتیجه‌گیری:در این مقاله، مفاهیم عملگرها و عبارات در جاوا اسکریپت را بررسی کردیم.  عملگرها برای انجام عملیات‌های مختلف مانند ارتباطی، ریاضی و مقایسه  استفاده می‌شوند و عبارات ترکیبی از عملگرها و اعداد یا متغیرها هستند. با  استفاده از مثال‌ها، نحوه استفاده از عملگرها و ترکیب آنها در عبارات را  نشان دادیم. همچنین، نحوه انجام عملیات ریاضی و مقایسه‌ها را نیز مورد  بررسی قرار دادیم. این مفاهیم بسیار اساسی و حیاتی هستند و برنامه‌نویسان  باید با آنها به طور کامل آشنا باشند تا بتوانند عملیات‌های پیچیده‌تر را  در برنامه‌های جاوا اسکریپت انجام دهند.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Sun, 09 Jul 2023 17:30:29 +0330</pubDate></item><item><title>متغیرها و انواع داده‌ها در جاوا اسکریپت: مفاهیم و مثال‌ها</title><link>https://virgool.ir/@saleh.rezaei/متغیرها-و-انواع-داده-ها-در-جاوا-اسکریپت-مفاهیم-و-مثال-ها-nlpiqxmqmgcf</link><description>مقدمهدر زبان برنامه‌نویسی جاوا اسکریپت، متغیرها و انواع داده‌ها از جمله  مفاهیم اساسی هستند که برنامه‌نویسان باید با آنها آشنا باشند. متغیرها  برای ذخیره و مدیریت اطلاعات در برنامه‌ها استفاده می‌شوند و انواع داده‌ها  نوع اطلاعاتی هستند که در متغیرها ذخیره می‌شوند. در این مقاله، به بررسی  مفاهیم و نحوه استفاده از متغیرها و انواع داده‌ها در جاوا اسکریپت  می‌پردازیم.بخش اول: معرفی متغیرهادر این بخش، به مفهوم متغیرها و اهمیت آنها در برنامه‌نویسی می‌پردازیم.  متغیرها در جاوا اسکریپت برای ذخیره داده‌ها استفاده می‌شوند. آنها به  برنامه‌نویسان امکان می‌دهند داده‌ها را ذخیره و به آنها دسترسی داشته  باشند تا در اجرای برنامه از آنها استفاده کنند.مثال:// تعریف متغیر&#xA;var age;&#xA;&#xA;// مقداردهی به متغیر&#xA;age = 25;&#xA;&#xA;// استفاده از متغیر&#xA;console.log(&#34;سن شما: &#34; + age);در این مثال، یک متغیر به نام “age” تعریف شده است. سپس با استفاده از  عملگر مقداردهی (=)، مقدار 25 به متغیر “age” اختصاص داده می‌شود. در  انتها، با استفاده از تابع console.log، مقدار متغیر “age” نمایش داده می‌شود. این مثال نشان می‌دهد که چگونه متغیرها برای ذخیره و استفاده از داده‌ها به کار می‌روند.بخش دوم: انواع داده‌هادر این بخش، به معرفی انواع داده‌های مختلف در جاوا اسکریپت می‌پردازیم.  انواع داده‌ها مشخص می‌کنند که چه نوع اطلاعاتی در متغیرها ذخیره می‌شود و  چگونه با آنها عملیات انجام می‌شود.الف) رشته‌ها (Strings): رشته‌ها در جاوا اسکریپت برای  نمایش و ذخیره متن‌ها استفاده می‌شوند. آنها بین نقل قول‌های دوتایی (“”)  یا تکتایی (”) قرار می‌گیرند.مثال:var name = &#34;John Doe&#34;&#xA;var message = &#39;Welcome to our website!&#39;;در این مثال، دو متغیر به نام‌های “name” و “message” تعریف شده‌اند که  در آنها رشته‌های متنی ذخیره می‌شوند. متغیر “name” مقدار “John Doe” و  متغیر “message” مقدار “Welcome to our website!” را نگه می‌دارد.ب) اعداد (Numbers): اعداد در جاوا اسکریپت به صورت اعداد صحیح یا اعشاری استفاده می‌شوند.مثال:var age = 25;&#xA;var height = 1.75;در این مثال، دو متغیر به نام‌های “age” و “height” تعریف شده‌اند که در  آنها اعداد صحیح و اعشاری ذخیره می‌شوند. متغیر “age” مقدار 25 و متغیر  “height” مقدار 1.75 را نگه می‌دارد.ج) بولین (Boolean): مقادیر بولین در جاوا اسکریپت  برای نمایش وضعیت‌های منطقی مورد استفاده قرار می‌گیرند. آنها مقادیر true  یا false را می‌توانند داشته باشند.مثال:var isStudent = true;&#xA;var isLoggedIn = false;در این مثال، دو متغیر به نام‌های “isStudent” و “isLoggedIn” تعریف  شده‌اند که وضعیت‌های منطقی را نشان می‌دهند. متغیر “isStudent” مقدار true  و متغیر “isLoggedIn” مقدار false را نگه می‌دارد.د) آرایه‌ها (Arrays): آرایه‌ها در جاوا اسکریپت برای  ذخیره مجموعه‌ای از داده‌ها استفاده می‌شوند. آنها در [] قرار می‌گیرند و  اعضای آرایه با استفاده از اندیس در دسترس قرار می‌گیرند.مثال:var numbers = [1, 2, 3, 4, 5];&#xA;var names = [&#34;John&#34;, &#34;Jane&#34;, &#34;Bob&#34;];در این مثال، دو متغیر به نام‌های “numbers” و “names” تعریف شده‌اند که  آرایه‌هایی از اعداد و رشته‌ها را نگه می‌دارند. متغیر “numbers” شامل  اعداد 1 تا 5 و متغیر “names” شامل رشته‌های “John”، “Jane” و “Bob” است.نتیجه‌گیری:در این مقاله، مفاهیم متغیرها و انواع داده‌ها در جاوا اسکریپت را بررسی  کردیم. متغیرها از طریق تعریف، مقداردهی و استفاده در برنامه‌ها استفاده  می‌شوند، در حالی که انواع داده‌ها تعیین کننده نوع اطلاعاتی هستند که  می‌توان در متغیرها ذخیره کرد. با استفاده از مثال‌ها، نحوه استفاده از هر  نوع داده را نشان دادیم. این مفاهیم اساسی برای ساخت و توسعه برنامه‌های  جاوا اسکریپت بسیار اساسی و حیاتی هستند و برنامه‌نویسان باید با آنها به  طور کامل آشنا باشند.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Tue, 04 Jul 2023 10:21:38 +0330</pubDate></item><item><title>مقدمه‌ای بر جاوا اسکریپت: زبان برنامه‌نویسی اسکریپتی برای توسعه وب</title><link>https://virgool.ir/@saleh.rezaei/مقدمه-ای-بر-جاوا-اسکریپت-زبان-برنامه-نویسی-اسکریپتی-برای-توسعه-وب-a6x0shyp9mft</link><description>مقدمهجاوا اسکریپت یکی از پرکاربردترین زبان‌های برنامه‌نویسی در دنیای توسعه  وب است. با استفاده از جاوا اسکریپت، توسعه دهندگان می‌توانند صفحات وب  پویا و پویشگر را ایجاد کنند و به کاربران امکان تعامل با صفحات را بدهند.  در این مقاله، به بررسی جاوا اسکریپت به عنوان یک زبان برنامه‌نویسی  اسکریپتی برای توسعه وب می‌پردازیم. ابتدا به معرفی جاوا اسکریپت، تاریخچه  آن و کاربردهای آن در توسعه وب می‌پردازیم. سپس به بررسی اجزای اساسی جاوا  اسکریپت، مانند متغیرها، عملگرها و ساختارهای کنترلی می‌پردازیم. در ادامه،  به موضوعاتی مانند توابع، آرایه‌ها، اشیاء و کلاس‌ها، رویدادها و  برنامه‌نویسی رویدادگرا می‌پردازیم. در انتها، به مفاهیم پیشرفته‌تری مانند  مدیریت خطا، برنامه‌نویسی وب و جاوا اسکریپت نسخه سمت سرور می‌پردازیمبخش اول: معرفی جاوا اسکریپتتاریخچه جاوا اسکریپتکاربردهای جاوا اسکریپت در توسعه وبنصب محیط توسعه جاوا اسکریپتبخش دوم: اجزای اساسی جاوا اسکریپت7متغیرها و انواع داده‌هاعملگرها و عباراتساختارهای کنترلیبخش سوم: توابع و آرایه‌هاتعریف و استفاده از توابعنحوه استفاده از آرایه‌ها و متدهای آرایه‌هابخش چهارم: اشیاء و کلاس‌هامفهوم اشیاء و کلاس‌ها در جاوا اسکریپتتعریف کلاس و استفاده از آنمفاهیم وراثت و پلی‌مورفیسمبخش پنجم: رویدادها و برنامه‌نویسی رویدادگرامفهوم رویدادها و برنامه‌نویسی رویدادگرا در جاوا اسکریپتتعریف رویدادها و اتصال آنها به توابعبخش ششم: مفاهیم پیشرفتهمدیریت خطا و استثناهابرنامه‌نویسی وب با جاوا اسکریپت (DOM، تغییر المان‌ها، فرم‌ها و ارسال داده)جاوا اسکریپت نسخه سمت سرور و استفاده از Node.jsنتیجه گیری:در این مقاله، به بررسی جامعی از جاوا اسکریپت به عنوان یک زبان  برنامه‌نویسی اسکریپتی برای توسعه وب پرداختیم. آشنایی با مفاهیم اساسی  جاوا اسکریپت، توابع، آرایه‌ها، اشیاء و کلاس‌ها، رویدادها و برنامه‌نویسی  رویدادگرا، مفاهیم پیشرفته‌تر مانند مدیریت خطا و برنامه‌نویسی وب با جاوا  اسکریپت، مهارت‌های مهمی است که هر برنامه‌نویس و توسعه دهنده وب باید در  اختیار داشته باشد. با استفاده از این زبان برنامه‌نویسی، توسعه دهندگان  می‌توانند صفحات وب پویا ایجاد کرده و تجربه کاربری بهتری برای کاربران خود  فراهم کنند.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Sat, 01 Jul 2023 20:29:07 +0330</pubDate></item><item><title>شروع به کار با Koa</title><link>https://virgool.ir/@saleh.rezaei/شروع-به-کار-با-koa-shxrdwckjo9z</link><description>پس شما آمدید تا کمی در مورد Koa یاد  بگیرید ؟ به عنوان سلب مسئولیت، باید بگویم که من متخصص نیستم، اما حداقل  دانش کافی برای شروع با این فریمورک سبک را دارم. بنابراین سوال اینجاست که  Koa چیست؟اول اینکه Koa یک فریمورک بسیار سبک است. تنها با چند چیز و حدود 550 خط  کد، Koa برای داشتن عملکرد میان‌افزار اصلی برای NodeJS و نه چیزهای بیشتر  ساخته شد. Koa توسط همان تیم سازنده برای Express ساخته شد. تفاوت بزرگ بین Express و Koa این است که Express با مقدار  بیشتری از package ها عرضه می شود. به عبارت ساده، من معتقدم بهترین توصیفی  که می توانم ارائه کنم مستقیماً از خود وب سایت Koa آمده است!با استفاده از عملکردهای همگام، Koa  به شما امکان می‌دهد تا تماس‌های برگشتی را حذف کنید و رسیدگی به خطا را  تا حد زیادی افزایش دهید. Koa هیچ میان افزاری را در هسته خود قرار نمی  دهد، و مجموعه ای زیبا از روش ها را ارائه می دهد که نوشتن سرورها را سریع و  لذت بخش می کند.اکنون یک نکته قابل توجه این است که koa جایگزین اشیاء اصلی req و res  شده و آنها را با یک آبجکت “ctx” جایگزین می کند. شی متن دارای ویژگی های  درخواست و پاسخ است که به جای آن استفاده می شود. Koa برای بهبود تجربه  نوشتن میان افزار با استفاده از async/wait طراحی شده است. اینها مقدار کد  مورد نیاز برای نوشتن توابع میان افزار را به شدت کاهش می دهند.حالا که می دانیم کوآ چیست. بیایید با یک برنامه ساده hello world شروع کنیم!اول از همه یک دایرکتوری بسازید و یک npm init سریع در داخل آن دایرکتوری انجام دهید. وقتی این کار را انجام دادید فقط به چند چیز دیگر نیاز دارید.npm i koa koa-router koa-loggerالبته برای شروع کار koa را نصب کردیم. به هر حال همراه با آن، ما در حال نصب koa-routerبرای مسیریابی درخواست، و koa-loggerبرای ورود به سیستم توسعه هستیم. پس بیایید یک برنامه سریع راه اندازی کنیم.یک فایل ایجاد کنید index.jsو کد زیر را کپی کنید. این یک نسخه کمی تغییر یافته از نمونه استاندارد Koa است که در بیشتر آموزش ها خواهید یافت.const Koa = require(&#39;koa&#39;);&#xA;const Router = require(&#39;koa-router&#39;);&#xA;const Logger = require(&#39;koa-logger&#39;);&#xA;&#xA;const app = new Koa();&#xA;const router = new Router();&#xA;&#xA;// Response to GET requests&#xA;router.get(&#39;/&#39;, async (ctx) =&gt; {&#xA;  ctx.body = &#39;Hello, World!\n&#39;;&#xA;});&#xA;&#xA;// Logging&#xA;app.use(Logger());&#xA;&#xA;// Add routes and response to the OPTIONS requests&#xA;app.use(router.routes()).use(router.allowedMethods());&#xA;&#xA;// Listening to the port&#xA;app.listen(8080, () =&gt; {&#xA;  console.log(&#39;Server running on port 8080&#39;);&#xA;});حالا می توانیم سرور را راه اندازی کنیم!node index.jsسرور باید با موفقیت ایجاد شده باشد! حالا مرورگر را باز کنید و به http://localhost:8080/ بروید. شما باید Hello, World!را در صفحه ببینید.هنگام درخواست به سرور، باید چیزی شبیه به این را در کنسولdebug  خود مشاهده کنید.Server running on port 8080&#xA; &lt;-- GET /&#xA; --&gt; GET / 200 8ms 14b&#xA; &lt;-- GET /&#xA; --&gt; GET / 200 5ms 14b&#xA; &lt;-- GET /&#xA; --&gt; GET / 200 4ms 14bامیدوارم از این آموزش ساده Koa لذت برده باشید و امروز اینجا چیز جدیدی یاد گرفته باشید!</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Mon, 18 Apr 2022 11:45:13 +0430</pubDate></item><item><title>آیا می خواهید git و  GitHub را به روشی سرگرم کننده تر یاد بگیرید؟</title><link>https://virgool.ir/@saleh.rezaei/آیا-می-خواهید-git-و-github-را-به-روشی-سرگرم-کننده-تر-یاد-بگیرید-h85z8g2zwbrd</link><description>ما همیشه فیلم‌ها و آموزش‌های زیادی را تماشا می‌کنیم و اسناد زیادی را برای یادگیری مفاهیم یا هر زبان برنامه‌نویسی مرور می‌کنیم.اما می دانید که می توانید git و GitHub را به روشی سرگرم کننده تر مانند بازی کردن یا تجسم کردن یاد بگیرید.در اینجا برخی از منابع برای یادگیری git و GitHub به روشی سرگرم کننده تر آورده شده است.1) TwilioQuest – “جنگل منبع باز”:این یک بازی توسط Twilio ساخته  شده است که در حین انجام بازی و انجام وظایف با git و GitHub آشنا خواهید  شد. همچنین، پس از هر کاری که انجام می دهید، XP خواهید داشت.لینک2) Oh My Git!:به شما امکان می دهد ساختارهای داخلی مخازن Git را در زمان واقعی تجسم کنید.لینک3) شاخه گیت را بیاموزید:شما می‌توانید با تجسم، بازی و انجام وظایف خاص، بر مفهوم شاخه‌بندی git خود مسلط شوید.لینک4) آزمایشگاه یادگیری GitHub:GitHub خود یک مسیر یادگیری را فراهم می کند که با تکمیل پروژه های سرگرم کننده و واقع بینانه، مهارت های شما را افزایش می دهد.لینکمنبع</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Mon, 31 Jan 2022 02:28:27 +0330</pubDate></item><item><title>10 چیزی که هر توسعه‌دهنده نرم‌افزاری باید بداند تا مفید بماند</title><link>https://virgool.ir/@saleh.rezaei/10-چیزی-که-هر-توسعه-دهنده-نرم-افزاری-باید-بداند-تا-مفید-بماند-gjlxssmdpcrk</link><description>توسعه نرم افزار یک زمینه پیچیده و پویا است. تعداد بی نهایت چیز برای  دانستن وجود دارد و پیشرفت های جدید در فناوری هر روز اتفاق می افتد. در  نتیجه، گم شدن یا غرق شدن در تمام اطلاعات جدیدی که روزانه به شما می رسد،  بسیار آسان است. برای رقابتی ماندن به عنوان یک توسعه دهنده نرم افزار، مهم  است که  بهره‌وری داشته باشید – اما واقعاً این به چه معناست؟ این مقاله  به بررسی این موضوع می‌پردازد که چگونه بهره‌وری بیشتر می‌تواند تأثیر  زیادی بر حرفه شما به عنوان یک توسعه‌دهنده نرم‌افزار داشته باشد!به عنوان یک توسعه دهنده، شما باید مولد باشید تا در رقابت باقی بمانید.  یک راه خوب برای فکر کردن در مورد بهره وری این است که تأثیر کار خود را  بر شخص دیگری در نظر بگیرید – خواه کارمند، مدیر یا مشتری دیگری باشد. وقتی  کاری را در محل کارتان تمام می کنید (یک برنامه، مستندات، طرح آزمایش)،  آیا این کار زندگی دیگران را آسان تر می کند؟ با فکر کردن همیشه به این شخص  و اینکه نتیجه کار شما چگونه بر او تأثیر می گذارد، می توانید تعیین کنید  که زمان و انرژی خود را در هنگام انجام  یک کار کجا صرف کنید.سازنده بودن به عنوان یک توسعه دهنده نرم افزار به چه معناست؟سازنده بودن به این معنی است که یک توسعه‌دهنده نرم‌افزار وظایف را به  شیوه‌ای سریع و کارآمد انجام می‌دهد، در حالی که همچنان کیفیت کار را حفظ  می‌کند (و هیچ گونه خطا/ نقصی در کار شما ندارد). کیفیت همیشه مهم‌تر از  سرعت است – هیچ‌کس نمی‌خواهد با توسعه‌دهنده‌ای کار کند که کار پشت سر هم  شلخته و نادرست انجام می‌دهد. توسعه‌دهنده‌ای که سازنده باشد، کارها را به  سرعت انجام می‌دهد، بدون اینکه کیفیت یا دقت را از دست بدهد.راه هایی برای بهره وری بیشتر در محل کارراه های زیادی وجود دارد که می توانید امروز متمرکز بمانید و بهره وری  را در محل کار افزایش دهید! در اینجا برخی از نکات مورد علاقه من وجود  دارد:وظایف هر روز را از قبل فهرست کنید تا زمان زیادی را برای برنامه  ریزی صرف نکنید. اگر هیچ ضرب الاجلی وجود ندارد، اهداف پروژه خود را برای  هفته آینده بنویسید تا مغز شما در تمام طول روز و زمانی که باید تکمیل شود  به آنها فکر نکند.با مشخص کردن اینکه کدام بخش از روز به تمرکز  بیشتری نیاز دارد و می توانید بدون از دست دادن کیفیت، کمی کمتر به آن توجه  کنید، روزهای خود را ساختار دهید. به عنوان مثال، زمانی که در زمان آزادم  روی پروژه ای کار می کنم، یک دفتر خاطرات روزانه نگه می دارم تا ایده های  هفته را ایده پردازی کنم. وقتی وقت آن است که بنشینم و روی آن پروژه کار  کنم، می دانم که این زمانی است که 100٪ تمرکز من مورد نیاز است.عادت  های بد خود را در محل کار شناسایی کنید و راه هایی برای از بین بردن آنها  بیابید! این ممکن است بسته به اینکه چه کسی هستید متفاوت باشد – شاید در  وسط روز غذای ناسالم می خورید یا در Slack اغلب با همکاران چت می کنید. هیچ  راه حل یکسانی برای بهره وری وجود ندارد، اما همه چیزهایی دارند که می  توانند بهتر انجام دهند – مطمئن شوید که کاری را انجام می دهید که برای شما  مفید است!اگر متوجه شدید که در زمان استراحت کار زیادی انجام نمی  دهید، آن را به 10 دقیقه در هر ساعت محدود کنید. این مدت به اندازه‌ای  طولانی است که به مغز شما استراحت بدهد، اما نه آنقدر طولانی که تمرکز مجدد  روی چیزی که قبلاً روی آن کار می‌کردید سخت‌تر باشد.چرا متفکرتر بودن و دقت بیشتر در مورد کد خود برای طول عمر آن اهمیت دارددلایل زیادی وجود دارد که چرا نوشتن کد قابل اعتماد و با کیفیت به عنوان  یک توسعه دهنده نرم افزار مهم است (از جمله این واقعیت که تضمین می کند  زمان کمتری برای عیب یابی نیاز است)، اما یکی از دلایل اصلی این است که  محصول/برنامه شما دوام خواهد داشت. طولانی تر اگر کیفیت عالی داشته باشد و  در جای خود تست شود! هنگامی که هیچ نقص یا خطایی در یک برنامه وجود ندارد،  چیزی وجود ندارد که نیاز به رفع یا انجام مجدد داشته باشد. اگر مطمئن هستید  که برنامه شما نمی تواند شکست بخورد، می توانید مطمئن باشید که بدون نیاز  به ایجاد تغییرات در پایگاه کد، سال های بیشتری دوام خواهد آورد.بر اساس تجربه شخصی من، در زیر چند نکته برای بهبود بهره وری شما آورده شده است.1 . بیشتر بنویس، کمتر پاک کن!به عنوان یک توسعه دهنده، یکی از اصلی ترین چیزهایی که روی آن تمرکز می  کنید نوشتن کد است – و هیچ ایرادی در این وجود ندارد! با این حال، گاهی  اوقات ما درگیر نوشتن می شویم و فراموش می کنیم که کد قدیمی خود را زمانی  که دیگر مورد نیاز نیست حذف کنیم. این، یافتن چیزها را بعداً سخت‌تر  می‌کند، زیرا اکنون کد در همه جا وجود دارد و هیچ‌کدام از آن به وضوح مستند  نیست. آنچه را که ضروری نیست حذف کنید تا توسعه دهندگان آینده (یا  خودتان!) برای پیمایش پروژه کار سختی نداشته باشند. همچنین قبل از نوشتن هر  کدی به نوشتن شبه کد فکر کنید. این امر احتمال خطا و کدهای غیر ضروری را  کاهش می دهد.2. تست هایی بنویسید تا مطمئن شوید کد شما قابل اعتماد و قابل تکرار استبه‌عنوان یک توسعه‌دهنده نرم‌افزار، نوشتن تستهایی برای شما مهم است که  هر زمان که تغییراتی در پایگاه کد ایجاد می‌کنید – این کار هم تضمین می‌کند  که ویژگی‌های جدید همانطور که در نظر گرفته شده است کار می‌کنند و هم  مستنداتی در مورد موارد اضافه/تغییر شده ارائه می‌دهد. وقتی آزمایش خودکار  قبل از انجام هر نوع «بازبینی کد» انجام نمی‌شود، هیچ چیزی مانع از آن  نمی‌شود که توسعه‌دهنده دیگری کد غیرضروری بیشتری اضافه کند، زیرا از آنچه  قبلاً وجود داشته آگاه نبوده است. نرم افزار باید اول برای انسان نوشته شود  و بعد کامپیوتر!3. توسعه تست محور (TDD) می تواند بهره وری شما را با اجازه دادن به شما برای نوشتن کدهای تمیزتر بهبود بخشدتوسعه مبتنی بر آزمایش در چند سال اخیر به طور فزاینده ای محبوب شده  است، و دلیل خوبی برای این وجود دارد! هنگامی که فرآیند TDD را دنبال می  کنید، قبل از نوشتن هر کد واقعی، تست هایی را می نویسید (برای اجرای خودکار  در برابر کد شما). این بدان معناست که وقتی نوشتن آزمون را تمام کردید،  برنامه شما دقیقاً همانطور که در نظر گرفته شده بود با ایجاد همه شرایط  مورد انتظار کار می کند.4. از ویرایشگرها/IDEها برای افزایش بهره وری استفاده کنیداگرچه همه برنامه‌نویس‌ها ترجیحات یکسانی در مورد اینکه چه نوع ویرایشگر  متن یا IDE را می‌خواهند برای پروژه‌های خود استفاده کنند، ندارند، برخی  از ابزارها می‌توانند زندگی ما را هنگام نوشتن کد بسیار آسان‌تر کنند!  برنامه نویسانی که اغلب بین زبان های مختلف جابجا می شوند ممکن است از  استفاده از IDE بر روی یک ویرایشگر متن ساده سود ببرند زیرا IDE ها معمولاً  دارای ویژگی های تکمیل خودکار و برجسته سازی نحو پیشرفته هستند.5. از پسوندهای نحوی برای افزایش بهره وری استفاده کنیدپسوندهای نحوی افزونه‌هایی هستند که برای ویرایشگر متن یا IDE شما ساخته  شده‌اند که می‌توانند نوشتن کد را بسیار آسان‌تر کنند! به عنوان مثال،  برخی از برنامه‌های افزودنی نحو ممکن است بسته به نوع زبانی که استفاده  می‌کنید از ویژگی‌های تکمیل خودکار پشتیبانی کنند (PHPStorm یک IDE محبوب  با بسیاری از پسوندهای تکمیل خودکار موجود برای PHP است)، در حالی که سایر  پسوندهای اختصاصی IDE می‌توانند به‌طور خودکار فایل‌های پروژه را تولید  کنند، اگر این کار را نکنید.  بسیاری از توسعه دهندگان نرم افزار متوجه می  شوند که هرچه ویرایشگر متن آنها قابل برنامه ریزی باشد، بهره وری بیشتری  خواهند داشت!6. با خواندن منظم مقالات/وبلاگ ها/پست های Stackoverflow دانش زبان های برنامه نویسی و ابزارها را به روز نگه دارید.به‌عنوان یک توسعه‌دهنده نرم‌افزار، برای شما مهم است که دانش و  زبان‌های برنامه‌نویسی و ابزارهایی را که استفاده می‌کنید به‌روز نگه دارید  تا در شغل فعلی و آینده خود بهره‌وری بیشتری داشته باشید. اگر دوست ندارید  مقاله‌ها را در یک وب‌سایت بخوانید، عناوین کتاب‌های زیادی نیز وجود دارند  که می‌توانند اطلاعات مفیدی را ارائه دهند – مانند «Python: The Right  Way» یا «Clean Code». علاوه بر این، اگر به دنبال چیز خاصی هستید، وبلاگ  ها پر از محتوای عالی هستند!  Stackoverflow  انقلابی در نحوه دریافت کمک  افراد برای مشکلات توسعه خود ایجاد کرده است، بنابراین تمرین خوبی برای  توسعه دهندگان است که سایت را مرتب بررسی کنند!7. ابزارهای خود را بشناسید، اما اجازه ندهید آنها مالک شما شوندشما یاد می گیرید که چگونه هر روز با یک زبان برنامه نویسی یا فریم ورک  جدید کار کنید، درست است؟ شما همیشه به طور تصادفی با چیز جدیدی روبرو می  شوید که می تواند شما را سازنده تر کند. ترفند این است که یاد بگیرید چگونه  سریع کار کنید بدون اینکه در جزئیات کاری که انجام می دهید گرفتار شوید.  اگر برای اولین بار از یک فناوری استفاده می کنید، این می تواند سخت باشد،  زیرا به شما نیاز دارد که زمان بیشتری را برای تنظیم محیط خود و یادگیری  نحو زبان اختصاص دهید.8. دنبال کنید و یادداشت کنید که چقدر طول کشید تا آن کار را انجام دهیددر برخی موارد، این به دلیل بهره وری شما نیست، بلکه به این دلیل است که  زمان لازم برای تکمیل یک کار را دست کم گرفته اید. همه همیشه فکر می کنند  که می توانند کارها را سریعتر از آنچه واقعا می توانند انجام دهند. این  ممکن است به این دلیل باشد که ما بازی‌های رایانه‌ای انجام می‌دهیم، اغلب  از رسانه‌های اجتماعی بازدید می‌کنیم، یا حتی فقط در مورد اینکه دوست داریم  نرم‌افزارمان چگونه کار کند، خواب می‌بینیم. دلیل هر چه که باشد، مهم است  که بفهمید کارها واقعا چقدر طول می کشد تا بتوانید زمان خود را بهتر بودجه  بندی کنید. دو راه برای انجام این کار وجود دارد: یا یادداشت می‌کنید زمانی  که کارها برای اولین بار آنها را شروع می‌کنید چقدر زمان می‌برند، یا –  اگر از قبل می‌دانید – به عقب برگردید و بفهمید که چقدر طول می‌کشد. برای  پیگیری پیشرفت خود از تایمر استفاده کنید9. بیش از حد مستند کنید و بیش از حد ارتباط برقرار کنیدگاهی اوقات ممکن است به نظر برسد که نیازی به بررسی غلط املایی یا  اشتباه ندارید. برخی از توسعه دهندگان حتی ممکن است فکر کنند نوشتن نظرات  خوب اتلاف وقت و تلاش است. با این حال، انجام این پیشرفت‌های کوچک می‌تواند  به همکاران شما کمک کند که فکر نکنند: “اوه، ای کاش آنها کد خود را بهتر  مینوشتند”. شما نمی خواهید مقاله ای با غلط املایی یا گرامر ضعیف بخوانید ، پس چرا کدهای گیج کننده بنویسید؟این به شما کمک می‌کند تا از بازگشت به یک کار/ویژگی قبلی فقط برای توضیح منطقی که در پس آن کار می‌کند جلوگیری کنیداگر روی یک ویژگی بزرگ کار می‌کنید، به‌روزرسانی‌های کوچک‌تر را به  ذینفعان خود ارائه دهید. این نه تنها انگیزه شما را حفظ می‌کند، بلکه به  شما کمک می‌کند بازخورد به موقع دریافت کنید و مجبور نباشید همه چیز را از  بین ببرید و تازه شروع کنید.10. وظایف را به طور مناسب اولویت بندی کنیدگاهی اوقات برنامه نویسان وقتی بر روی یک کار/پروژه خاص تمرکز می کنند،  همه چیزهای دیگری را که در اطرافشان اتفاق می افتد فراموش می کنند. این  بدان معنی است که آنها ممکن است متوجه نشوند که چقدر زمان صرف انجام آن یک  کار کرده اند تا زمانی که خیلی دیر شود. برای جلوگیری از این مشکل، همیشه  کارهایی را که روی آن کار می‌کنید پیگیری کنید و کارهایی را که برای سایر  توسعه‌دهندگان برای تکمیل وظایفشان لازم است، اولویت‌بندی کنید، یعنی وظایف  آن‌ها به وظایف شما بستگی دارد. با پایان دادن به چنین وظایفی از قبل، تحت  فشار کمتری قرار می گیرید و برای انجام کاری مورد آزار و اذیت کسی قرار  نمی گیرید.11. (پاداش) استراحت کنید، کیت کت داشته باشیدشاید به طور مکرر کیت کت نداشته باشید اما هر ساعت یا بیشتر استراحت  کنید. گرفتار شدن و صرف ساعت ها برای کدنویسی آسان است. اما هیچ ویژگی ارزش  فدا کردن سلامتی خود را ندارد. گاه به گاه استراحت کنید، به من اعتماد  کنید که برای شما مفید خواهد بود.نتیجهامیدوارم این مقاله برای شما مفید بوده باشد. نکات خود را در مورد  چگونگی بهره وری خود و کارهایی که برای بهبود بهره وری خود انجام می دهید  به اشتراک بگذارید.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Fri, 24 Dec 2021 21:44:42 +0330</pubDate></item><item><title>به فایل README خود بیشتر توجه کنید</title><link>https://virgool.ir/Whitenoise/به-فایل-readme-خود-بیشتر-توجه-کنید-dxho2ekdqsae</link><description>شروع به عنوان یک توسعه دهنده وب می تواند بسیار طاقت فرسا باشد. شما با بسیاری از فن آوری های مختلف برای انتخاب بمباران شده اید. اما چیزی که می تواند شما را از همه افرادی که شروع به کار می کنند متمایز کند، نظم و انضباط است که در پروژه های خود اعمال می کنید. و یکی از بهترین راه‌ها برای اضافه کردن آن به پروژه‌هایتان، نوشتن مستندات مناسب از فرآیندتان است.README.mdReadme یک فایل متنی است که توسط توسعه دهندگان برای توضیح و معرفی پروژه های خود به کاربران خارجی استفاده می شود. این شامل اطلاعاتی است که برای آشنایی با پروژه مربوطه لازم است. این به عنوان راهی برای پاسخ به تمام سوالات متداولی که سایر توسعه دهندگان ممکن است در مورد پروژه داشته باشند، مانند شناسایی پشته فناوری یا نصب آن برای استفاده شخصی استفاده می شود.چرا باید Readme بنویسمReadme معمولاً هنگام اضافه کردن پروژه ها به مخازن شما نادیده گرفته می شود. به‌عنوان یک تازه‌کار، نوشتن سطرهای طولانی که احتمالاً هیچ‌کس قرار نیست آن‌ها را بخواند، غیر ضروری به نظر می‌رسد. اما ممکن است پس از مدتی به کد خود بازگردید و آن فایل readme به شما کمک زیادی می کند تا بفهمید چه چیزی چیست. یک فایل readme خوب باید به خوبی خود پروژه باشد.Readme در رشد بسیار مهم استافزودن یک فایل readme ممکن است به عنوان یک گام کوچک به نظر برسد زیرا اغلب نادیده گرفته می شود، اما این یک گام کوچک می تواند راه طولانی در حرفه توسعه شما داشته باشد. پروژه های شما در GitHub اساسا نمونه کار شما هستند. بسیار نادر است که بعد از شروع کار شروع به جذب مشتریان بزرگ کنید، بنابراین تا زمانی که نام خود را به دست آورید، افزودن پروژه های خود به روشی قابل ارائه به مخازن خود بهترین راه برای نشان دادن استعدادهای خود به مشتریان احتمالی شما است. اگر در مرحله یادگیری هستید و سعی می کنید در پروژه های آزمایشی مختلف کدنویسی کنید، بهتر است آنها را با توضیحات خوب به مخازن خود اضافه کنید. بهترین بخش در مورد این توضیحات این است که حتی یک فرد غیر فنی (شاید یک استخدام کننده) می تواند از این فایل ها ایده ای از استعدادهای شما بدست آورد.نکاتی در مورد نوشتن توضیحات خوبملزومات:عنوان:اطمینان حاصل کنید که عناوین خاص و دقیقی را اضافه کنید که توضیح دهد پروژه در مورد چیستهدف پروژه:آنچه را که می خواهید با ساخت این پروژه به دست آورید ذکر کنید. خوب است که توسعه را با در نظر گرفتن موارد قابل تحویل شروع کنید.پشته فناوری:فریمورک یا کتابخانه ای را که استفاده می کنید اضافه کنید و اگر دلیل استفاده از آن را در وهله اول اضافه کنید بسیار عالی خواهد بود.نصب و راه اندازیاگر پروژه شما یک نرم افزار یا یک برنامه است، مطمئن شوید که دستورالعمل های مناسبی را در مورد نحوه نصب آن بر روی هر پلتفرمی که از آن پشتیبانی می کنید، اضافه کنید.واقعا برجسته شوید:اگر احساس می‌کنید کمی شیک هستید و واقعاً می‌خواهید با سختی بیشتر تأثیر خوبی بگذارید، این بخش‌ها را نیز اضافه کنید.فهرست مطالبگیف های پروژه در حال عملدامنه عملکردهاوضعیت پروژهمنابعاطلاعات دیگرنظر خود را در مورد این مقاله و فایل های Readme به من بگویید.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Fri, 03 Dec 2021 21:12:45 +0330</pubDate></item><item><title>با روش صحیح، مهارت خود در آرایه های JS را تقویت کنید</title><link>https://virgool.ir/@saleh.rezaei/با-روش-صحیح-مهارت-خود-در-آرایه-های-js-را-تقویت-کنید-amscojyfzaww</link><description>foreachچه موقع باید استفاده کرد؟شما نیازی به استفاده بیش از حد از forEach ندارید . در برخی موارد forEach روش بسیار خوبی است.اگر برای انجام یک عمل خاص نیاز به تکرار یک آرایه دارید (مثلاً ثبت هر مورد از کنسول).شما نباید هر بار که نیاز به پر کردن یک آرایه جدید دارید از forEach استفاده کنید (قبل از انجام این کار، بررسی کنید که آیا می توانید از روش های دیگری استفاده کنید)const items = [1, 2, 3, 4, 5]&#xA;&#xA;items.forEach(item =&gt; console.log(item))forEach هیچ مقداری را بر نمی گرداند!!// &#xA;// ...&#xA;const toto = items.forEach(item =&gt; console.log(item))&#xA;toto // undefinedfilterچه موقع باید استفاده کرد؟همانطور که نامش ذکر شد، به ما اجازه می دهد تا مقداری را در آرایه بسته به شرایط فیلتر کنیم.مثالبه عنوان مثال اگر می خواهید اعداد فرد را حذف کنید با forEachconst items = [1, 2, 3, 4]&#xA;const evenValue = []&#xA;items.forEach(item =&gt; {&#xA;   if (item % 2 == 0) {&#xA;      evenValue.push(item)&#xA;   }&#xA;}) با filterconst items = [1, 2, 3, 4]&#xA;&#xA;const evenValue = items.filter(currentValue =&gt; {&#xA;   return currentValue % 2 == 0&#xA;}) هنگامی که از filter استفاده می کنید، باید در هر تکرار یک Boolean (شرایط فیلتر) برگردانید . (در غیر این صورت JS Engine مقدار برگشتی را به بولین تبدیل می کند!)mapچه موقع باید استفاده کرد؟زمانی که نیاز دارید آیتم ها را از آرایه به آرایه دیگر تبدیل کنید!مثال به عنوان مثال اگر می خواهید تمام مقادیر یک آرایه را در 2 ضرب کنید. با forEachconst items = [1, 2, 3, 4]&#xA;const result = []&#xA;items.forEach(item =&gt; {&#xA;   result.push(item * 2)&#xA;}) با mapconst items = [1, 2, 3, 4]&#xA;const result = items.map(item =&gt; {&#xA;   return item * 2&#xA;})هنگامی که از map استفاده می کنید، باید در هر تکرار یک آیتم (مورد تبدیل شده) را برگردانید .reduceچه موقع باید استفاده کرد؟زمانی که باید یک مقدار واحد را از یک آرایه دریافت کنید. این “مقدار واحد” می تواند یک آرایه باشد.مثال به عنوان مثال اگر می خواهید تمام اعداد را در آرایه جمع کنید. با forEachconst items = [1, 2, 3, 4]&#xA;const result = 0&#xA;items.forEach(item =&gt; {&#xA;   accumulator += item&#xA;}) با reduceconst items = [1, 2, 3, 4]&#xA;&#xA;const sum = items.reduce((accumulator, currentValue) =&gt; {&#xA;   return accumulator += currentValue&#xA;}, 0)هنگامی که از reduce استفاده می کنید باید در هر تکرار اککومولاتور (مقداری که با روش افزایش برگردانده می شود) را برگردانید و همچنین باید این جمع کننده را مقدار دهی اولیه کنید، در مثال بالا ما متغیر را با 0 مقداردهی کرده ایم!findچه موقع باید استفاده کرد؟هنگامی که شما نیاز به یافتن یک مورد مناسب با شرایط دارید و بعد از آن از این مورد استفاده می کنید.const items = [1, 2, 3, 4]&#xA;&#xA;const item = items.find(item =&gt; item === 3)&#xA;&#xA;// ...&#xA;&#xA;// Use item afterwardssomeچه موقع باید استفاده کرد؟اگر باید بررسی کنید که آیا یکی از موارد شما با شرایطی مطابقت دارد یا خیر (مانند find) اما نیازی نیست بعد از آن از آن مورد استفاده کنید.مثال به عنوان مثال اگر می خواهید بررسی کنید که آیا آرایه شما عدد 2 را دارد یا خیر. با findconst items = [1, 2, 3, 4]&#xA;const item = items.find(item =&gt; item === 2)&#xA;if (item !== undefined) {&#xA;   // ...&#xA;} با someconst items = [1, 2, 3, 4]&#xA;const hasNumber2 = items.some(item =&gt; item === 2)&#xA;if (hasNumber2) {&#xA;   ...&#xA;} someاگر حداقل یک مورد با شرایط شما مطابقت داشت، Boolean را برگردانیدeveryچه موقع باید استفاده کرد؟everyمشابه some است، بررسی می کند که آیا همه موارد شما با شرایط شما مطابقت دارند یا خیر . به جای some، اگر فقط یک مورد با شرط مطابقت داشته باشد، true برمی‌گردد، every فقط در صورتی که همه موارد با شرط مطابقت داشته باشند، true برمی‌گرداند!TLDR;همانطور که می بینید، بسته به زمینه می توانید از روش های آرایه زیادی استفاده کنید.همچنین برای توسعه‌دهندگان دیگری که کد شما را می‌خوانند، نکته خوبی است  (به عنوان مثال اگر فیلتر را ببینم، می‌دانم که باید مقداری از این آرایه  را فیلتر کنیم)یک نکته خوب که در بالا نشان ندادم، این است که می توانید متدهای آرایه را ترکیب کنید (به جز forEach چون مقداری را بر نمی گرداند).پس میتونی اینو درست کنی شما باید مقدار فرد را از آرایه فیلتر کنید و عدد رویداد را در 2 ضرب کنید.const items = [1, 2, 3, 4]&#xA;&#xA;const result = items.filter(item =&gt; item % 2 == 0 ).map(item =&gt; item * 2)امیدوارم مفید بوده باشه!</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Mon, 08 Nov 2021 15:08:46 +0330</pubDate></item><item><title>5 بسته مفید که هر توسعه دهنده React باید بداند</title><link>https://virgool.ir/coderlife/5-بسته-مفید-که-هر-توسعه-دهنده-react-باید-بداند-rccucanz6idj</link><description>React JS یک چارچوب جاوا اسکریپت محبوب برای ساخت برنامه های کاربردی  پیشرفته است ، مانند رابط کاربری که به افراد اجازه می دهد با نرم افزار  تعامل داشته باشند. وقتی صحبت از توسعه برنامه های مدرن React می شود ،  انتخاب کتابخانه مناسب ممکن است مشکل باشد. بنابراین در این مقاله ، من  بهترین و مفیدترین بسته های مورد نیاز شما را به عنوان توسعه دهنده React  گردآوری کرده ام.AxiosAxios ارتباط با API ها را در پروژه های React برای ما ساده می کند.  اگرچه تکنیک های جایگزین مانند Fetch یا AJAX ممکن است این کار را انجام  دهند ، Axios می تواند عملکردهای بیشتری را ارائه دهد که با برنامه های  مبتنی بر React بسیار پیشرفت می کند.نصب و راه اندازیاستفاده از NPMnpm install axiosاستفاده از Yarnyarn add axiosاستفادهimport axios from &#39;axios&#39;&#xA;&#xA;// Make a request for a user with a given ID&#xA;axios.get(&#39;/user?ID=12345&#39;)&#xA;  .then(function (response) {&#xA;    // handle success&#xA;    console.log(response);&#xA;  })&#xA;  .catch(function (error) {&#xA;    // handle error&#xA;    console.log(error);&#xA;  })&#xA;  .then(function () {&#xA;    // always executed&#xA;  });ReduxRedux یک کتابخانه جاوا اسکریپت است که به شما امکان می دهد حالت  (state) برنامه خود را مدیریت و متمرکز کنید. برای ایجاد رابط های کاربری ،  بیشتر در کنار چارچوب هایی مانند React یا Angular استفاده می شود.نصب و راه اندازیاستفاده از NPMnpm install reduxاستفاده از Yarnyarn add reduxاستفادهimport { createStore } from &#39;redux&#39;&#xA;&#xA;&#xA;function counterReducer(state = { value: 0 }, action) {&#xA;  switch (action.type) {&#xA;    case &#39;counter/incremented&#39;:&#xA;      return { value: state.value + 1 }&#xA;    case &#39;counter/decremented&#39;:&#xA;      return { value: state.value - 1 }&#xA;    default:&#xA;      return state&#xA;  }&#xA;}&#xA;&#xA;// Create a Redux store holding the state of your app.&#xA;// Its API is { subscribe, dispatch, getState }.&#xA;let store = createStore(counterReducer)&#xA;&#xA;// You can use subscribe() to update the UI in response to state changes.&#xA;&#xA;store.subscribe(() =&gt; console.log(store.getState()))&#xA;&#xA;// The only way to mutate the internal state is to dispatch an action.&#xA;// The actions can be serialized, logged or stored and later replayed.&#xA;store.dispatch({ type: &#39;counter/incremented&#39; })&#xA;// {value: 1}&#xA;store.dispatch({ type: &#39;counter/incremented&#39; })&#xA;// {value: 2}&#xA;store.dispatch({ type: &#39;counter/decremented&#39; })&#xA;// {value: 1}FormikFormik یک گروه کوچک از اجزای React و hook برای ساختن فرم ها است. این  به سه قسمت آزاردهنده کمک می کند: به دست آوردن مقادیر در داخل و خارج فرم  ها. اعتبارسنجی و پیام های خطا.نصب و راه اندازیاستفاده از NPMnpm install formik --saveاستفاده از Yarnyarn add formikاستفادهimport React from &#39;react&#39;;&#xA; import { useFormik } from &#39;formik&#39;;&#xA;&#xA; const SignupForm = () =&gt; {&#xA;   // Pass the useFormik() hook initial form values and a submit function that will&#xA;   // be called when the form is submitted&#xA;   const formik = useFormik({&#xA;     initialValues: {&#xA;       email: &#39;&#39;,&#xA;     },&#xA;     : values =&gt; {&#xA;       alert(JSON.stringify(values, null, 2));&#xA;     },&#xA;   });&#xA;   return (&#xA;     &lt;form ={formik.handleSubmit}&gt;&#xA;       &lt;label htmlFor=&#34;email&#34;&gt;Email Address&lt;/label&gt;&#xA;       &lt;input&#xA;         id=&#34;email&#34;&#xA;         name=&#34;email&#34;&#xA;         type=&#34;email&#34;&#xA;         ={formik.handleChange}&#xA;         value={formik.values.email}&#xA;       /&gt;&#xA;&#xA;       &lt;button type=&#34;submit&#34;&gt;Submit&lt;/button&gt;&#xA;     &lt;/form&gt;&#xA;   );&#xA; };Styled ComponentsStyled Components یک ابزار CSS است که باعث می شود پروژه React شما  هموارتر اجرا شود. این بسته به شما امکان می دهد اجزای کوچک قابل استفاده  مجدد که برای طراحی برنامه شما بسیار مهم هستند را بسازید.نصب و راه اندازیاستفاده از NPMnpm install --save styled-componentsاستفاده از Yarnyarn add styled-componentsاستفادهimport styled from &#34;styled-components&#34;&#xA;&#xA;// Styled component named Button&#xA;const Button = styled.button` background-color: black; font-size: 18px; color: white; `;&#xA;&#xA;function MyComponent() {&#xA;  return &lt;Button&gt; Sign up &lt;/Button&gt;;&#xA;}رابط کاربری Chakraرابط کاربری Chakra یک ابزار کامپوننت React است که به دنبال آن است تا  به توسعه دهندگان کمک کند زمان کمتری را برای نوشتن کد صرف کنند و زمان  بیشتری را برای ارائه یک تجربه کاربری عالی متمرکز کنند. این قطعات رابط  کاربری قابل انعطاف ، در دسترس و آسان را برای ایجاد برنامه ها در اختیار  شما قرار می دهد.نصب و راه اندازی-استفاده از NPMnpm i @chakra-ui/react @emotion/react@^11 @emotion/styled@^11 framer-motion@^4-استفاده از Yarnyarn add @chakra-ui/react @emotion/react@^11 @emotion/styled@^11 framer-motion@^4استفادهimport React from &#34;react&#34;&#xA;import { Button, ButtonGroup } from &#34;@chakra-ui/react&#34;&#xA;// Button: The button component with support for custom icons, spinners, etc.&#xA;// ButtonGroup: Used to group buttons whose actions are related, with an option to flush them together.&#xA;&#xA;export default function MyComponent() {&#xA;  return (&#xA;    &lt;div&gt;&#xA;      &lt;Button colorScheme=&#34;blue&#34;&gt;Button&lt;/Button&gt;&#xA;    &lt;/div&gt;&#xA;  );&#xA;}ممنون که خواندید!در توییتر من را دنبال کنید.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Sat, 25 Sep 2021 14:26:53 +0330</pubDate></item><item><title>نحوه پیکربندی پروژه های React</title><link>https://virgool.ir/@saleh.rezaei/نحوه-پیکربندی-پروژه-های-react-lwxjmjulntys</link><description>در این مقاله میخواهم به این سوال پاسخ بدهم:ساختار پوشه ها در پروژه React باید چگونه باشد؟هیچ پاسخ کامل یا 100٪ صحیحی برای این سوال وجود ندارد ، اما تعداد زیادی مقاله دیگر در این مورد وجود دارد که در اینترنت نیز  بحث شده است. این ساختار پوشه نیز تا حدی بر اساس چندین مورد از آنها است.نکته مهمی که باید به آن اشاره کرد این است که React به شما نمی گوید که  چگونه پروژه خود را سازماندهی کنید ، مگر اینکه بخواهید از پیچیدگی  و  افکار بیش از حد خودداری کنید. به طور دقیق می گویند: ( منبع )React نظری در مورد نحوه قرار دادن  فایل ها در پوشه ها ندارد. با این حال ، چند رویکرد رایج در اکوسیستم وجود  دارد که ممکن است بخواهید آنها را در نظر بگیرید.نگاهی به منبع پیوندی بیندازید که در آن می توانید در مورد آن رویکردهای  رایج بیشتر بخوانید. آنها در این مقاله بیشتر مورد بحث قرار نمی گیرند.ساختار و معماری زیر، ساختاری است که برای من ثابت شده و قابل اطمینان  است. ممکن است به شما در طراحی پروژه خود کمک کند. به خاطر داشته باشید که  معماری زیر بر اساس برنامه ای است که با create-react-app ایجاد شده و در جاوا اسکریپت نوشته شده است .فهرست: rootreact-project&#xA;├── node_modules&#xA;├── public&#xA;├── src&#xA;├── package.json&#xA;└── package-lock.jsonاین ساختار چیز خاصی نیست و نباید برای شما تازگی داشته باشد. این در  واقع یک راه اندازی اساسی create-react-app است . بخش جالب در اینجا محتوای  src است، پوشه ای که این مقاله در مورد آن است.پس ما اینجا چه داریم؟react-project&#xA;├── api&#xA;├── components&#xA;├── i18n&#xA;├── modules&#xA;├── pages&#xA;├── stores&#xA;├── tests&#xA;├── utils&#xA;├── index.js&#xA;├── main.js&#xA;└── style.cssهمانطور که می بینید برنامه در ابتدا به هشت دایرکتوری تقسیم شده است.  از اینجا به بعد ، فهرستها را از بالا به پایین بررسی کرده و هر یک را  بررسی می کنیم.بیایید با apiدایرکتوری شروع کنیم .پوشه: src/apireact-project&#xA;├── api&#xA;│   ├── services&#xA;│   │   ├── Job.js&#xA;│   │   ├── User.js&#xA;│   ├── auth.js&#xA;│   └── axios.jsapi شامل همه سرویس هایی است که برای ارتباط بین نرم افزار  React (front) و یک API (back) استفاده می شوند. یک سرویس واحد عملکردهای  متعددی را برای بازیابی داده ها یا ارسال داده ها به یک سرویس خارجی با  استفاده از پروتکل HTTP ارائه می دهد.auth.jsعملکردهایی را برای احراز هویت ارائه می دهد و axios.jsشامل یک نمونه axios شامل رهگیر برای درخواست های خروجی HTTP و پاسخ های دریافتی است. علاوه بر این ، روند تازه سازی JWT ها در اینجا انجام می شود.پوشه: src/componentsreact-project&#xA;├── components&#xA;│   ├── Job&#xA;│   │   ├── Description.js&#xA;│   │   └── Preview.js&#xA;│   └── User&#xA;│   │   ├── Card.js&#xA;│   │   ├── Create.js&#xA;│   │   └── List.jsاگر با React آشنا هستید ، باید بدانید که عمدتا بر اساس کامپوننت است.  اجزاء در واقع قلب هر برنامه React هستند. کل برنامه ، حداقل نمای ارائه ،  از بسیاری از اجزای کوچک ساخته شده است.بنابراین یک جزء چیست؟ منبعاجزا به شما امکان می دهند UI را به قطعات مستقل و قابل استفاده مجدد تقسیم کنید و در مورد هر قطعه به صورت جداگانه فکر کنید.تصور کنید وب سایتی مانند توییتر یا فیس بوک دارید. وب سایت بزرگ از  قطعات (اجزای) کوچکتر تشکیل شده است که می تواند به عنوان مثال دکمه ،  ورودی یا ابزارک باشد. این قطعات برای ساخت قطعات پیچیده تر و بزرگتر کنار  هم قرار می گیرند. هر جزء دارای چرخه زندگی و مدیریت حالت خاص خود است ، به  این ترتیب شما می توانید وضعیت یک جزء را با سایر موارد به اشتراک  بگذارید.اجزاء چندین بار در برنامه استفاده می شوند تا توسعه دهنده را از نوشتن کد اضافی نجات دهد.خود را تکرار نکنید (ِDRY)تقسیم کدهای پایگاه به چندین جزء فقط کار React نیست. این یک الگوی رایج  در مهندسی نرم افزار است که روند توسعه و نگهداری آینده را ساده می کند.در React ، یک کامپوننت بیشتر یک تابع ساده جاوا اسکریپت یا یک کلاس  است. معمولاً برای هر جزء یک فایل جدید ایجاد می کنم. در برخی موارد نادر ،  من چندین مورد از آنها (توابع یا کلاس ها) را در یک فایل واحد گروه بندی  می کنم. یک UserList.js را تصور کنید که چندین عنصر UserListItemرا ارائه می دهد :const UserList = ({ users }) =&gt; (&#xA;  &lt;ul&gt;&#xA;    {users.map(user =&gt; (&#xA;      &lt;UserListItem key={user.userId} user={user} /&gt;     ))}&#xA;  &lt;/ul&gt; )&#xA;&#xA;const UserListItem = ({ user }) =&gt; &lt;li&gt;{user.name}&lt;/li&gt;در اینجا ، منطقی است که هر دو را در یک فایل ترکیب کنید. علاوه بر این ، UserListItemاحتمالاً حتی توسط هیچ جزء دیگری به جزUserList استفاده نمی شود .علاوه بر خود اجزاء ، همچنین می توانید شیوه نامه ها یا آزمایشات آنها را به این فهرست اضافه کنید.پوشه: src/i18nreact-project&#xA;├── i18n&#xA;│   ├── de.json&#xA;│   └── en.jsoni18nمخفف بین المللی شدن (internationalization) است و از پشتیبانی زبان برنامه مراقبت می کند. فایلهای JSON شامل اشیائی هستند  که دارای ثابتهایی به عنوان کلید و ترجمه های مرتبط با آنها به عنوان  مقادیر هستند.بنابراین ، کلیدها باید برای هر فایل زبان برابر باشند. فقط مقادیر  (ترجمه ها) با یکدیگر تفاوت دارند. بعداً با نوشتن قلاب یا جزء سفارشی خود  می توانید به آسانی آن فایل های زبان را جست و جو کنید.پوشه: src/modulesreact-project&#xA;├── modules&#xA;│   ├── logger.js&#xA;│   └── session.jsاین فهرست شامل برخی از ماژول های global است که ممکن است برای ورود به سیستم یا به عنوان بسته بندی برای LocalStorage مرورگر استفاده شود .پوشه: src/pagesreact-project&#xA;├── pages&#xA;│   ├── Home&#xA;│   │   ├── components&#xA;│   │   │   ├── Dashboard.js&#xA;│   │   │   └── Welcome.js&#xA;│   │   └── index.js&#xA;│   ├── Login.js&#xA;│   └── Profile.jsدایرکتوری pages شامل مسیرهایی است که  از طریق نرم افزار  به آنها دسترسی پیدا میکنیم . در اینجا ، ما چندین جزء را در یک واحد  بزرگتر جمع می کنیم تا نمای کامل صفحه نمایش داده شود.یک صفحه ممکن است شامل فهرست component خود باشد که شامل  اجزای “محلی” است که فقط در این صفحه استفاده می شوند. برای صفحات پیچیده  با درخت کامپوننت عمیق ، ممکن است بخواهید React Context API را بررسی کنید که انتقال propها در درخت و مدیریت “وضعیت صفحه” جهانی را بسیار ساده تر می کند.دایرکتوری: src/storereact-project&#xA;├── stores&#xA;│   ├── language.js&#xA;│   └── user.jsاین فهرست شامل تمام حالتهای React global است که از هر جزء درون برنامه قابل دسترسی است. در حالی که Redux احتمالاً محبوب ترین راه حل برای مدیریت وضعیت global است ، من ترجیح می دهم از zustand استفاده کنم . شروع کار بسیار آسان است و API آن واقعاً ساده است.دایرکتوری: src/testsreact-project&#xA;├── tests&#xA;│   ├── language.test.js&#xA;│   └── utils.test.jsدایرکتوری tests شامل تست هایی که به اجزای خاصی تعلق  ندارد. به عنوان مثال ، این می تواند آزمایش هایی برای اجرای الگوریتم ها  باشد. علاوه بر این ، من کلیدهای فایلهای زبانی را که در بالا ذکر کردم  تأیید و مقایسه می کنم تا مطمئن شوم که هیچ ترجمه ای را برای یک زبان خاص  از دست نداده ام.فهرست: src/utilsreact-project&#xA;├── utils&#xA;│   ├── hooks&#xA;│   │   ├── useChat.js&#xA;│   │   ├── useOutsideAlerter.js&#xA;│   │   ├── useToast.js&#xA;│   ├── providers&#xA;│   │   ├── HomeContextProvider.js&#xA;│   │   ├── ToastContextProvider.js&#xA;│   ├── colors.js&#xA;│   ├── constants.js&#xA;│   ├── index.jsدر اینجا ، ما مجموعه ای از ابزارهای مفید مانند: custom hooks ،  context provider ، ثابت ها و توابع کمکی را داریم. با خیال راحت مطالب  بیشتری را در اینجا اضافه کنید.همه با همآخرین و مهمترین مرور کامل بر ساختار پروژه:react-project&#xA;├── api&#xA;│   ├── services&#xA;│   │   ├── Job.js&#xA;│   │   ├── User.js&#xA;│   ├── auth.js&#xA;│   └── axios.js&#xA;├── components&#xA;│   ├── Job&#xA;│   │   ├── Description.js&#xA;│   │   └── Preview.js&#xA;│   └── User&#xA;│   │   ├── Card.js&#xA;│   │   ├── Create.js&#xA;│   │   └── List.js&#xA;├── i18n&#xA;│   ├── de.json&#xA;│   └── en.json&#xA;├── modules&#xA;│   ├── logger.js&#xA;│   └── session.js&#xA;├── pages&#xA;│   ├── Home&#xA;│   │   ├── components&#xA;│   │   │   ├── Dashboard.js&#xA;│   │   │   └── Welcome.js&#xA;│   │   └── index.js&#xA;│   ├── Login.js&#xA;│   └── Profile.js&#xA;├── stores&#xA;│   ├── language.js&#xA;│   └── user.js&#xA;├── tests&#xA;│   ├── language.test.js&#xA;│   └── utils.test.js&#xA;├── utils&#xA;│   ├── hooks&#xA;│   │   ├── useChat.js&#xA;│   │   ├── useOutsideAlerter.js&#xA;│   │   ├── useToast.js&#xA;│   ├── providers&#xA;│   │   ├── HomeContextProvider.js&#xA;│   │   ├── ToastContextProvider.js&#xA;│   ├── colors.js&#xA;│   ├── constants.js&#xA;│   ├── index.js&#xA;├── index.js&#xA;├── main.js&#xA;└── style.cssامیدوارم این کمک کوچکی برای افرادی باشد که نمی دانند چگونه برنامه React خود را ایجاد کنند یا نمی دانند چگونه شروع کنند.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Fri, 10 Sep 2021 16:51:43 +0430</pubDate></item><item><title>Frontend های ساده برای شروع تمرین توسعه API</title><link>https://virgool.ir/@saleh.rezaei/frontend-های-ساده-برای-شروع-تمرین-توسعه-api-hanvkle6gosx</link><description>هنگامی که واقعا در HTML ، CSS و Javascript شروع به کار می کنید ، فقط یک زمان است که بخواهید بازی با داده های واقعی را شروع کنید.راه های زیادی وجود دارد که توسعه دهندگان می توانند داده ها را دستکاری کرده و وب سایت هایی واقعاً زیبا بسازند.این لیست من برای شروع به کار است!1. JSONPlaceholderJSONPlaceholder یک API خوب برای منابع مختلف ارائه می دهد.نوشته هانظراتآلبوم هاعکس هاوظایفکاربران2. API فروشگاه جعلیAPI ساده Fake Store مهمترین منابع را هنگام تلاش برای ایجاد اولین فروشگاه تجارت الکترونیکی ارائه می دهد.محصولاتسبد خریدکاربرانورود به سیستم3. Unsplashed APIAPI آرامش بخش Unsplashed ممکن است به عنوان  “قدرتمندترین موتور عکس در جهان” با عبارت جالب خود، “عکس برای همه” مطابقت  داشته باشد. آنچه در اختیار شما قرار می گیرد:بیش از 3 میلیون عکسجستجوی عکس ها بر اساس کلمات کلیدیجستجوی عکس های تصادفیمجموعه داده های متعدد4. API نقل قولQuotes rest API تنوع زیادی از نقل قول ها را ارائه می دهد ، مانند:نقل قول روزنقل قول ها بر اساس دسته هانقل قول های تصادفی انتخاب شدهنقل قول های نویسندگاننقل قول بر اساس محبوبیت5. API ناسایکی از موارد مورد علاقه شخصی من. API ناسا منابع متعددی را ارائه می دهد مانند:APOD (عکس نجوم روز)Astroid NeoWs (خدمات وب شیء نزدیک زمین)Insight (خدمات آب و هوایی مریخ)کتابخانه تصویر و فیلم ناساو خیلی بیشتر!6. API SpaceXمشهورترین شرکت فضایی جهان ، SpaceX ! این API آرام ، انواع مختلفی از جزئیات موشک را ارائه می دهد ، مانند:موشکموشک پرتاب می شودهستهاستارلینکصفحه راه اندازیداده های صفحه فرود6. SpaceX APIمشهورترین شرکت فضایی جهان ، SpaceX ! این API ، انواع مختلفی از جزئیات موشک را ارائه می دهد ، مانند:موشکپرتاب موشکهستهاستارلینکصفحه راه اندازیداده های صفحه فرود7. CoingeckoCoingecko API منبع اصلی من برای همه چیز رمزنگاری است. تعداد زیادی از آنها وجود دارد ، اما این ساده ترین است. نیازی به  api key ندارد ، رایگان است ، برای پروژه های جانبی عالی است! چندین نقطه پایانی ارائه می دهد:قیمت سکهلیست تمام سکه هابازارهاتیکرهاسابقه قیمتنمودارهای بازارخشم در قیمت هاقراردادهابسترهای معاملاتیمبادله و موارد دیگر!منبع</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Tue, 07 Sep 2021 21:04:59 +0430</pubDate></item><item><title>مفاهیم ضروری در JS</title><link>https://virgool.ir/@saleh.rezaei/مفاهیم-ضروری-در-js-csqntffiett3</link><description>در ابتدا ممکن است Javascript  بخاطر شباهت به syntaxt زبان C، آسان به نظر برسد .با این حال ، نحوه انجام آن ، تغییرات مداوم ایجاد شده در زبان (ESNext) و چارچوب های آن ممکن است بر مبتدیان غلبه کند.من اینجا هستم تا سردرگمی پیرامون آنچه که من فکر می کنم یک زبان زیبا ، اما مهمتر از همه ، بسیار پردرآمد است را برطرف کنم .بسیار سودآور است زیرا JS می تواند تقریباً هر کاری را که امروز می خواهید با سهولت انجام دهد.آیا می خواهید یک برنامه وب ایجاد کنید؟ مشکلی نیستآیا می خواهید یک ابزار CLI بسازید؟ مشکلی نیستآیا می خواهید یک برنامه دسکتاپ بسازید؟ راحت تر از چیزی که فکر می کنید انجام می شود!تعداد روزافزون بسته ها و کتابخانه هایی که روزانه در دسترس قرار می  گیرد نشان می دهد که JS در هنگام ساختن یک برنامه نرم افزاری چقدر انتزاعی  است.با این حال به نظر می رسد JS نفرت زیادی را دریافت می کند ، عمدتا به  دلیل اینکه در مقایسه با رقبای خود غیر معمول است. برای هر کسی که ممکن است  جنبه های نظری JS را از دست بدهد گیج کننده است.بسیاری از مردم قبل از غرق شدن در زبان ، جنبه های نظری جاوا اسکریپت را  نادیده می گیرند. این مفاهیم به ما کمک می کند تا سر خود را در مسیرها و  الگوهای مختلفی که هنگام ساختن برنامه های جاوا اسکریپت در پیش می گیریم ،  بچرخانیم. این الگوها در هر چارچوبی در JS وجود دارد ، بنابراین گذر از این  مفاهیم قبل از یادگیری خود زبان بسیار منطقی است. https://virgool.io/d/csqntffiett3/%F0%9F%93%B7 ویژگی های JSچند پارادایمجاوا اسکریپت از برنامه نویسی عملکردی رویه ای ، شی گرا و رویداد محور پشتیبانی می کند!آشنایی با شیوه برنامه نویسی شی گرا JS می تواند بسیار مفید باشد.برنامه نویسی شی گرا به برنامه نویسان کمک می کند تا اجزای یک برنامه نرم افزاری را به آسانی تجسم کنند.علاوه  بر این ، یادگیری Typescript (جاوا اسکریپت با Typeها) به برنامه نویسان  این امکان را می دهد تا بهترین الگوهای طراحی را با سهولت زیادی پیاده سازی  کنند. این الگوهای طراحی برای حل متداول ترین مشکلاتی که در برنامه نویسی  نرم افزار با آن روبرو می شوند به کارآمدترین شکل ممکن استفاده می شود.این تطبیق پذیری ، جاوا اسکریپت را بسیار قابل دستیابی اما بسیار قدرتمند می کند.تفسیر شدهجاوا اسکریپت متفاوت از ++C/C است که در آن به جای خواندن یک برنامه ،  خط به خط تفسیر می شود. این بدان معناست که JS کندتر از زبانهای کامپایل  شده مانند ++C/C است.هشدار: جاوا اسکریپت به دلیل داشتن یک زبان بسیار منفعل در زمان اجرا بدنام است. عیب یابی خطاها بسیار دشوار است.با این حال ناامید نشوید. با گذر زمان و تمرین ، یاد خواهید گرفت که  چگونه با خیال راحت قایقرانی کنید. رایج ترین خطا شامل بازگشت مقادیر NULL متغیرهای شما است . هنگامی که چنین مسائلی ظاهر می شود ، به Stack  Overflow بروید زیرا من به شما اطمینان می دهم ، شما اولین نفری نیستید که  با خطا درگیر می شوید ، مهم نیست که چقدر خوب باشیدد. با این حال همیشه  ایده خوبی است که از console.log()در حالی که پروژه های شما  در حال توسعه هستند استفاده کنید. این به شما کمک می کند تا دقیقاً لحظه ای  را در چرخه عمر برنامه خود انتخاب کنید ، جایی که ممکن است متغیر شما از  بین رفته باشد.تک رشتهجاوا اسکریپت فقط می تواند یک کار واحد را همزمان انجام دهد. بر اساس نوع ، وظایف مختلف را در صف های مختلف قرار می دهد.در انتزاعی ترین مفهوم ، جاوا اسکریپت اساساً وظایف همگام و وظایف ناهمزمان را گروه بندی کرده و آنها را جداگانه در صف قرار می دهد.وظایف همزمان عبارتهایی هستند که در لحظه برخورد با آنها پردازش می شوند  ، یعنی فوراً اجرا می شوند. این وظایف شامل دستورات log ، اعلان های متغیر  ، بررسی شرطی و غیره است.وظایف ناهمزمان شامل وظایفی است که ممکن است زمان متغیری برای  بازگرداندن خروجی طول بکشد. یک مثال برای کارهای ناهمزمان ممکن است درخواست  اطلاعات از API های وب باشد.علاوه بر این ، جاوا اسکریپت همچنین دارای صف مشاغل است که برای مقابله با ویژگی JS به نام Promises استفاده می شود.با کلیک راست روی این صفحه وب و زدن برگه Inspect، عملاً می توانید  ماهیت تک رشته ای Javascript را مشاهده کنید. بعد ، به برگه کنسول در پنجره  ای که تازه باز شده است بروید. کد زیر را تایپ کرده و enter را بزنید.while(true) {}اکنون می توانید مشاهده کنید که این صفحه کاملاً پاسخگو نیست. این به  این دلیل است که جاوا اسکریپت در این صفحه در حال حاضر مشغول اجرای حلقه  نامحدود while است که در بالا اجرا کردیم.عدم انسدادما قبلاً در مورد وظایف ناهمزمان بحث کرده ایم. از آنجا که JS در یک  محیط تک رشته ای اجرا می شود ، به طور پیش فرض ، منتظر هیچ کس نیست!بلوک های کد ناهمزمان تنها پس از اجرای همه بلوک های کد همزمان بدون در نظر گرفتن موقعیت کد در برنامه اجرا می شوند.console.log(&#34;I&#39;m the first statement&#34;)&#xA;&#xA;setTimeout(()=&gt; {&#xA;console.log(&#34;I&#39;m the second statement&#34;)&#xA;},1000)&#xA;&#xA;console.log(&#34;I&#39;m the third statement&#34;)در اینجا console.log()دستور داخل آن را به کنسول وصل می کند. تابع بالا اجرا می شود عبارت دوم پس از یک ثانیه است.setTimeout()در بررسی خروجیI&#39;m the first statement&#xA;I&#39;m the third statement&#xA;I&#39;m the second statementمی بینیم که دستور سوم قبل از دستور دوم ثبت شده است. این به دلیل روش ذاتی JS در مدیریت بلوک های کد Sync و Async است. https://virgool.io/d/csqntffiett3/%F0%9F%93%B7 سطح بالاجاوا اسکریپت یک زبان سطح بالا است. زبانهای سطح بالا به سادگی می  توانند به این معنی باشند که بسیار بیشتر به زبانی که انسانها صحبت می کنند  ، نزدیک هستند. زبانهای سطح بالا قادر به ارائه ویژگیهای بیشتری هستند تا  به برنامه نویسان کمک کند تا آنچه را که می خواهند بسازند بهتر بیان کنند.این ماهیت سطح بالای جاوا اسکریپت به آن کمک می کند تا به بهترین نحو به  بخش سمت مشتری از وب خدمت کند. یک محدودیت عمده برای JS این بود که فقط در  سمت سرویس گیرنده قابل ارائه بود و نمی توانست مانند اکثر زبان های سمت  سرور دستکاری فایل را انجام دهد.با این حال این امر تغییر کرده است و NodeJSبه توسعه  دهندگان اجازه می دهد از Javascript برای ساخت سرورهای پشتیبان استفاده  کنند. بنابراین تنها با یک زبان ، یک توسعه دهنده نرم افزار می تواند هم در  سمت سرور و هم در سمت سرویس گیرنده کار کند. این امر منجر به برجسته شدن  مهندسان Full Stack شده است.به صورت پویا تایپ شده استجاوا اسکریپت یک زبان تایپ شده پویا است. این بدان معناست که بر خلاف C  که ما باید نوع داده یک متغیر را مشخص کنیم ، می توانیم در جاوا اسکریپت از  type-inference  استفاده کنیم تا نوع داده ها را بطور خودکار متوجه شود.// In C variables must have datatypes. In order to change datatypes from one type to //another , we need to use type-casting&#xA;int a = 5;&#xA;char b = &#34;a&#34;&#xA;float c = 7.036;در جاوا اسکریپت ، ما به ترتیب از متغیرها یا ثابت ها استفاده می کنیم و آنها را با let و constاعلام می کنیم.let a = 5&#xA;console.log(a) // 5&#xA;a = &#39;Hello World&#39;&#xA;console.log(a) // Hello World&#xA;&#xA;const b = &#39;JS is awesome&#39; &#xA;console.log(b) // JS is awesome&#xA;&#xA;b = &#39;I changed my mind&#39;&#xA;console.log(b) // Error: const cannot be changedدر حالی که استنباط نوع به دلیل سهولت استفاده ممکن است یک نقطه مثبت به  نظر برسد ، اما بلافاصله به عنوان یک نقصان برای پروژه های بزرگتر که نیاز  به ایمنی نوع دارند ، تبدیل می شود.به همین دلیل ، پروژه های بزرگتر از TypeScript استفاده می کنند که فقط  یک جاوا اسکریپت است که انواع ، رابط ها و ویژگی های مختلف دیگر را ارائه  می دهد.استراتژی یادگیریمدتی طول می کشد تا در JS Minimum Requirementsمستقر شوید ، اما من یک چک لیست ساده دارم که برای یادگیری چارچوب هایی مانند Express یا ReactJS استفاده می شود.در ابتدا ، به دنبال یادگیری این چارچوب ها نباشید. برای تسلط بر وانیلا جاوا اسکریپت وقت بگذارید.اصول اولیهمتغیرها و ثابت هابلوک های شرطی (if-else)حلقه ها (for، while، forEach)Switch caseFuntionsاینها اصول اساسی برنامه نویسی شما هستند.قسمت پیشرفته (حداقل شرایط مورد نیاز)Async/AwaitPromisesClasses in JavascriptRest/Spread SyntaxArray/Object IteratorsArray DestructuringModules (import,export)با ساختن پروژه ها به یادگیری ادامه دهید و به زودی تسلط کاملی بر زبان خواهید داشت.https://salehrezaei.com</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Mon, 06 Sep 2021 22:54:18 +0430</pubDate></item><item><title>3 استراتژی تعیین قیمت به عنوان یک فریلنسر</title><link>https://virgool.ir/@saleh.rezaei/3-استراتژی-تعیین-قیمت-به-عنوان-یک-فریلنسر-lvckmw45przt</link><description>این پست ابتدا در وبلاگ من منتشر شده است.ارزشی که ما برای وقت، دانش و تجربه خود قائل می شویم، شیوه برخورد ما  با استراتژی قیمت گذاری را تغییر می دهد. در حالت کلی 3 استراتژی قیمت  گذاری وجود دارد که می توانید به عنوان یک فریلنسر از آنها استفاده کنید.قیمت گذاری ساعتیبیشتر افرادی که تمام وقت کار می کنند حقوق ساعتی دریافت می کنند. این  روش امن است و می توانید برای زمان کار خود دستمزد دریافت کنید.بر اساس تجربه من ، قیمت گذاری ساعتی برای پروژه هایی با ابهامات زیاد،  خوب کار می کند. خواه به دلیل بزرگی پروژه ، ماهیت مشتری یا به هر دلیلی  باشد. این استراتژی قیمت گذاری شما را از ایجاد ویژگی های اضافی به صورت  رایگان یا اجازه دادن به مشتری برای درخواست موارد اضافی غیر ضروری محافظت  می کند.چقدر برای یک ساعت درخواست کنید؟ این واقعاً به مهارت ، نمونه کارها و  مشتریان شما بستگی دارد و هیچ توصیه جالبی نمی توانم در اینجا ارائه دهم.  من یک قانون “حقوق سالانه منهای 3 صفر” را شنیده ام. طبق آن، اگر یک توسعه  دهنده با تجربه سالانه 120,000,000 تومان درآمد کسب کند ، حقوق ساعتی شما  می تواند 120,000 تومان باشد.در پایان ، قیمت گذاری ساعتی یک روش ساده و در عین حال مطمئن برای قیمت  گذاری به عنوان یک توسعه دهنده است. اما صادقانه بگویم ، این کاملا شبیه به  داشتن یک کار تمام وقت است و من معتقدم گزینه های بهتری وجود دارد.قیمت گذاری مبتنی بر پروژهقیمت ثابت برای پروژه؟ برای بیشتر پروژه هایم اینگونه قیمت گذاری کرده  ام. گاهی پشیمان شده ام ، گرچه در بیشتر موارد این کار درستی بوده است.نکته ای که در مورد قیمت گذاری مبتنی بر پروژه وجود دارد این است که شما  باید به خوبی بدانید که چه کاری انجام می دهید. یا فقط باید انگیزه داشته  باشید زیرا پروژه ، مشتری ، علت یا فناوری هایی را که استفاده می کنید دوست  دارید. به هر حال ، قیمت گذاری مبتنی بر پروژه می تواند مشکل باشد.قبل از توافق در مورد قیمت گذاری مبتنی بر پروژه ، من اکیداً به شما  توصیه می کنم که در مورد الزامات پروژه ها به توافق برسید. و به من اعتماد  کنید ، منظورم این است که هیچ ابهامی وجود نداشته باشد. من بخشی از پروژه  هایی بوده ام که در مورد اهداف بسیار گسترده ای به توافق رسیده ایم و نتیجه  آن انجام کارهای اضافی بوده است. این به ویژه در مواردی که دید شما با دید  مشتری شما مطابقت ندارد انرژی زیادی می گیرد.درصورتی که باتجربه تر باشید ، قیمت گذاری مبتنی بر پروژه می تواند راهی  عالی برای کسب درآمد هنگام صرفه جویی در وقت باشد. اگر می توانید نیازهای  پروژه را تجزیه و تحلیل کنید ، قیمت گذاری مبتنی بر پروژه راهی برای رسیدن  به اهداف مشتری با استفاده از روش های جدید و با تلاش کم است.قیمت گذاری مبتنی بر ارزشتصور کنید که برای مشتری یک وب سایت تجارت الکترونیکی درست می کنید و  توافق می کنید که در هر فروش ، 100 تومان دریافت خواهید کرد. شما به این  پروژه اعتقاد دارید و موافقت می کنید که با پرداخت هزینه ای اندک آن را  بسازید. چند سال بعد ، مشتری شما ماهیانه 100000 فروش انجام می دهد. این  بدان معنی است که شما ماهانه 10 میلیون تومان درآمد کسب می کنید ، اساساً  فقط برای نگهداری سایت. مثل سرمایه گذاری است ، اما فقط از طریق فریلنسینگ.  به همین دلیل قیمت های مبتنی بر ارزش را دوست دارم.قیمت گذاری مبتنی بر ارزش خطرناک است. معمولاً مشتریان کوچکتر با آن  موافقت می کنند و شما به احتمال زیاد مجبورید که مبلغ اولیه کمتری را  بپذیرید ، اما اگر به کاری که مشتری انجام می دهد اعتقاد داشته باشید و  واقعاً موفق شود ، می تواند نتیجه بسیار خوبی داشته باشد.اگر به چنین ریسکی علاقه ندارید ، روش دیگری برای مذاکره در مورد هزینه  خود با استفاده از قیمت گذاری مبتنی بر ارزش وجود دارد. از مشتری خود  بپرسید “انتظار دارید چند فروش اضافی از طریق وب سایت جدید بدست آورید؟” و  سپس “یک فروش چقدر ارزش دارد؟” از این طریق می توانید هزینه ای را که برای  شما راحت است محاسبه کنید.بیایید بگوییم مشتری شما انتظار دارد 100 فروش اضافی با استفاده از وب  سایت (در مقایسه با سایت قدیمی) ، با ارزش 1,000,000 تومان بدست آورد. این  بدان معنی است که ، مشتری هر ساله 100,000,000 تومان اضافی می گیرد.  درخواست… 25%، یا 25,000,000 تومان اصلا زیاد نیست، چون مشتری 75,00,000  تومان دریافت میکند.اگرچه قیمت گذاری مبتنی بر ارزش خطرناک تر است و گاهی اوقات سخت تر می  توان مذاکره کرد ، اما این روشی است که می تواند بیشترین پول را به همراه  داشته باشد. اگر مهارت دارید ، توصیه می کنم آن را امتحان کنید.کدام استراتژی را انتخاب کنیم؟همه گزینه ها عالی هستند … من معتقدم که می توان بین مهارت های خود و  استراتژی های قیمت گذاری ارتباط برقرار کرد. بگذارید توضیح بیشتری بدهم.اگر مبتدی هستید ، توصیه می کنم به دنبال قیمت گذاری پروژه محور باشید.  چرا؟ زیرا شما یک مبتدی هستید و به احتمال زیاد زمان بیشتری را برای پروژه  ها صرف خواهید کرد. اگر از فن آوری اطلاع ندارید و فقط در حال یادگیری  هستید ، قیمت گذاری مبتنی بر پروژه راهی عالی برای دریافت هزینه برای آن  است.اگر کمی باتجربه تر باشید و از قبل ابزارها را بلد باشید ، می توانید  قیمت گذاری مبتنی بر پروژه و صورتحساب ساعتی را انتخاب کنید. صورتحساب  ساعتی عالی است زیرا مطمئن است ، در حالی که قیمت های مبتنی بر پروژه را می  توان در صورت عدم شناخت، استفاده کرد. بین این دو ، من قیمت گذاری مبتنی  بر پروژه را ترجیح می دهم ، زیرا از این طریق می توانم قیمت را بر اساس حس  درونی تعیین کنم ، که در پروژه های کوچکتر ، مرا ناامید نکرده است.  صورتحساب ساعتی به این معنی است که من وقت خود را می فروشم ولی با  فریلنسینگ ، برای آزادی کامل تلاش می کنم ، نه اینکه وقت خود را بفروشم.و قیمت گذاری مورد علاقه من، بر اساس ارزش. من آن را دوست دارم زیرا می  تواند درآمد منفعلانه ای به همراه داشته باشد. اما این روش همچنین فرض می  کند که شما دارای تفکر تجاری هستید و می توانید ارزشی را که برای مشتری به  ارمغان می آورید ، درک کرده و بیان کنید.نتیجهقیمت گذاری به عنوان یک فریلنسر می تواند سخت باشد و این واقعا به مهارت  ، تجربه و پروژه شما بستگی دارد. کدام یک مناسب شما است؟ بر اساس تجربه من  ، درصورتی که به دنبال امنیت هستید ، قیمت گذاری ساعتی راه اصلی است. اگر  پروژه را می شناسید و به تمام مسائل آن واقفید ،قیمت گذاری مبتنی بر پروژه  را انتخاب کنید. و اگر تجارت را می شناسید و به مشتری اعتقاد دارید، سعی  کنید با استفاده از قیمت گذاری مبتنی بر ارزش در مورد یک معامله مذاکره  کنید. بنابراین قبل از موافقت با یک قیمت مشخص ، به گزینه های خود فکر  کنید.</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Wed, 17 Mar 2021 21:54:13 +0330</pubDate></item><item><title>شش نکته برای بهبود مهارت مرور کد</title><link>https://virgool.ir/@saleh.rezaei/شش-نکته-برای-بهبود-مهارت-مرور-کد-ow2uvyd9lkgg</link><description>این پست ابتدا در وبلاگ من منتشر شده است.به نظر من ، مرور کد یکی از موثرترین ابزارها برای بهبود پایه کد و  همسویی مهارت های کدنویسی تیم شما است. اما ، مانند هر ابزاری ، می توان از  آن به روش غلط استفاده کرد: می تواند به مردم آسیب برساند ، منجر به  درگیری می شود و می تواند سرعت ارائه ویژگی های جدید را کاهش دهد. من به  عنوان یکی از نگهبانان پیشگام GitLab و نگهدارنده اسناد Vue.js ، روزانه در  حال بررسی درخواستهای pull / merge هستم (و وقتی یاد می گرفتم به طور موثر  کد را مرور کنم اشتباهات زیادی مرتکب شده ام!) در این مقاله ، سعی می کنم  چند تکنیک را به شما آموزش دهم که به من کمک می کند بدون کاهش کیفیت کد ،  نظرات خود را بهتر کنم.تغییرات را به صورت محلی آزمایش کنیدجدی ، آن را انجام دهید هر زمان که درخواست برای بررسی دارید ، سعی کنید  branch را بررسی کرده و تغییرات را بررسی کنید. نه تنها این به تست دود کمک می کند بلکه باعث می شود شما بیشتر بررسی کنید. بعضی اوقات تغییرات کد  تا زمانی که مسئله ای را مطالعه نکنید ، اجرای آن را آزمایش کرده و متوجه  شوید که در سطح پایین (Low-Level) بسیار خوب است کاملاً موثر به نظر می رسد  اما معماری می تواند و باید بهبود یابد.اظهار نظر نکنید، سوال کنیدهر وقت چیزی را دیدید که به نظرتان بد می آید و آماده تایپ چیزی مانند آن هستید این بد است و ما نباید از آن استفاده کنیم–  برای یک ثانیه صبر کنید. این احتمال وجود دارد که همکار شما به خوبی آگاه  باشد که او کاری را به طور کامل انجام نمی دهد و ممکن است دلیل خوبی برای  آن داشته باشند. قبل از نتیجه گیری ، سعی کنید چند سوال بپرسید تا زمینه را  درک کنید.بد:من فکر نمیکنم ایده خوبی باشه تا درکامپوننت Vue از ‘querySelector’ استفاده کنیم.بهتر:من متوجه شدم که داریم از ‘querySelector’ در کامپوننت Vue استفاده میکنیم. دلیل خاصی وجود داره که باید با DOM کار کنیم؟در تمجید دریغ نکنیدیادگیری این یکی برای من بسیار سخت بود. به دلایلی ، من معتقدم که انجام  یک مرور کد مساوی با گرفتن همه اشتباهات احتمالی است. چون وقتی کسی کار  خود را خوب انجام می دهد (در این مورد ، نوشتن کد) خوب است ، باید آن را به  طور پیش فرض خوب انجام دهد ، درست است؟نه درست نیستتمجبد بخش مهمی از بررسی کد است. همانطور که باید اقدامات نادرست در کد را سرزنش کنیم ، باید اقدامات خوب را نیز تشویق کنیم . اگر دیدید چیزی به زیبایی نوشته شده است ، آن را صریح بیان کنید.  یک لحظه مهم در اینجا صادق بودن و خاص بودن است: اگر چیزی ارزش تعریف  ندارد، از آن تعریف نکنید و فقط نگویید “چه کار خوبی”. “من روش ساخت تست ها  را دوست دارم! پیگیری آن بسیار آسان است” بهتر عمل می کند.نظرات خود را برچسب بزنیداین نکته را من از همکارم یاد گرفته ام . ایده این است که برای یک نظر  با یک برچسب خاص پیشوند قرار دهید، به طور واضح نقطه نظر را بیان کنید:سوال : من متوجه شده ام که ما از querySelector استفاده می کنیم. آیا دلیلی وجود دارد که ما به یک DOM واقعی دسترسی پیدا کنیم؟پیشنهاد : ما می توانیم با استفاده از یک عملگر سه گانه در اینجا این محاسبه را ساده کنیم.nitpick : هنگام بررسی primitiveها ، می توانیم از toBeبه جای toEqual استفاده کنیم.این به نویسنده کد کمک می کند تا هدف بازبینی را بهتر درک کند و از  سوتفاهم جلوگیری کند. می توانید اطلاعات بیشتر در مورد این قرارداد را در  این وب سایت بیابید.جدا کردن مسدود کننده از غیر مسدود کنندهیک نکته اضافی دیگر در مورد برچسب گذاری نظرات نیز این است که اگر  نگرانی شما مسدود است ، آن را به وضوح بیان کنید. آیا ما باید قبل از ادغام  درخواست pull در master این تغییر را ایجاد کنیم؟ یا اینکه  این یک چیز جزئی است که می تواند درجلسه پیگیری به آن رسیدگی شود یا کلاً  نادیده گرفته شود زیرا مسئله مهمی نیست؟ من ترجیح می دهم نظرات مسدود کننده  را به عنوان مسئله مهم و غیر مسدود کننده را با nitpick مشخص کنم اما نحوه بیان نظر شما کاملاً به خود شما بستگی دارد. جدا کردن  نظرات مسدود کردن از غیر مسدود کننده ، به تمیز نگه داشتن کد کمک می کند در  حالی که عملکرد تیم را در دوره های مرور بی پایان از بین نمی برید.یک قدم اضافی برداریدیک نکته دیگر برای بهبود سنجش زمان ادغام ، تلاش اضافی به عنوان یک  بازبین برای جلوگیری از دورهای اضافی بررسی است. نظرات توضیحی بنویسید –  این به نویسنده کمک می کند تا نیاز به تغییر کد را درک کند و از سوالات  اضافی جلوگیری می کند. چیزی وجود دارد که واقعا به توضیح طولانی نیاز دارد و  نیاز به تغییرات متعددی دارد؟ یک وصله کد ایجاد کنید و آن را با شرح  مختصری از آنچه این وصله انجام می دهد به نظر خود اضافه کنید. این کار،  روند را به میزان قابل توجهی تسریع می کند.منبع: Six tips to improve your code review skills</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Thu, 11 Mar 2021 23:19:42 +0330</pubDate></item><item><title>چرا شما به زمان تنهایی نیاز دارید</title><link>https://virgool.ir/@saleh.rezaei/چرا-شما-به-زمان-تنهایی-نیاز-دارید-oickxbezfibg</link><description>یک احساس غم انگیزی وجود دارد که اگر زمان زیادی را تنها بگذرانیم: ما  تنها هستیم. اما در مورد احساسات منفی که می تواند ناشی از صرف نکردن زمان کافی به تنهایی باشد ، چه می کنید؟تیمی از روانشناسان به سرپرستی رابرت کوپلان در دانشگاه کارلتون نامی را نیز برای آن پیشنهاد داده اند : تنها. مانند ، برعکس تنهایی. ما باید زمان تنهایی خود را با اوقات  اجتماعی خود متعادل کنیم و تعادل مناسب برای همه متفاوت است. این ممکن است  یک چارچوب مفید برای درک نیازهای ما باشد تا اینکه بخواهیم خود را در یک باینری درونگرا / برونگرا قرار دهیم .بنابراین ، در مورد تنهایی خود چه کاری می توانید انجام دهید؟ اولین قدم  تصدیق این مشکل است: اگر به تنهائی بیشتر از آنچه که می خواهید نیاز  دارید، تنها هستید. ابزار اصلی کوپلان و همکارانش برای کشف تنهایی یک  پرسشنامه ساده بود که از مردم می پرسید آیا آنها با جملاتی مانند “کاش  بیشتر اوقات خودم باشم” موافق هستند؟ با کمی درون نگری ، احتمالاً می  توانید بفهمید که آیا در واقع تنها هستید.اگر اینگونه باشید ، ممکن است احساس “تحریک پذیری ، سرسختی و خستگی”  کنید ، “روانشناسی امروز” خاطرنشان می کند. با فشارهای زیادی که این روزها  بر سلامت روان ما وارد شده است ، ممکن است مفید باشد که تلاش کنیم تنهایی  را از اضطراب ، فرسودگی و سایر عوامل استرس زا در زندگی خود جدا کنیم. اگر  این کار به خودی خود طاقت فرسا است ، فکر کنید که زمان آن فرا رسیده است که یک درمانگر پیدا کنید که بتواند به شما کمک کند هر آنچه مغز شما با آن سر و کار دارد را مرتب کنید.در این میان ،این سوال را از خود بپرسید: آیا وقتی بیشتر وقت تنها می  گذارید احساس بهتری دارید یا خیر؟ سپس زمانبندی و محافظت از آن را به  تنهایی انجام دهید. برای مثال لازم نیست با هر تماس اجتماعی یا زوم موافقت  کنید. می توانید تصمیم بگیرید که شب های جمعه برای ماندن در خانه باشد.و حتی اگر به دلیل شرایط فعلی خود نتوانید زمان زیادی را تنها بگذرانید ،  می توانید اطمینان حاصل کنید که زمانی را که با خودتان سپری می کنید  با  کیفیت باشد. به چیزهایی فکر کنید که در واقع باعث می شود شما احساس آرامش  یا خوشحالی یا سرگرمی کنید – شاید به جای پیمایش در تلفن ، کتاب بخوانید یا  پیاده روی کنید – و هر وقت یک دقیقه وقتتان را گرفتید یکی از آن فعالیت ها  را انجام دهید.منبع: Why You Need Alone Time</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Mon, 08 Mar 2021 17:28:15 +0330</pubDate></item><item><title>چگونه یک توسعه دهنده متوسط ​​نباشیم!</title><link>https://virgool.ir/CodeLovers/چگونه-یک-توسعه-دهنده-متوسط-نباشیم-dzxvemeippz3</link><description>کد بیشتری بنویسیداگر می خواهید در کاری بهتر شوید پس باید وقت خود را صرف انجام آن کار  کنید ، متأسفانه راه دیگری وجود ندارد. هر چقدر مقاله بخوانید ، چند بار  داکیومنت ها را بخوانید ، تا زمانی که دست و ذهن خود را عملی نکنید ،  پیشرفت نخواهید کرد. این الگوی طراحی که اجرای آن در آغاز کار دشوار به نظر  می رسید پس از تمرین استفاده از آن در زمینه های مختلف ، مانند خوردن کیک  به نظر می رسد.تست بنویسیدوقتی برای اولین بار شروع به نوشتن تست برای کد خودم کردم ، از دیدن  ذهنیتی کمی که برای نوشتن تست های خوب داشتم متعجب شدم. نوشتن تست ها به  شما امکان می دهد کدهای خود را همانگونه که در ابتدا تصور نمی کردید مشاهده  کنید زیرا هنگام ارائه تست ها باید به این فکر کنید که چگونه ممکن است این  چیز خراب شود و متوجه شوید که در عملکردی که نوشتید کارهای زیادی انجام  داده اید ممکن است بهتر باشد که به چندین تابع تقسیم شود زیرا تهیه تستی  برای عملکردی که چندین کار را انجام می دهد دشوار است.اجازه دهید یک مثال در زیر ببینیم:function postData(data) {&#xA; boolean valid = true;&#xA; // check if data is defined&#xA; if (data === undefined) {&#xA;   valid = false;&#xA; }&#xA;// check if email is well formed&#xA; if (!regex(data[&#39;email&#39;]) {&#xA;   valid = false;&#xA; }&#xA;// check if password is atleast 8 chars.&#xA; if (data[&#39;password&#39;].length &lt; 8) {&#xA;   valid = false;&#xA; }&#xA;if (valid) {&#xA;  http&#xA;   .post(`example.com/user/create`, data)&#xA;   .then((response) =&gt; {&#xA;    //append to the list&#xA;    this.users.append(response.userid);&#xA;   })&#xA;   .catch((error) =&gt; {&#xA;    // show errors.&#xA;   });&#xA; } else {&#xA;   showValidationError();&#xA; }&#xA;}بنابراین روش postDataانجام چندین کار مانند اعتبار سنجی  داده ها ، الحاق به لیست کاربران هنگامی اتمام promise و رسیدگی به خطا ها   است. تست واحد نوشتن برای postDataکاری دشوار و کثیف است. می توانید آن را به چندین متد تقسیم کنید و هر متد را جداگانه تست کنید.function postData(data) {&#xA; return http&#xA;   .post(`example.com/user/create`, data);&#xA;}function validate(data) {&#xA; // check if data is defined&#xA; if (data === undefined) {&#xA;   return false;&#xA; }&#xA;// check if email is well formed&#xA; if (!regex(data[&#39;email&#39;]) {&#xA;   return false;&#xA; }&#xA;return true;&#xA;}function appendUsers(userId) {&#xA;  this.users.append(response.userid);&#xA;}function main() {&#xA; if (validate(data)) {&#xA;  postData(data)&#xA;   .then(data =&gt; appendToList(data.userId))&#xA;   .catch(error =&gt; handleError(error))&#xA; } else {&#xA;  showValidationError();&#xA; }&#xA;}می توانید ببینید که چرا نوشتن تست ها منجر به کد با کیفیت بهتری می شود  ، شما مجبورید روش طولانی خود را به چندین واحد کوچکتر تقسیم کنید و هر  واحد را می توانید به صورت اتمیک تست کنید.صادق باشدرمورد آنچه می دانید و نمی دانید کاملا صادق باشید. وانمود کردن اینکه  از داخل و خارج API می دانید هرگز به شما کمک نمی کند که پیشرفت کنید و اگر  بخواهید حرف احمقانه ای بخاطر عدم آگاهی از API یا موضوعی بیان کنید ،  ممکن است چهره خوب خود را در بحث از دست بدهید.به کدهای متن باز (Open Source) کمک کنیدمشارکت در کدهای متن باز می تواند شما را در معرض سناریوهایی قرار دهد  که ممکن است هرگز در محل کار رخ ندهد و بنابراین افق دید شما را باز می  کند. شما می توانید یاد بگیرید که برای اجرای یک پروژه در یک سناریو توزیع  شده ، معرفی تغییرات بدون شکست و سایر ابزارهای متن باز جدید و غیره ، چه  چیزهایی لازم است ، مزایای آن بی پایان است و همه ما می دانیم که چگونه  منبع آزاد زندگی همه را مستقیم و غیر مستقیم تغییر داده است.برای کمک کردن مشتاق باشیدکمک به دیگران برای چیزی که می دانید شما را به یک شخصی تبدیل میکند  برای آن مفهوم یا ویژگی یا API به سراغتان می آیند و بنابراین ارزش و اهمیت  شما را در ریشه دار می کند. برای کمک به مواردی که شاید در آنها بهترین  نباشید ، ذهنی باز داشته  باشید، ممکن است در نهایت چیز ارزشمندی از این  تجربه یاد بگیرید.یک پروژه شخصی را انتخاب کنیدپروژه های شخصی راهی عالی برای یادگیری چارچوب ها و فن آوری های جدید  است که ممکن است در محل کار تجربه نکنید. با پروژه شخصی خود شما مدیر محصول  هستید ، شما توسعه دهنده و معمار هستید ، بنابراین می توانید میزان تصمیم  گیری را که باید انجام دهید تصور کنید. شما می توانید از تجربه پروژه خود  استفاده کنید و چارچوب ها و ابزارهای جدیدی را در محل کار یا جامعه کاری  خود پیشنهاد دهید و مانند یک ستاره بدرخشید.غرور خود را کم کنیداجازه ندهید نفس شما و عنوان شغلی شما بین راه یادگیری / پیشرفت شما  قرار گیرد. کمتر به چه کسی بودن اهمیت دهید و هر روز بیشتر به آنچه تبدیل  می شوید اهمیت دهید. یک معمار در یک سازمان ممکن است یک توسعه دهنده نرم  افزار در سازمان دیگری باشد. همیشه برای انجام کاری که فکر می کنید در آن  مهارت دارید ، به روش های جدید و متفاوت بیاندیشید. ممکن است الگوریتم  کارآمدتر یا طراحی بهتری برای یک ویژگی را از دست بدهید.در تیم، مثل Kanye نباشید“چرا” را درک کنیدقبل از پذیرش و تحقق باور خود به یک چارچوب یا الگوی جدید یا API ، سعی  کنید در وهله اول درک کنید که “چرا” وجود دارد. سعی کنید به شهود وجود یک  مفهوم برسید.var app = new Vue ({ &#xA;  el: &#39;#app&#39;، &#xA;  data: { &#xA;    message: &#39;Hello Vue!&#39; &#xA;  } &#xA;})در بالا اولین نمونه کدی است که در قسمت docs سایت vue.js با آن روبرو می شوید . حتی وقتی به این مثال بسیار اساسی نگاه می کنم ، سعی می کنم موارد زیر را در ذهنم استدلال کنم:چرا یک کلمه کلیدب new برای ایجاد componeny؟ چرا آنها الگوی کارخانه ای برای ایجاد اشیا ندارند؟به نظر می رسد elخاصیت idعنصر را می گیرد و چرا از # استفاده می کند؟ آیا این بدان معنی است که می توانم انتخابگرهای عناصر دیگری مانند ویژگی و کلاس را نیز اضافه کنم؟dataبه نظر می رسد یک نام خاص بسیار عمومی از آن شی vueباشد ، دقیقاً سعی در نشان دادن چه چیزی دارد؟تنبل نباشتنبلی می تواند برای نشان دادن مهارت های شما یا چیزهایی که برای شما  مهم هست، پیش بیاید. به عنوان مثال اگر فکر می کنید یک عامل عملکرد را  بهبود می بخشد ، پس ادامه دهید و آن کار را انجام دهید ، برای صرفه جویی در  وقت سایر توسعه دهندگان ، نظرات خود را اضافه کنید ، API جدیدی را که  ساخته اید مستند کنید . زمان اضافه شده توسط شما در کد شما برابر با زمان  صرفه جویی شده برای توسعه دهنده دیگری است که سعی در نوشتن مطالب شما دارد.چالش های کدنویسی را حل کنیدبرنامه نویسی شما را مجبور می کند به چیزهایی فکر کنید که در زندگی  روزمره خود فرض می کنیم. من در مورد پیچیدگی مکان و زمان کد صحبت می کنم.  برخی از افراد استدلال می کنند که حل چالش ها عملی نیست زیرا بیشتر موارد  انتزاعی است و شما فقط می خواهید از API استفاده کنید.اما من مخالفم! نه تنها به شما کمک می کند تا به بررسی انتقادی کد  بپردازید بلکه با اطمینان می توانید بهترین کد ممکن را از نظر عملکرد ارائه  دهید و از دیگر مزایای آن این است که همیشه برای مصاحبه آماده خواهید بود …برخی از سایت ها برای حل چالش ها hackerrank ، leetcode ، topcoder و spoj .موارد خوب را تشویق کنیداگر از تعهد همکار خود خوشتان آمده است ، دریغ نکنید که پیامی را  بگذارید و پاسخی را که به شما کمک کرده است تحسین کنید، یا برای مقاله ای  در مورد رسانه ای که به شما به رایگان تفکر جدیدی می دهد یا آن پروژه جالب  را که در github بررسی کرده اید، کف بزنید. تشویق دیگران کمک می کند تا  آنها و در نهایت شما بهترین نتیجه را به دست آورید.پشت دیوار پنهان نشویدمشکلی در مورد API پیدا کردید که شما که در حال استفاده از آن هستید نمی  توانید آن را برطرف کنید زیرا “یک توسعه دهنده Frontend” هستید. اصول  اساسی برنامه نویسی از جمله DRY(Don’t Repeat Yourself) ، استفاده از انتزاع در صورت مشاهده  موارد با استفاده متعدد برای کلاس های خود ، گرفتن موارد استثنا در تمام  مسیرهای کنترل جریان و غیره تقریباً در هر لایه از پشته اعمال می شود. با  رعایت اصول اساسی ، این امر به شما کمک می کند مسائلی را حل کنید که فکر می  کنید نمی توانید زیرا در آن قسمت از کد کار نمی کنید.نتیجه گیری: خواندن این راهنما به شما  کمک می کند تا کارهایی را که هنوز انجام نداده اید درک کنید ، اما برای  ایجاد تفاوت باید تلاش کنید و نظم داشته باشید…منبع: How not to be a mediocre developer!</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Mon, 01 Mar 2021 14:45:53 +0330</pubDate></item><item><title>ارکان اصلی یادگیری برنامه نویسی – و چرا مبتدیان باید بر آنها تسلط داشته باشند</title><link>https://virgool.ir/coderlife/ارکان-اصلی-یادگیری-برنامه-نویسی-و-چرا-مبتدیان-باید-بر-آنها-تسلط-داشته-باشند-lqtmtjdnmuev</link><description>من بیش از 20 سال است که برنامه نویسی می کنم. در این مدت ، من لذت کار  با بسیاری از افراد را داشته ام و چیزهای زیادی از آنها آموخته ام. من  همچنین با دانشجویان زیادی کار کرده ام که تازه از دانشگاه آمده اند و باید  نقش معلم یا مربی آنها را داشته باشم.اخیراً ، من به عنوان مربی در برنامه ای شرکت کرده ام که کدنویسی را برای مبتدیان آموزش می دهد.یادگیری نحوه برنامه نویسی سخت است. من اغلب متوجه می شوم که دوره های  دانشگاهی و بوت کمپ جنبه های مهم برنامه نویسی را در نظر نمی گیرند و  رویکردهای ضعیفی برای آموزش تازه کارها دارند.من می خواهم پنج ستون اساسی را به اشتراک بگذارم که معتقدم یک دوره  برنامه نویسی موفق باید بر پایه آن بنا شود. مثل همیشه ، من به زمینه  برنامه های اصلی وب می پردازم.هدف یک تازه کار تسلط بر اصول برنامه نویسی و درک اهمیت کتابخانه ها و چارچوب ها است.مباحث پیشرفته مانند ابر(Cloud) ، عملیات به طور کلی یا ابزار ساخت  نباید بخشی از برنامه درسی باشد. من در مورد Design Pattern ها نیز تردید  دارم. آنها تجربه ای را تصور می کنند که افراد مبتدی هرگز تجربه نمی کنند.بنابراین بیایید بررسی کنیم که برنامه نویسان جدید از کجا باید شروع کنند.توسعه آزمون محور TDD (Test Driven Development)TDD مزایای زیادی به همراه دارد . متأسفانه ، این یک موضوعی پیشرفته است که مبتدیان برای آن کاملاً آماده نیستند.مبتدیان نباید آزمون بنویسند. این برای سطح مهارتهای اساسی آنها بسیار  زیاد است. در عوض ، آنها باید یاد بگیرند که چگونه از آزمون ها استفاده  کنند و با آنها کار کنند.هر دوره برنامه نویسی باید حول تمرینات باشد. من تمریناتم را با  آزمونهای واحدی گسترش می دهم و محیطی را برای دانش آموزان فراهم می کنم که  از قبل برای اجرای آن تست ها آماده شده است.تنها کاری که دانش آموزان باید انجام دهند این است که کد خود را بنویسند  و سپس ببینند چراغ تستر از قرمز به سبز تبدیل می شود. گیمیفیکیشن حاوی یک  اثر جانبی خوب است.به عنوان مثال: اگر فناوری انتخاب شده Spring باشد ، من تمرینات و تست  های یک پروژه Spring را ارائه می دهم. دانش آموزان نیازی به دانستن چیزی در  مورد Sprint ندارند. تنها چیزی که باید بدانند محل تمرینات و دکمه شروع  تست ها است.علاوه بر این ، دانش آموزان باید نحوه استفاده از دیباگر را بدانند.  توانایی تجزیه و تحلیل کد در زمان اجرا و داشتن زمین بازی برای آزمایشات  کوچک در TDD ضروری است.نکته اصلی این است که اطمینان حاصل کنید دانش آموزان پس از کسب مهارتهای  اصلی برنامه نویسی ، نیازی به یادگیری رفتارهای اساسی TDD ندارند. تغییر  عادت بعداً در دانش آموزان بسیار دشوارتر از یادگیری این عادت ها در حال  حاضر است. به همین دلیل آنها باید با تست زندگی کنند و نفس بکشند.بعداً در زندگی حرفه ای خود ، آنها باید برای پروژه های بدون آزمایش  واحد ضد درد داشته باشند. آنها باید بصورت شهودی فقدان آزمونهای واحد را یک  ضد الگو ببینند.اصول اولیهمن اغلب می شنوم که تازه کارها باید بلافاصله با یک چارچوب (Framework)  شروع کنند. این مانند این است که با قرار دادن آنها در اتومبیل رالی ، نحوه  رانندگی را آموزش دهید و از آنها بخواهید از زیاده روی نکنند. این به  سادگی این واقعیت را نادیده می گیرد که آنها هنوز هم ترمز را با گاز اشتباه  می گیرند.وقتی دانش آموزان کار را با چارچوبی مانند Angular شروع می کنیم ، همین  مورد وجود دارد. مبتدیان باید ابتدا اصول برنامه نویسی را درک کنند. آنها  باید با عناصر اساسی و معنای نوشتن کد قبل از اینکه از آنها استفاده کنند ،  آشنا باشند.مفهوم یک تابع ، یک متغیر ، یک شرط و یک حلقه برای تازه کارها کاملاً  بیگانه است. این چهار عنصر پایه های برنامه نویسی را ایجاد می کنند. هر  چیزی که یک برنامه از آن ساخته شده به آنها متکی است.دانش آموزان برای اولین بار این مفاهیم را می شنوند ، اما مهارت در دانش  آموزان برای آنها بسیار مهم است. اگر دانش آموزان به اصول مسلط نشوند ، هر  آنچه که در ادامه می آید به نظر جادویی می آید و منجر به سردرگمی و  سرخوردگی می شود.معلمان باید وقت بیشتری را برای این اصول صرف کنند.  اما متاسفانه بسیاری از افراد خیلی زود حرکت می کنند. مشکل این است که برخی  از معلمان تلاش می کنند تا خود را در نقش یک دانش آموز قرار دهند. آنها  مدتهاست که برنامه نویسی می کنند و فراموش کرده اند که یک مبتدی با چه نوع  مشکلاتی روبرو است. کاملاً شبیه راننده رالی حرفه ای است. او نمی تواند  تصور کند که کسی باید قبل از ترمز فکر کند. او فقط این کار را به صورت  خودکار انجام می دهد.من تمریناتم را طوری طراحی می کنم که با استفاده از ترکیبی از چهار عنصر اصلی ، چالش برانگیز اما قابل حل در مدت زمان معقولی باشند.یک مثال خوب مبدل اعداد رومی و عربی است. این چالش نیاز به صبر و  شکیبایی دانشجویان دارد. هنگامی که آنها با موفقیت چهار عنصر را برای حل  چالش به کار گرفتند ، انگیزه زیادی نیز کسب می کنند.اصول مهم است. تا زمان حل و فصل آنها پیش نروید.کتابخانه ها و چارچوب هادانش آموزان پس از اینکه زمان زیادی را برای کدنویسی صرف کردند ، باید  یاد بگیرند که بیشتر کدها از قبل به صورت کتابخانه یا چارچوب وجود دارد.  این بیشتر یک ذهنیت است تا یک الگو.توسعه دهندگان مدرن کتابخانه های درست را می شناسند و انتخاب می کنند. آنها ساعتها وقت خود را صرف نوشتن نسخه باگ دار نمی کنند.برای موفقیت در این انتقال ذهنی ، باید مثالهای مربوط به “مرحله اصول”  را با استفاده از کتابخانه های معروف مانند Moment.js ، Jackson ، Lodash  یا Apache Commons حل کرد.به این ترتیب دانش آموزان بلافاصله ارزش کتابخانه ها را درک می کنند.  آنها خود را با آن مشکلات پیچیده درگیر کرده اند. اکنون آنها دریافتند که  کتابخانه، مسئله را در کمترین زمان حل می کند.وقتی نوبت به چارچوب می رسد ، دانش آموزان پس از درک مفید بودن کتابخانه ها ، در درک اهمیت مشکلی نخواهند داشت.بسته به بازه زمانی دوره ، ممکن است سخت باشد که زمانی را به چارچوب ها  اختصاص دهیم. اما همانطور که قبلاً اشاره کردم ، مهمترین جنبه تغییر ذهنیت  دانشجو به سمت برنامه ریزی همه چیز از ابتدا به کاوش و استفاده از کتابخانه  ها است.من ابزاری به این ستون اضافه نکردم ، زیرا این ابزارها فقط برای توسعه  دهندگان باتجربه کاربرد دارند. در این مرحله اولیه ، دانش آموزان نیازی به  یادگیری نحوه ادغام و پیکربندی ابزارها ندارند.استاد و شاگرددر اوایل 20 سالگی من می خواستم پیانو نواختن را یاد بگیرم. من معلمی  نمی خواستم و فکر می کردم خودم می توانم آن را یاد بگیرم. پنج سال بعد ، من  با یک معلم خصوصی حرفه ای مشورت کردم. خوب چه می توانم بگویم؟ من در مدت 1  ماه بیشتر از پنج سال قبل یاد گرفته ام.معلم پیانوی من به اشتباهاتی در نواختن من اشاره کرد که من نمی توانم  آنها را بشنوم و مرا از چیزهای تفسیری که هرگز تصور نمی کردم آگاه کرد. از  این گذشته ، او ذهنیت موسیقی و هنر را در من ایجاد کرد که هر دو برای من  بعنوان یک فرد فنی دور از دسترس نبود.در برنامه نویسی هم همین طور است. اگر کسی تجربه ای در برنامه نویسی  ندارد ، خودآموزی می تواند ایده بدی باشد. اگرچه داستان های موفقیت زیادی  وجود دارد ، اما من کارآیی انجام این کار را به تنهایی زیر سوال می برم.در عوض ، باید یک رابطه “استاد و شاگرد” وجود داشته باشد. در ابتدا ،  استاد قوانینی را می دهد که شاگرد باید دنبال کند – کورکورانه! استاد ممکن  است قوانين را توضيح دهد ، اما معمولاً استدلال فراتر از درک دانش آموز  است.این قوانین داخلی یک نوع شبکه ایمنی را تشکیل می دهند. اگر فردی گم شود ، همیشه مقداری فضای امن برای بازگشت وجود دارد.تدریس نباید مونولوگ باشد. استاد باید با هر دانش آموز جداگانه برخورد  کند. وی باید نحوه کار دانش آموزان را بررسی کند ، مشاوره دهد و سرعت دوره  را با پیشرفت آنها تطبیق دهد.هنگامی که کارآموزان به سطح خاصی از تسلط رسیدند ، باید آنها را تشویق  کرد تا قلمرو جدیدی را کشف کنند. استاد به مربی تبدیل می شود که دارای  “خرد” است و برای بحث آزاد است.چالش و انگیزه“بیایید یک کپی فیس بوک ایجاد کنیم!” این از جانب یک مدیرعامل با  پشتیبانی انبوهی از توسعه دهندگان ارشد نرم افزار و بودجه چند میلیون  یورویی نیست. این یک تمرین از یک دوره مقدماتی برای برنامه نویسی است! چنین  اقدامی عملاً غیرممکن است. حتی بدتر از آن ، دانش آموزان در سرزمین عجایب  قرار می گیرند و با خیال راحت باور می کنند که مهارت هایی دارند که واقعاً  از توان آنها خارج است.بدون شک معلم از این مسئله آگاه است ، اما به دلایل انگیزشی چنین تمریناتی را ایجاد می کند.هدف اصلی یک تمرین سرگرمی نیست. این روش باید حول یک تکنیک خاص ایجاد شود و باید به دانش آموزان در درک این روش کمک کند.انگیزه خوب است ، اما فدای محتوا نیست. برنامه نویسی آسان نیست. اگر  دانش آموزان انگیزه ذاتی ندارند ، کدنویسی راهی برای ادامه کار نیست.تازه کارها باید معنای یک توسعه دهنده حرفه ای بودن را بدانند. آنها قبل  از اینکه ساعت ها سرمایه گذاری کنند ، باید بدانند که چه در انتظار آنها  است.به عنوان مثال ، بسیاری از برنامه های تجاری در اطراف فرم ها و شبکه های  پیچیده قرار دارند. ایجاد این مهارت مهم است که تمرینات می توانند به شما  منتقل کنند. ساختن برنامه ای مشابه فیس بوک ممکن است بهترین درس برای  یادگیری سریع دانشجویان نباشد.به همین ترتیب ، ممکن است یک غیر برنامه نویس از تعداد کمی کد که یک  توسعه دهنده در روز می نویسد ، متعجب شود. حتی مواقعی وجود دارد که کد را  حذف می کنیم یا به هیچ نتیجه ای نمی رسیم.چرا؟ چون اوضاع همیشه اشتباه است. ما ساعتهای بی پایان را صرف رفع  اشکالات بسیار عجیب و غریب می کنیم که به نظر می رسد یک اشتباه تایپی ساده  است. فقط ممکن است برخی از ابزارها به این دلیل کار نکنند که کتابخانه نسخه  جدید مقداری آن را ارتقا داده است. یا اینکه سیستم خراب می شود زیرا کسی  فراموش کرده است که پرونده ای را به git اضافه کند. این لیست میتواند ادامه  پیدا کند.دانش آموزان باید از این تجربیات لذت ببرند. تمرینی که یک کتابخانه  ناشناخته را تحت فشار زمان، هدف قرار می دهد ، ممکن است دقیقاً کار درستی  باشد. ؛)خورشید همیشه در زندگی واقعی در حال درخشش نیست. افراد مبتدی باید برای واقعیت برنامه نویسی کاملاً آماده باشند.توصیه نهاییآخرین اما نه کمترین: در دو هفته ، دو ماه یا حتی یک سال نمی توان به یک برنامه نویس حرفه ای تبدیل شد. این زمان و حوصله میبره.مربیان نباید عجله کنند و یا قول های دروغ بدهند. آنها باید بر این نکته  تمرکز کنند که آیا دانش آموزان مفاهیم را می فهمند یا خیلی سریع حرکت نمی  کنند.منبع: freeCodeCamp</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Sun, 28 Feb 2021 12:07:51 +0330</pubDate></item><item><title>اشتباهات برنامه نویسان مبتدی</title><link>https://virgool.ir/CodeLovers/اشتباهات-برنامه-نویسان-مبتدی-v3fdg5u78ipy</link><description>بعد از بررسی کارهایی که هنگام یادگیری برنامه نویسی نباید انجام دهید،  بیایید در مورد اشتباهاتی که معمولاً برنامه نویسان مبتدی مرتکب می شوند  صحبت کنیم اما بگذارید ابتدا یک نکته را روشن کنم. اگر شما یک برنامه نویس  مبتدی هستید ، این بدان معنا نیست که شما نسبت به اشتباهاتی که ممکن است  مرتکب شوید ، احساس بدی پیدا کنید بلکه به این دلیل است که شما را از آنها  آگاه می کند ، به شما یاد می دهد نشانه هایی از آنها را تشخیص داده و به  شما یادآوری می کند که از آنها اجتناب کنید.من در گذشته بسیاری از این اشتباهات را مرتکب شده ام. این نحوه یادگیری  کار خوب است. اگر امروز این اشتباهات را می کنید احساس بدی نداشته باشید.  فقط یاد بگیرید که چرا آنها در اینجا به عنوان اشتباه طبقه بندی شده اند.  خوشحالم که عادت های کد نویسی را برای کمک به پرهیز از آنها ایجاد کرده ام.  شما نیز باید این کار را انجام دهید.*اشتباهات در اینجا به ترتیب خاصی ارائه نشده اند.نوشتن کد بدون برنامه ریزیمحتوای با کیفیت بالا به راحتی ایجاد نمی شود. نیاز به تفکر و تحقیق  دقیق دارد. برنامه های با کیفیت بالا نیز از این قاعده مستثنی نیستند.نوشتن برنامه های با کیفیت، فرایندی با یک جریان است:تفکر. پژوهش. طرح. نوشتن. تایید اعتبار. اصلاح .متأسفانه ، اختصار خوبی برای این کار وجود ندارد. شما نیاز دارید تا مقدار مناسب از این فعالیت ها راانجام دهید.یکی از بزرگترین اشتباهاتی که برنامه نویسان مبتدی مرتکب می شوند این  است که بلافاصله بدون تأمل و تحقیق زیاد شروع به نوشتن کد می کنند. اگرچه  این ممکن است برای یک برنامه مستقل کوچک کارساز باشد ، اما تأثیر منفی  زیادی روی برنامه های بزرگتر دارد.درست مثل اینکه قبل از گفتن هر چیزی که ممکن است پشیمان شوید باید فکر  کنید ، قبل از رمزگذاری هر چیزی که ممکن است پشیمان شوید باید فکر کنید.  همچنین کد نویسی راهی برای برقراری ارتباط با افکار شماست.هنگام عصبانیت، قبل از صحبت کردن، تا 10 بشمارید، اگر خیلی عصبانی هستید، تا 100توماس جفرسونتوصیه های جفرسون در مورد کدگذاری نیز صدق می کند:هنگام بازبینی کد، قبل از بازنویسی یک خط، تا 10 بشمارید، اگر کد، تست ندارد تا 100سامر بونابرنامه نویسی بیشتر مربوط به خواندن کد قبلی ، تحقیق در مورد نیاز و  چگونگی انطباق آن با سیستم فعلی و برنامه ریزی برای نوشتن ویژگی ها با  مراحل کوچک و قابل آزمایش است. نوشتن واقعی خطوط کد احتمالاً فقط 10٪ از کل  مراحل است.به برنامه نویسی به عنوان نوشتن خطوط کد فکر نکنید. برنامه نویسی یک  خلاقیت مبتنی بر منطق است که نیاز به پرورش دارد.برنامه ریزی خیلی زیاد قبل  از نوشتن کدبرنامه ریزی خیلی زیاد قبل از نوشتن کدبله. برنامه ریزی قبل از ورود به کد چیز خوبی است ، اما حتی کارهای خیلی  زیاد هم می تواند به شما آسیب برساند. بیش از حد آب سالم ممکن است شما را  مسموم کند.به دنبال یک برنامه کامل نباشید. که در دنیای برنامه نویسی وجود ندارد.  به دنبال یک برنامه به اندازه کافی خوب باشید ، چیزی که می توانید برای  شروع استفاده کنید. حقیقت این است که ، برنامه شما تغییر خواهد کرد ، اما  آنچه برای آن خوب است، مجبور کردن شما در ساختاری است که منجر به وضوح  بیشتری در کد شما شود. برنامه ریزی زیاد صرفاً اتلاف وقت شماست.من فقط در مورد برنامه ریزی ویژگی های کوچک صحبت می کنم. برنامه ریزی  همه ویژگی ها در یک زمان باید غیرقانونی اعلام شود! این همان چیزی است که  ما آن را Waterfall Approach می نامیم ، که یک طرح خطی سیستم با مراحل مشخص  است که باید یکی یکی به پایان برسد. می توانید تصور کنید که این رویکرد  چقدر به برنامه ریزی نیاز دارد. این نوع برنامه ریزی ای نیست که من در  اینجا صحبت می کنم. رویکرد آبشار کار نمی کند. هر چیز پیچیده ای فقط با  سازگاری چابک با واقعیت قابل پیاده سازی است.نوشتن برنامه ها باید یک فعالیت پاسخگو باشد. شما ویژگی هایی را اضافه  خواهید کرد که هرگز در یک طرح آبشار به آن فکر نمی کنید. به دلایلی که هرگز  در یک طرح آبشار در نظر نگرفته اید ، ویژگی ها را حذف خواهید کرد. شما  باید اشکالات را برطرف کرده و با تغییرات سازگار شوید. شما باید چابک  باشید.با این حال ، همیشه چندین ویژگی بعدی خود را برنامه ریزی کنید. این کار  را با دقت انجام دهید زیرا برنامه ریزی کم و برنامه ریزی زیاد می تواند به  کیفیت کد شما آسیب برساند. کیفیت کد شما چیزی نیست که بتوانید آن را به خطر  بیندازید.دست کم گرفتن اهمیت کیفیت کداگر فقط می توانید روی یک جنبه از کدی که می نویسید تمرکز کنید ، باید  خوانایی آن باشد. کد کثیف حذف می شود. حتی قابل بازیافت هم نیست.هرگز اهمیت کیفیت کد را دست کم نگیرید. به کدنویسی به عنوان راهی برای  برقراری ارتباط با پیاده سازی ها نگاه کنید. وظیفه اصلی شما به عنوان یک  کدنویس این است که پیاده سازی راه حل هایی را که کار می کنید به روشنی  ایجاد کنید.یکی از نقل قول های مورد علاقه من در مورد برنامه نویسی این است:همیشه طوریکد بنویسید که گویا شخصی که در نهایت کد شما را نگهداری می کند یک روانی خشن است که می داند کجا زندگی می کنید.جان وودزنصیحت درخشان جان!حتی چیزهای کوچک هم مهم هستند. به عنوان مثال ، اگر با تورفتگی و حروف  بزرگ مطابقت ندارید ، به سادگی باید مجوز کد نویسی خود را از دست بدهید.tHIS is&#xA;  WAY MORE important&#xA;than&#xA;            you thinkنکته ساده دیگر استفاده از خطوط طولانی است. خواندن هر چیزی فراتر از 80  کاراکتر بسیار دشوار است. ممکن است وسوسه شوید برخی از شرایط طولانی را در  همان خط قرار دهید تا یک بلاک if-statement بیشتر دیده شود. این کار را  نکنید. فقط هرگز از حد مجاز 80 کاراکتر عبور نکنید.بسیاری از مشکلات ساده مانند اینها با استفاده از ابزارهای قالب بندی به  راحتی برطرف می شوند. در JavaScript ، ما دو ابزار عالی داریم که کاملاً  با هم کار می کنند: ESLint و Prettier. به خود لطف کنید و همیشه از آنها استفاده کنید.در اینجا چند اشتباه دیگر مربوط به کیفیت کد وجود دارد:استفاده از خطوط زیادی در یک تابع یا یک فایل. شما همیشه باید کد  طولانی را به قطعات کوچکتر تقسیم کنید که می توانند جداگانه آزمایش و  مدیریت شوند. هر تابعی که بیش از 10 خط داشته باشد خیلی طولانی است.استفاده  از نام متغیرهای کوتاه ، عمومی یا مبتنی بر نوع. به متغیرهای خود اسامی  توصیفی و غیر مبهمی بدهید. در علوم کامپیوتر فقط دو چیز سخت وجود دارد:  باطل کردن حافظه پنهان و نامگذاری موارد. – فیل کارلتوناگر می خواهید منطقی بنویسید که به یک رشته یا عدد ابتدایی بستگی دارد ، آن مقدار را در یک ثابت قرار دهید و نام خوبی به آن بدهید.const answerToLifeTheUniverseAndEverething = 42;برای جلوگیری از صرف وقت بیشتر درمورد مشکلات ساده ، از میانبرهای  استفاده کنید. در اطراف مشکلات نرقصید. با واقعیت های خود روبرو شوید.فکر  اینکه کد طولانی تر بهتر است. کد کوتاه در اکثر موارد بهتر است. نسخه های  طولانی تر را فقط در صورت خواندن کد بیشتر بنویسید. به عنوان مثال ، از  عبارات یک خطه و سه تایی تو در تو فقط برای کوتاه نگه داشتن کد استفاده  نکنید ، اما همچنین در صورت عدم نیاز به کد ، آن را عمداً طولانی نکنید.  حذف کد غیرضروری بهترین کاری است که می توانید در هر برنامه ای انجام دهید.اندازه گیری پیشرفت برنامه نویسی توسط خطوط کد مانند اندازه گیری پیشرفت ساختن هواپیما بر اساس وزن است.بیل گیتساستفاده بیش از حد از شرط. بیشتر آنچه فکر می کنید نیاز به منطق  مشروط دارد بدون آن محقق می شود. همه گزینه ها را در نظر بگیرید و منحصراً  بر اساس خوانایی انتخاب کنید. برای عملکرد بهتر، کد را بهینه نکنید ، مگر  اینکه بتوانید آن را اندازه گیری کنید. مرتبط: از شرایط و وظایف یودا در  شرط ها اجتناب کنید.انتخاب اولین راه حلاین نشانه ظریف یک تازه وارد واقعی است. آنها با مشكلی روبرو می شوند ،  راه حلی پیدا می كنند و فقط با آن كار می كنند. آنها بلافاصله قبل از اینکه  به پیچیدگی ها و شکست های احتمالی راه حل شناسایی شده فکر کنند ، سریعاً  در اجرای آن عجله می کنند.اگرچه ممکن است راه حل اول وسوسه انگیز باشد ، اما راه حل های خوب  معمولا زمانی کشف می شوند که همه راه حل هایی که پیدا کرده اید را بررسی  کنید. اگر نمی توانید به چندین راه حل برای یک مسئله فکر کنید ، این  احتمالاً نشانه این است که کاملاً مسئله را درک نمی کنید.وظیفه شما به عنوان یک برنامه نویس حرفه ای یافتن راه حل برای مشکل  نیست. یافتن ساده ترین راه حل برای مسئله است. منظور من از “ساده” این است  که راه حل باید به درستی کار کند و عملکرد کافی را داشته باشد اما هنوز  برای خواندن ، درک و حفظ آن به اندازه کافی ساده باشد.برای طراحی نرم  افزار دو روش وجود دارد. یک راه ساده سازی آن به قدری است که بدیهی است هیچ  کمبودی وجود ندارد و راه دیگر پیچیدگی آن به حدی است که هیچ نقص واضحی  وجود ندارد.CAR Hoareترک نکردناشتباه دیگری که افراد تازه وارد مرتکب می شوند ، پایبند بودن به اولین  راه حل است حتی پس از اینکه تشخیص دادند که این ممکن است بهترین روش نباشد.  این احتمالاً از نظر روانشناختی با ذهنیت ” ترک نشدن ” مرتبط  است. این ذهنیت خوبی است که در بیشتر فعالیت ها وجود دارد ، اما نباید در  برنامه نویسی اعمال شود. در حقیقت ، وقتی نوبت به نوشتن برنامه می رسد ،  ذهنیت درست زود شکست می خورد و غالباً شکست می خورد .لحظه ای که شک به راه حل دارید ، باید آن را دور بیندازید و دوباره به  مسئله فکر کنید. این مهم نیست هر چقدر در آن راه حل سرمایه گذاری کرده  باشید. ابزارهای کنترل منبع مانند GIT می توانند به شما کمک کنند تا راه  حلهای مختلف را منشعب کرده و آزمایش کنید. به دلیل تلاش زیادی که برای  انجام آن داشتید، به کد وابسته نشوید. کد بد باید کنار گذاشته شود.جستجو نکردنموارد بسیاری وجود داشته است که وقتی باید فقط در مورد آن تحقیق می کردم وقت گرانبهایی را برای تلاش برای حل مشکل از دست می دادم.مگر اینکه از یک فناوری پیشرفته استفاده کنید ، وقتی به مشکلی برخوردید ،  احتمال دارد شخص دیگری با همان مشکل روبرو شود و راه حلی برای آن پیدا  کند. در وقت خود صرفه جویی کنید و ابتدا آن را Google کنید .گاهی اوقات ، جشتجو فاش می کند که آنچه شما فکر می کنید یک مشکل است ،  واقعاً نیست ، و آنچه شما باید انجام دهید این نیست که آن را برطرف کنید  بلکه بیشتر آن را بپذیرید. تصور نکنید که همه چیز که برای انتخاب راه حل  برای یک مشکل لازم است را می دانید. گوگل شما را غافلگیر خواهد کرد.با این حال ، نشانه دیگری از یک تازه وارد کپی کردن و استفاده از کد  بدون درک آن است. گرچه ممکن است آن کد به درستی مشکل شما را حل کند ، اما  شما هرگز نباید از خط کدهایی که کاملاً درک نمی کنید استفاده کنید. اگر می  خواهید یک کدنویس خلاق باشید ، هرگز فکر نکنید که می دانید چه کاری انجام  می دهید.خطرناک ترین فکری که می توانید به عنوان یک فرد خلاق داشته باشید این است که فکر کنید می دانید چه کاری انجام می دهید.برت ویکتوراستفاده نکردن از Encapsulationاین نکته در مورد استفاده از الگوی شی گرا نیست. استفاده از مفهوم کپسول  سازی همیشه مفید است. عدم استفاده از کپسول سازی اغلب منجر به سختی  نگهداری سیستم می شود.یک ویژگی باید فقط یک مکان در کد داشته باشد که آن را مدیریت کند. این  معمولاً به عهده یک شی است. آن شی فقط باید موارد ضروری را برای سایر اشیا  برنامه برای استفاده از آن نشان دهد. این در مورد رازداری نیست بلکه بیشتر  در مورد مفهوم کاهش وابستگی بین قسمتهای مختلف یک برنامه است. رعایت این  قوانین به شما امکان می دهد بدون نگرانی از خراب کردن برنامه در مقیاس  بزرگتر ، در کلاسهای داخلی ، اشیا، و عملکردهای خود با خیال راحت تغییراتی  ایجاد کنید.واحدهای مفهومی منطقی و محلی باید کلاسهای خاص خود را بدست آورند. منظور  من از کلاس الگوی طرح است. این می تواند یک شی کلاس واقعی یا یک شی عملکرد  باشد. همچنین ممکن است آن را به عنوان یک ماژول یا یک بسته معرفی کنید.در یک کلاس منطقی ، وظایف مستقل باید روش های خاص خود را بدست آورند.  روش ها باید یک کار انجام دهند و آن کار را به خوبی انجام دهند. کلاسهای  مشابه باید از نامهای یکسانی استفاده کنند.تازه کارها معمولاً غریزه راه اندازی کلاس جدیدی برای یک واحد مفهومی را  ندارند و نمی توانند آنچه را که می تواند مستقل باشد ، شناسایی کنند. اگر  کلاس Util را مشاهده کردید که به عنوان محل تخلیه بسیاری از مواردی که به  هم تعلق ندارند استفاده شده است ، این نشانه کد جدید است. اگر یک تغییر  ساده ایجاد کنید و سپس متوجه شوید که این تغییر یک اثر آبشاری دارد و شما  باید تغییرات زیادی را در جای دیگر انجام دهید ، این نشانه دیگری از کد  جدید است.قبل از افزودن متدی به کلاس یا افزودن مسئولیت های بیشتر به متدی ، فکر  کنید و غرایز خود را زیر سوال ببرید. شما اینجا وقت نیاز دارید. جست و خیز  نکنید و فکر نکنید بعداً آن را ریفکتور می کنید. فقط اولین بار این کار را  درست انجام دهید.ایده اصلی در اینجا این است که شما می خواهید کد شما دارای انسجام بالا و  کوپلینگ پایین باشد ، که فقط یک اصطلاح فانتزی است که به معنی نگه داشتن  کد مربوطه با هم (در یک کلاس) و کاهش وابستگی بین طبقات مختلف است.برنامه ریزی برای ناشناختهاغلب فکر کردن فراتر از راه حلی که می نویسید وسوسه انگیز است. هر نوع  شکی با هر خط کدی که می نویسید به ذهن شما خطور می کند. این یک مورد خوب  برای آزمایش موارد ظریف است ، اما استفاده از آن به عنوان یک محرک برای  نیازهای احتمالی کاملاً اشتباه است.شما باید مشخص کنید که چه مواردی متعلق به کدام یک از این دو دسته اصلی  است. کدی را ننویسید که امروز به آن نیازی ندارید. برای آینده نامعلوم  برنامه ریزی نکنید.نوشتن یک ویژگی به این دلیل که فکر می کنید ممکن است در آینده به آن نیاز داشته باشید کاملاً اشتباه است. انجامش ندهید.همیشه حداقل کدی را که امروز برای راه حلی که در حال اجرا هستید ،  بنویسید. موارد خاص را کنترل کنید ، مطمئناً ، اما ویژگی های خاص را اضافه  نکنید.رشد به خاطر رشد ، ایدئولوژی سلول سرطانی است.ادوارد ابیاستفاده نکردن از ساختارهای داده مناسبهنگام آماده شدن برای مصاحبه ، برنامه نویسان مبتدی معمولاً بیش از حد  روی الگوریتم ها تمرکز می کنند. خوب است که الگوریتم های خوب را شناسایی  کنید و در صورت لزوم از آنها استفاده کنید ، اما به خاطر سپردن آنها هرگز  به نبوغ برنامه نویسی شما کمک نمی دهد.با این حال ، به خاطر سپردن نقاط قوت و ضعف ساختارهای مختلف داده ای که  می توانید در زبان خود استفاده کنید ، از شما توسعه دهنده بهتری خواهد  ساخت.استفاده از ساختار داده اشتباه یک علامت بیلبورد بزرگ و به شدت روشن است که کد جدید را در اینجا فریاد می زند.قصد نداریم اینجا به شما ساختار دادها را بیاموزیم، اما بگذارید چند مثال سریع ذکر کنم:مثال: استفاده از لیست (آرایه ها) به جای Map(اشیا)رایج ترین اشتباه ساختار داده ها احتمالاً استفاده از لیست ها به جای  map برای مدیریت لیستی از سوابق است. بله ، برای مدیریت لیست سوابق باید از  MAP استفاده کنید.به عنوان مثال ، در جاوا اسکریپت ، متداول ترین ساختار لیست ، یک آرایه و  رایج ترین ساختار map، یک شی است (در جاوا اسکریپت مدرن نیز یک ساختار  نقشه وجود دارد).استفاده از لیست ها روی mapها اغلب اشتباه است. اگرچه این نکته فقط در  مورد مجموعه های بزرگ صدق می کند ، اما من می گویم همیشه به آن پایبند  باشید. موارد مشخصی وجود ندارد که لیست ها می توانند گزینه بهتری نسبت به  map باشند و این موارد در زبان های مدرن در حال از بین رفتن است. فقط از  mapها استفاده کنید.دلیل اصلی این مهم این است که دسترسی به عناصر در map بسیار سریعتر از  دسترسی به عناصر در لیست است. دستیابی به عناصر کاری است که شما مرتباً  انجام می دهید.قبلاً لیست ها مهم بودند زیرا ترتیب عناصر را تضمین می کنند. با این حال ، ساختارهای map مدرن نیز می توانند این کار را انجام دهند.مثال: عدم استفاده از پشته هاهنگام نوشتن هر کدی که به نوعی بازگشت نیاز دارد ، فقط استفاده از مفهوم  بازگشت بسیار آسان است. با این حال ، بهینه سازی کد بازگشتی به خصوص در  محیط های تک رشته ای معمولاً دشوار است.بهینه سازی کد بازگشتی به عملکردهای بازگشتی نیز بستگی دارد. به عنوان  مثال ، بهینه سازی یک تابع بازگشتی که دو یا چند تماس را به خود بازگرداند  بسیار دشوارتر از بهینه سازی تابع بازگشتی است که به سادگی یک تماس را به  خود بازگرداند.آنچه مبتدیان غالباً فراموش می کنند این است که گزینه دیگری برای بازگشت  وجود دارد. شما فقط می توانید از ساختار Stack استفاده کنید. تماسهای  عملکردی را خودتان به استک push کنید و وقتی آماده برگشت تماسها هستید ،  آنها را pull کنید.بدتر کردن وضعیت کد، از چیزی که با آن شروع کردیدتصور کنید که به شما یک اتاق نامرتب مانند این داده شده است:سپس از شما خواسته شد که موردی را به آن اتاق اضافه کنید. از آنجا که در  حال حاضر یک آشفتگی بزرگ است ، ممکن است وسوسه شوید که آن مورد را هرجایی  قرار دهید. در عرض چند ثانیه می توانید کار خود را انجام دهید.این کار را با کد کثیف انجام ندهید. آن را بدتر نکنید! همیشه کد را کمی تمیزتر از زمانی که شروع به کار با آن کرده اید بگذارید.کار درستی که باید در اتاق بالا انجام شود ، تمیز کردن موارد لازم برای  قرار دادن کالای جدید در مکان مناسب است. به عنوان مثال ، اگر این وسیله  قطعه ای از لباس است که باید در کمد قرار گیرد ، باید راهی به سمت آن کمد  پاک کنید. این بخشی از انجام صحیح وظیفه شما است.در اینجا چند عمل اشتباه وجود دارد که معمولاً کد را به یک مخلوط بزرگتر از آنچه در آن بود تبدیل می کند (نه یک لیست کامل):کپی کردن کد اگر یک قسمت کد را کپی / جایگذاری کنید تا فقط یک خط  پس از آن تغییر کند ، شما به سادگی در حال کپی کردن کد هستید و یک خرابکاری  بزرگتر ایجاد می کنید. این کار مانند این است که به جای سرمایه گذاری روی  صندلی جدیدی که قابلیت تنظیم ارتفاع دارد ، صندلی دیگری با پایه پایین در  آن اتاق آشفته معرفی کنید. همیشه مفهوم انتزاع را در ذهن خود داشته باشید و  در صورت امکان از آن استفاده کنید.از فایلهای پیکربندی استفاده  نمی کنید. اگر لازم است از مقداری استفاده کنید که به طور بالقوه در محیط  های مختلف یا در زمان های مختلف متفاوت باشد ، این مقدار در یک فایل  پیکربندی تعلق دارد. اگر لازم است در چندین مکان از کد خود از مقداری  استفاده کنید ، این مقدار در یک فایل پیکربندی تعلق دارد. هنگامی که مقدار  جدیدی را به کد وارد می کنید ، همیشه این سوال را از خود بپرسید: آیا این  مقدار در یک فایل پیکربندی تعلق دارد؟ پاسخ به احتمال زیاد مثبت خواهد بود.استفاده  از عبارات شرطی غیرضروری و متغیرهای موقتی. هر if-statement یک شاخه منطقی  است که حداقل باید دوبار آزمایش شود. وقتی می توانید از شرط مشروط جلوگیری  کنید بدون اینکه میزان خوانایی شما را به خطر بیندازید ، باید این کار را  انجام دهید. مشکل عمده در این مورد گسترش تابع با منطق شاخه به جای معرفی  تابع دیگری است. هر زمان که فکر می کنید به یک دستور if یا یک متغیر تابع  جدید نیاز دارید ، باید از خود بپرسید: آیا من کد را در سطح مناسب تغییر می  دهم یا باید سطح بالاتری داشته باشم؟ر مورد اظهارات غیرضروری ، به این کد فکر کنید:function isOdd(number) {&#xA;  if (number % 2 === 1) {&#xA;    return true;&#xA;  } else {&#xA;    return false;&#xA;  }&#xA;}تابع isOdd بالا چند مشکل دارد اما میتوانید واضح ترین آنها را ببینید:از if-statement غیرضروری استفاده می کند. در اینجا یک کد معادل وجود دارد:function isOdd(number) {&#xA;  return (number % 2 === 1);&#xA;};نوشتن Comment درباره موارد واضحمن هر وقت می توانم از نوشتن comment اجتناب می کنم. من فکر می کنم  بیشتر commentها را می توان با عناصر با نام بهتر در کد جایگزین کرد.به عنوان مثال ، به جای کد زیر:// This function sums only odd numbers in an array&#xA;const sum = (val) =&gt; {&#xA;  return val.reduce((a, b) =&gt; {&#xA;    if (b % 2 === 1) { // if the current number is odd&#xA;      a+=b; // Add current number to accumulator&#xA;    }&#xA;&#xA;    return a; // The accumulator&#xA;  }, 0);&#xA;};همان کد را می توان بدون comment مانند این نوشت:const sumOddValues = (array) =&gt; {&#xA;  return array.reduce((accumulator, currentNumber) =&gt; {&#xA;    if (isOdd(currentNumber)) {&#xA;      return accumulator + currentNumber;&#xA;    }&#xA;&#xA;    return accumulator;&#xA;  }, 0);&#xA;};فقط استفاده از نام های بهتر برای توابع و آرگومان ها به راحتی اکثر  نظرات را غیرضروری می کند. قبل از نوشتن هر نظری آن را در ذهن داشته باشید.با این حال ، بعضی اوقات مجبور می شوید در موقعیت هایی قرار بگیرید که  تنها وضوح شفافیت شما در کد می تواند از طریق نظرات باشد. این زمانی است که  شما باید نظرات خود را برای پاسخ دادن به سوال چرا این کد تنظیم کنید و نه  اینکه این کد چه کاری انجام می دهد.اگر شدیداً وسوسه شده اید که برای روشن کردن کد نظر خود را بنویسید ،  لطفاً موارد واضح را ذکر نکنید. در اینجا مثالی از برخی نظرات تازه واردان  آورده شده است:// create a variable and initialize it to 0&#xA;let sum = 0;&#xA;&#xA;// Loop over array&#xA;array.forEach(&#xA;  // For each number in the array&#xA;  (number) =&gt; {&#xA;    // Add the current number to the sum variable&#xA;    sum += number;&#xA;  }&#xA;);آن برنامه نویس نباشید. آن کد را قبول نکنید. اگر مجبورید با آنها کنار  بیایید ، این نظرات را حذف کنید. اگر اتفاقاً از برنامه نویسانی استفاده می  کنید که نظریات بالا را می نویسند ، همین حالا آنها را اخراج کنید.عدم نوشتن تستمن قصد دارم این نکته را ساده بیان کنم. اگر فکر می کنید یک برنامه نویس  خبره هستید و این تفکر به شما اعتماد می کند تا بدون تست کد بنویسید ، شما  تازه وارد هستید (به معنای واقعی کلمه).اگر در حال نوشتن تست با کد نیستید ، به احتمال زیاد در حال آزمایش  برنامه خود به روش دیگری ( دستی)، هستید. اگر در حال ساخت یک برنامه وب  هستید ، پس از چند خط کد ، طراوت و تعامل خود را با برنامه خواهید داشت.من هم این کار را می کنم تست دستی کد شما هیچ مشکلی ندارد. با این حال ،  شما باید به صورت دستی کد خود را تست کنید تا بفهمید چگونه می توان آن را  به طور خودکار آزمایش کرد. اگر تعامل با برنامه خود را با موفقیت امتحان  کردید ، باید به ویرایشگر کد خود برگردید و کدی بنویسید تا دفعه دیگر که کد  بیشتری به پروژه اضافه کردید ، دقیقاً همان تعامل را به طور خودکار انجام  دهید.تو یک انسان هستی. پس از هر بار تغییر کد ، فراموش خواهید کرد که همه  اعتبار سنجی های موفقیت آمیز قبلی را آزمایش کنید. کامپیوتر را وادار کنید  که این کار را برای شما انجام دهد!اگر می توانید ، حتی قبل از نوشتن کد برای جلب رضایت ، با حدس یا طراحی  اعتبار خود شروع کنید. توسعه مبتنی بر آزمایش (TDD)  بر نحوه تفکر شما در  مورد ویژگی های شما و چگونگی دستیابی به طرحی بهتر برای آنها تأثیر مثبت  دارد.TDD برای همه مناسب نیست و برای هر پروژه ای خوب عمل نمی کند ، اما اگر  می توانید از آن استفاده کنید (حتی به صورت جزئی) باید کاملاً این کار را  انجام دهید.با فرض اینکه اگر همه چیز در حال کار است، همه چیز درست استبه متد زیر که امکان sumOddValues را پیاده سازی می کند نگاه کنید. چیز اشتباهی در موردش وجود دارد؟const sumOddValues = (array) =&gt; {&#xA;  return array.reduce((accumulator, currentNumber) =&gt; {&#xA;    if (currentNumber % 2 === 1) {&#xA;      return accumulator + currentNumber;&#xA;    }&#xA;&#xA;    return accumulator;&#xA;  });&#xA;};&#xA;&#xA;console.assert(&#xA;  sumOddValues([1, 3, 5]) === 9&#xA;);مشکل کد بالا کامل نبودن آن است. چند مورد را به درستی رسیدگی می کند و ادعای استفاده شده یکی از این موارد است.عملکرد فوق مشکلات زیادی فراتر از آن دارد. بگذارید چند مورد از آنها را مرور کنم:مسئله شماره 1: هیچ شرطی برای ورودی خالی وجود ندارد. چه اتفاقی می افتد  که وقتی تابع بدون هیچ مقداری فراخوانی می شود؟ در حال حاضر با خطایی  مواجه می شوید که عملکرد را تابع نشان می دهد:TypeError: Cannot read property &#39;reduce&#39; of undefined.این معمولاً به دو دلیل اصلی نشانه کد بد است:کاربران عملکرد شما نباید با جزئیات پیاده سازی در مورد آن مواجه شوند.خطا  برای کاربر مفید نیست. عملکرد شما به درد آنها نمی خورد. با این حال ، اگر  خطا در مورد مشکل استفاده واضح تر بود ، آنها می دانستند که از عملکرد به  اشتباه استفاده کرده اند. به عنوان مثال ، می توانید انتخاب کنید که عملکرد  یک استثنا exception تعریف شده توسط کاربر را مانند این ایجاد کند:TypeError: Cannot execute function for empty list.شاید به جای نمایش خطا ، باید عملکرد خود را طوری طراحی کنید که فقط ورودی خالی را نادیده بگیرید و مقدار 0 را برای آن بازگردانید . صرف نظر از این ، کاری باید انجام شود.مشکل شماره 2: هیچ شرطی برای ورودی نامعتبر وجود ندارد. اگر تابع به جای  آرایه با یک رشته ، یک عدد صحیح یا یک مقدار شی فراخوانی شود ، چه اتفاقی  می افتد؟sumOddValsue(42);&#xA;&#xA;TypeError: array.reduce is not a functionخوب ، این جای تأسف دارد زیرا array.reduceقطعاً یک متد است!از آنجا که ما آرگومان را array نامگذاری کردیم ، هر آنچه را که با آن تابع فراخوانی می کنید (در مثال بالا 42) برچسب arrayدرون تابع را دارد. خطا اساساً می گوید این 42.reduceیک تابع نیست.می بینید که چگونه آن خطا گیج کننده است ، درست است؟ مشابه مسئله شماره 1  ، این اتفاق می افتد زیرا ما این مورد خاص را کنترل نمی کنیم.شاید یک خطای مفیدتر این بوده باشد: 42 آرایه نیست .از مشکلات شماره 1 و شماره 2 گاهی اوقات به عنوان موارد لبه ای یاد می  شود. این موارد لبه های معمول برای برنامه نویسی است ، اما معمولاً موارد  لبه ای کمتر مشخصی وجود دارد که باید به آنها نیز فکر کنید.مشکل شماره 3: عدم آزمایش برای موارد لبه ای. گذشته از موارد واضح ، متد  به خوبی از پس موارد دیگر بر نمی آید. به عنوان مثال ، اگر از اعداد منفی  استفاده کنیم چه اتفاقی می افتد؟sumOddValues ​​([1 ، 3 ، 5 ، -13]) // =&gt; هنوز 9 استخوب ، 13- یک عدد عجیب و غریب است. آیا این رفتاری است که شما می خواهید  این عملکرد داشته باشد؟ آیا باید خطایی ایجاد کند؟ آیا باید شامل اعداد  منفی در مجموع باشد؟ یا باید فقط مثل الان اعداد منفی را نادیده بگیرد؟  شاید باید اسمش را می گذاشتند sumPositiveOddNumbers.شما باید در این مورد تصمیم بگیرید. اگر مورد آزمایشی برای مستند کردن  تصمیم خود ندارید ، ممکن است یک توضیح کوتاه در مورد آن در کد بگذارید ،  نوع توضیح این که چرا این عملکرد عملکرد غیرمنتظره ای دارد.مسئله شماره 4: همه موارد معتبر مورد آزمایش قرار نمی گیرند. موارد لبه  ای را فراموش کنید ، این عملکرد دارای یک مورد مجاز و بسیار ساده است که به  درستی از آن استفاده نمی کند:sumOddValues ​​([2 ، 1 ، 3 ، 5]) // =&gt; 112 در مورد فوق در مجموع درج شده است که نباید بود.اگر این مسئله شما را متعجب کرد ، سعی کنید بفهمید چرا این مشکل در کد بالا رخ داده است.راه حل ساده است ، کاهش استدلال دوم را می پذیرد که به عنوان مقدار  اولیه برای محاسبه استفاده می شود. اگر این استدلال ارائه نشود (مانند کد  بالا) ، کاهش فقط از اولین مقدار در مجموعه به عنوان مقدار اولیه برای  محاسبه استفاده می کند. به همین دلیل اولین مقدار زوج در آزمون فوق در  مجموع گنجانده شد.اگرچه ممکن است بلافاصله این مشکل را مشاهده کرده باشید یا هنگام نوشتن  کد ، این مورد آزمایشی که نشان می دهد باید در آزمایشات گنجانده شده باشد ،  در وهله اول ، همراه با بسیاری از موارد آزمایشی دیگر ، مانند اعداد زوج ،  یک لیست که 0 در آن است ، و یک لیست خالی است.اگر حداقل آزمایش هایی را مشاهده می کنید که بسیاری از موارد را کنترل  نمی کند یا موارد لبه را نادیده می گیرد ، این نشانه دیگری از کد جدید است.زیر سوال نبردن کد موجودمگر اینکه یک فوق کدنویس باشید که همیشه به صورت انفرادی کار می کند ،  شکی نیست که در زندگی خود با نوعی کد احمقانه روبرو خواهید شد. مبتدیان آن  را تشخیص نخواهند داد و آنها معمولاً تصور می کنند که کد خوبی است زیرا به  نظر می رسد در حال کار است و مدتهاست بخشی از پایه کد است.بدتر این که اگر کد بد از شیوه های بد استفاده کند ، ممکن است مبتدی  وسوسه شود که این عمل بد را در جای دیگری از پایگاه کد تکرار کند زیرا آنها  آن را از آنچه کد خوب می آموزند یاد گرفتند.برخی از کد ها بد به نظر می رسند اما ممکن است شرایط خاصی در اطراف خود  داشته باشد که توسعه دهنده را مجبور به نوشتن این روش کند. این مکان خوبی  برای یک نظر دقیق است که به مبتدیان در مورد آن شرایط و چرایی نوشتن کد به  این روش می آموزد.به عنوان یک مبتدی ، فقط باید تصور کنید که هر کدی که نمی فهمید نامزد  بد بودن است. زیر سوال بریدش، در مورد آن سوال کنید، در git آن را blame  کنید!اگر نویسنده آن کد مدتهاست از بین رفته یا نمی تواند آن را به خاطر  بیاورد، درباره آن کد تحقیق کنید و سعی کنید همه چیز را در مورد آن درک  کنید.فقط وقتی کد را کاملاً بفهمید ، می توانید نظر بد یا خوب بودن آن را تشکیل دهید. قبل از آن چیزی فرض نکنید.وسواس در مورد بهترین روشهااصطلاح “بهترین اقدامات” در واقع مضر است. این بدان معنی است که نیازی  به تحقیق بیشتر نیست. در اینجا بهترین روش تاکنون است. زیر سوال نبریدش!  هیچ بهترین عملی وجود ندارد. امروزه و برای این زبان برنامه نویسی احتمالاً  روشهای خوبی وجود دارد.برخی از مواردی که ما قبلاً به عنوان بهترین روشهای برنامه نویسی معرفی می کردیم ، امروزه به عنوان شیوه های بد نامگذاری شده اند.اگر وقت کافی بگذارید ، همیشه می توانید شیوه های بهتری را پیدا کنید.  دیگر نگران بهترین روش ها نباشید و روی آنچه می توانید به بهترین شکل انجام  دهید تمرکز کنید. تنها بهترین روشهای معتبر در کدنویسی ، موارد عمومی است.  به عنوان مثال ، کد با را بالاترین کیفیت ممکن بنویسید.کاری را انجام ندهید به دلیل نقل قولی که در جایی خوانده اید یا اینکه  شخص دیگری را دیده اید که این کار را انجام داده است ، یا اینکه کسی گفته  است این بهترین عمل است!وسواس در مورد عملکردبهینه سازی زودرس ریشه همه شر (یا حداقل بیشتر آن) در برنامه نویسی استDonald Knuth (1974)در حالی که از زمان نوشتن بیانیه فوق توسط دونالد ناوت ، برنامه نویسی  به میزان قابل توجهی تغییر کرده است ، من فکر می کنم امروز نیز توصیه ای  ارزشمندی است.قانون خوبی که باید در این مورد بخاطر بسپارید: اگر نمی توانید شک به عملکرد مناسب را بسنجید ، سعی نکنید آن را بهینه کنید.اگر حتی قبل از نوشتن کد در حال بهینه سازی هستید ، به احتمال زیاد این کار را زودهنگام انجام می دهید.البته بهینه سازی های واضحی وجود دارد که باید همیشه قبل از معرفی کد  جدید آنها را در نظر داشته باشید. به عنوان مثال ، در Node.js ، بسیار مهم  است که شما حلقه رویداد را پر نکنید یا پشته تماس را مسدود نکنید. این  نمونه ای از بهینه سازی اولیه است که باید همیشه در خاطر داشته باشید. از  خود بپرسید: آیا کدی که به آن فکر می کنم پشته تماس را مسدود می کند؟با این حال ، نوع جدیدی از بهینه سازی وجود دارد که تازه کارها معمولاً انجام می دهند: بهینه سازی غیر ضروری.هرگونه بهینه سازی غیر واضحی که روی هر کد موجود و بدون اندازه گیری  انجام شود ، مضر در نظر گرفته شده و باید از آن اجتناب شود. آنچه فکر می  کنید افزایش عملکرد است ممکن است منبعی از اشکالات جدید و غیرمنتظره باشد.وقت خود را برای بهینه سازی مشکلات عملکرد بی اندازه تلف نکنید.هدف قرار ندادن تجربه کاربر نهاییآسانترین راه برای افزودن ویژگی به برنامه چیست؟ از دیدگاه خود یا نحوه  قرارگیری آن در رابط کاربری کنونی ، به آن نگاه کنید. اگر این ویژگی برای  گرفتن نوعی ورودی از کاربر است ، آن را به همان شکلی که از قبل دارید اضافه  کنید. اگر این ویژگی برای اضافه کردن پیوند به صفحه ای است ، آن را به  فهرست منوی تو در تو پیوندهایی که از قبل دارید اضافه کنید.یک توسعه دهندگان حرفه ای باشید که خود را به جای کاربران نهایی خود  قرار می دهند. آنها تصور می کنند که کاربران نهایی این ویژگی خاص به چه  چیزهایی نیاز دارند و چگونه ممکن است رفتار کنند. آنها در مورد روشهای آسان  برای یافتن و استفاده از ویژگی نهایی برای کاربران نهایی فکر می کنند ، نه  در مورد راه آسان ایجاد ویژگی در برنامه به نوعی بدون هیچ گونه تأمل در  مورد قابلیت کشف و قابلیت استفاده از آن.عدم انتخاب ابزار مناسب برای کارهر کس لیست ابزارهای مورد علاقه خود را برای کمک به فعال سازی های مربوط  به برنامه نویسی دارد. برخی از ابزارها عالی هستند و برخی از آنها فقط بد  هستند اما اکثر ابزارها برای یک چیز خاص عالی هستند و برای بسیاری دیگر  بسیار مناسب هستند.چکش ابزاری عالی برای هدایت میخ به دیوار است اما بدترین وسیله برای  استفاده با پیچ است. از چکش روی پیچ استفاده نکنید فقط به این دلیل که آن  چکش را “دوست دارید”. از چکش روی پیچ استفاده نکنید فقط به این دلیل که  امتیاز 5 بررسی محبوب ترین چکش در آمازون است.اعتماد به محبوبیت یک ابزار بیش از اینکه متناسب با مشکل باشد ، نشانه یک تازه وارد واقعی است.یک مشکل در مورد این نکته این است که شما احتمالاً ابزارهای “بهتر” برای  یک کار خاص را نمی شناسید. با توجه به دانش فعلی شما ، ابزاری می تواند  بهترین ابزاری باشد که می شناسید. با این حال ، اگر با گزینه های دیگر  مقایسه شود ، برتر نیست. شما باید خود را با ابزارهای موجود آشنا کنید و در  مورد ابزارهای جدیدی که می توانید شروع به استفاده کنید ، ذهنیت آزادانه  داشته باشید.برخی از برنامه نویسان از استفاده از ابزارهای جدید خودداری می کنند.  آنها با ابزارهای موجود راحت هستند و احتمالاً نمی خواهند ابزار جدیدی یاد  بگیرند. من این را می فهمم و می توانم با آن ارتباط برقرار کنم ، اما این  اشتباه است.شما می توانید با استفاده از ابزارهای بدوی خانه ای بسازید و وقت شیرین  خود را صرف کنید و یا می توانید مقداری وقت و پول در ابزارهای فوق العاده  جدید سرمایه گذاری کنید و خیلی سریعتر خانه بهتری بسازید. ابزارها به طور  مستمر در حال بهبود هستند و شما باید در یادگیری راحت و استفاده از آنها  راحت باشید.عدم درک اینکه مشکلات کد باعث بروز مشکلات داده می شودیک جنبه مهم یک برنامه اغلب نوعی مدیریت داده است. این برنامه رابطی  برای افزودن سوابق جدید ، حذف پرونده های قدیمی و اصلاح موارد دیگر خواهد  بود.حتی کوچکترین اشکالات کد برنامه نیز منجر به وضعیت غیرقابل پیش بینی  برای داده های مدیریت شده می شود. این امر به ویژه اگر تمام اعتبارسنجی ها  روی داده ها کاملاً از طریق همان برنامه دارای باگ انجام شود ، صادق است.وقتی صحبت از رابطه کد و داده می شود ، افراد مبتدی ممکن است بلافاصله  نقاط را به هم متصل کنند. ممکن است ادامه استفاده از کد حفره دار در تولید  اشکالی نداشته باشد زیرا ویژگی X که کار نمی کند خیلی مهم نیست. مسئله این  است که کد باگ دار ممکن است به طور مداوم مشکلات یکپارچگی داده را ایجاد  کند که در ابتدا مشخص نیست.بدتر اینکه کدی که اشکالات را بدون رفع مشکلات ظریف داده ای که به دلیل  این اشکالات ایجاد شده بودند ، برطرف می کند ، فقط اطلاعات بیشتری را جمع  آوری می کند که پرونده را به برچسب “سطح غیر قابل بازیابی” می برد.چگونه خود را در برابر مشکلاتی از این دست محافظت می کنید؟ می توانید به  سادگی از چندین لایه اعتبار سنجی داده استفاده کنید. به رابط کاربری واحد  اعتماد نکنید. اعتبار سنجی را در قسمت های جلویی ، انتهایی ، ارتباطات شبکه  و پایگاه داده ایجاد کنید. اگر این یک گزینه نیست ، حداقل باید از محدودیت  های سطح پایگاه داده استفاده کنید.با محدودیت های پایگاه داده آشنا شوید و هنگام اضافه کردن ستون ها و جداول به پایگاه داده ، از همه آنها استفاده کنید:NOT NULL محدودیت بر روی یک ستون بدان معنی است  که مقادیر تهی برای آن ستون را رد کرد. اگر برنامه شما وجود مقداری را برای  آن قسمت فرض کند ، منبع آن باید به عنوان null در پایگاه داده شما تعریف  شود.UNIQUE محدودیت بر روی یک ستون بدان معنی  است که ستون مقادیر تکراری در سراسر جدول ندارد. به عنوان مثال ، این برای  نام کاربری یا قسمت ایمیل در جدول Users بسیار مناسب است.CHECK محدودیت بیان سفارشی است که به منظور بررسی درستی برای داده ها، مورد قبول  است. به عنوان مثال ، اگر یک ستون درصد طبیعی دارید که مقادیر آن باید بین  0 تا 100 باشد ، می توانید برای اجرای آن از یک محدودیت چک استفاده کنید.PRIMARY KEY یعنی محدودیتی که ارزش ستون آن هم تهی نیست و هم منحصر به فرد است.  احتمالاً شما از این یکی استفاده می کنید. هر جدول در پایگاه داده باید یک  کلید اصلی برای شناسایی سوابق آن داشته باشد.FOREIGN KEY به معنای محدودیتی است که ارزش ستون باید مطابق با ارزش یک ستون در یک جدول دیگر، که معمولا یک کلید اولیه است باشد.یکی دیگر از مشکلات تازه واردها که به یکپارچگی داده ها مربوط می شود ،  عدم تفکر در مورد تراکنش ها است. اگر چندین عملیات نیاز به تغییر منبع داده  یکسان داشته باشند و به یکدیگر وابسته باشند ، باید در تراکنشی بسته شوند  که در صورت عدم موفقیت در یکی از این عملیات ها مجدداً قابل برگشت باشد.اختراع مجدد چرخاین یک نکته مشکل است. در برنامه نویسی ، برخی چرخ ها به سادگی ارزش  ابداع مجدد را دارند. برنامه نویسی یک دامنه کاملاً مشخص نیست. خیلی چیزها  خیلی سریع تغییر می کنند و نیازهای جدید سریعتر از هر تیمی تحمیل می شود.به عنوان مثال ، اگر به چرخ سفارشی نیاز دارید که بر اساس زمان روز با  سرعتهای مختلفی بچرخد ، به جای سفارشی سازی چرخ که همه ما می شناسیم و  دوستش داریم ، شاید لازم باشد در مورد آن تجدید نظر کنیم.با این حال ، مگر اینکه واقعاً به چرخی نیاز داشته باشید که در طراحی  معمول آن استفاده نشده باشد ، آن را از نو اختراع نکنید. فقط از چرخ لعنتی  استفاده کنید.وقت گرانبهای خود را صرف تحقیق در مورد بهترین چرخ موجود نکنید. فقط یک  تحقیق سریع انجام دهید و از آنچه پیدا کردید استفاده کنید. فقط زمانی چرخ  ها را تعویض کنید که به وضوح مشاهده کنید عملکرد آنگونه که تبلیغ شده است  نیست.نکته جالب در مورد برنامه نویسی این است که بیشتر چرخ ها آزاد و باز  هستند تا شما بتوانید طراحی داخلی آنها را ببینید. به راحتی می توانید چرخ  های کدنویسی شده را با توجه به کیفیت طراحی داخلی آنها قضاوت کنید.اگر می توانید از چرخ های منبع باز استفاده کنید! بسته های منبع باز به  راحتی اشکال زدایی و رفع می شوند. همچنین می توان به راحتی آنها را تعویض  کرد. علاوه بر این ، حمایت از آنها در داخل راحت تر است.با این حال ، اگر به چرخ نیاز دارید ، اتومبیل کاملاً جدیدی خریداری  نکنید و خودرویی را که نگهداری می کنید در بالای آن اتومبیل جدید قرار  دهید. فقط برای استفاده از یک یا دو تابع از آن ، یک کتابخانه کامل قرار  ندهید.بهترین مثال در این مورد کتابخانه lodash در JavaScript است. اگر فقط  باید آرایه ای را به هم بریزید (shuffle) ، فقط متد بهم ریختن را وارد  کنید. کل lodash لعنتی را وارد نکنید.داشتن نگرش غلط نسبت به بررسی کدیکی از نشانه های کدنویسی افراد تازه وارد این است که آنها اغلب به  بررسی کد به عنوان انتقاد نگاه می کنند. آنها را دوست ندارند. قدر آنها را  نمی دانند. حتی از آنها می ترسند.این فقط اشتباه است. اگر چنین احساسی دارید ، باید فوراً این نگرش را  تغییر دهید. به هر مرور کد به عنوان یک فرصت یادگیری نگاه کنید. از آنها  استقبال کنید و از آنها قدردانی کنید. از آنها یاد بگیرید. و مهمتر از همه ،  وقتی داوران خود چیزی به شما می آموزند ، تشکر کنید.شما یک یادگیرنده کد برای همیشه هستید. شما باید آن را بپذیرید. بیشتر  بررسی های کد چیزی را به شما می آموزد که نمی دانید. آنها را به عنوان منبع  یادگیری دسته بندی کنید.گاهی اوقات ، داور اشتباه می کند و نوبت شما است که به آنها چیزی  بیاموزید. با این حال ، اگر آن چیزی که فقط از طریق کد شما مشخص نبود ،  شاید در این صورت کد شما باید اصلاح شود. و اگر به هر حال لازم است به داور  خود چیزی بیاموزید ، فقط بدانید که تدریس یکی از پاداش آورترین فعالیت  هایی است که می توانید به عنوان یک برنامه نویس انجام دهید.عدم استفاده از کنترل منبعتازه کارها گاهی اوقات قدرت یک سیستم کنترل منبع (source control) خوب را دست کم می گیرند و منظور من از خوب، Git است.کنترل منبع مربوط به تاریخچه روشن است. کد مورد سوال قرار می گیرد و  تاریخچه پیشرفت آن کد به پاسخ برخی از سوالات سخت کمک می کند. به همین دلیل  است که ما به Commit Messageها  اهمیت می دهیم. آنها کانال دیگری برای برقراری ارتباط با پیاده سازی شما  هستند و استفاده از آنها با تعهدات کوچک به نگهدارندگان آینده کد شما کمک  می کند تا دریابند که کد به حالتی که اکنون در آن قرار دارد رسیده است.هیچ چیز غیر ضروری را در پیام های متعهد خود وارد نکنید. به عنوان مثال ،  پرونده هایی را که در خلاصه کارهای خود اضافه شده ، اصلاح شده یا حذف شده  اند لیست نکنید. آن لیست در خود شی commit وجود دارد و به راحتی می توانند  با چند دستور Git نمایش داده شوند. بعضی از تیم ها دوست دارند خلاصه های  مختلفی برای هر پرونده تغییر داده شود و من این را نشانه دیگری از commit  بسیار بزرگ می دانم.کنترل منبع همچنین درمورد قابلیت کشف است. اگر با تابعی روبرو شدید و  شروع به زیر سوال بردن نیاز یا طراحی آن کردید ، می توانید commitی را که  آن را معرفی کرده پیدا کنید و زمینه آن عملکرد را ببینید. commitها حتی می  توانند به شما کمک کنند کد شناسایی شده در برنامه اشکالی ایجاد می کند.کنترل منبع همچنین می تواند از طریق روش های شگفت انگیز حتی قبل از رسمی  شدن تغییرات به کار گرفته شود. استفاده از ویژگی هایی مانند تغییرات مرحله  ای ، وصله ی انتخابی ، تنظیم مجدد ، ذخیره سازی ، اصلاح ، اعمال ، تغییر ،  تغییر جهت و بسیاری دیگر از این ابزارها ابزارهای غنی را به جریان کدنویسی  شما اضافه می کنند. آنها را درک کنید ، آنها را یاد بگیرید ، از آنها  استفاده کنید و از آنها قدردانی کنید.استفاده بیش از حد از حالت مشترکاین فقط در مورد این واقعیت است که حالت مشترک منبع مشکلات است و در  صورت امکان باید از آنها اجتناب شود. در صورت عدم امکان ، استفاده از حالت  مشترک باید در حداقل مطلق باشد.آنچه ممکن است برنامه نویسان مبتدی متوجه آن نشوند این است که هر متغیری  که تعریف می کنید بیانگر یک حالت مشترک است. این داده ها را در اختیار  دارد که می تواند توسط همه عناصر در یک دامنه همان متغیر تغییر یابد. دامنه  هرچه جهانی تر باشد ، دامنه این حالت مشترک بدتر است. سعی کنید حالت های  جدید موجود در دامنه های کوچک را حفظ کنید و مطمئن شوید که به سمت بالا نشت  نمی کنند.مشکل بزرگ حالت اشتراکی زمانی شروع می شود که چندین منبع نیاز به تغییر  آن حالت با هم در همان حلقه رویداد (در محیط های مبتنی بر حلقه رویداد)  داشته باشند. شرایط مسابقه اتفاق خواهد افتاد.در اینجا این مسئله وجود دارد: یک تازه وارد ممکن است وسوسه شود که از  یک تایمر به عنوان راه حل برای این مشکل شرایط مسابقه حالت مشترک استفاده  کند ، خصوصاً اگر مجبور باشد با یک مشکل قفل داده روبرو شود. این یک پرچم  قرمز بزرگ است. انجامش ندهید. مراقب آن باشید ، در بررسی کد به آن اشاره  کنید و هرگز آن را نپذیرید.داشتن نگرش اشتباه درباره خطاهاخطاها چیز خوبی هستند. منظور آنها این است که شما در حال پیشرفت هستید.  منظور آنها این است که شما برای پیشرفت بیشتر یک تغییر و پیگیری آسان  دارید.برنامه نویسان خبره عاشق خطاها هستند. تازه واردان از آنها متنفرند.اگر دیدن این پیام های خطای قرمز کوچک فوق العاده شما را آزار می دهد ،  باید این نگرش را تغییر دهید. شما باید به عنوان مددکار به آنها نگاه کنید.  شما باید با آنها کنار بیایید. برای پیشرفت باید از آنها استفاده کنید.برخی از خطاها باید به استثناها ارتقا پیدا کنند. موارد استثنا خطاهای  تعریف شده توسط کاربر است که باید برای آنها برنامه ریزی کنید. برخی از  خطاها باید تنها بمانند. آنها باید برنامه را خراب کرده و از آن خارج شوند.عدم شکستشما یک انسان هستید و مغز شما به شکست نیاز دارد. بدن شما نیز به  استراحت نیاز دارد. شما اغلب در منطقه خواهید بود و استراحت را فراموش  خواهید کرد. من به آن به عنوان نشانه دیگری از افراد تازه وارد نگاه می  کنم. این چیزی نیست که بتوانید از آن مصالحه کنید. چیزی را در جریان کار  خود ادغام کنید که شما را مجبور به استراحت کند. بسیار کوتاه استراحت کنید.  صندلی خود را رها کرده و کمی قدم بزنید و از آن استفاده کنید تا در مورد  کارهای بعدی خود فکر کنید. با چشمانی تازه به کد برگردید.بعد از این مدت طولانی خواندن این مطلب، شما سزاوار استراحت هستید.منبع: Beginner Programmers’ Mistakes</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Fri, 26 Feb 2021 15:02:30 +0330</pubDate></item><item><title>کارهایی که هنگام یادگیری برنامه نویسی نباید انجام دهید</title><link>https://virgool.ir/@saleh.rezaei/کارهایی-که-هنگام-یادگیری-برنامه-نویسی-نباید-انجام-دهید-meexgsxz8k7w</link><description>در اینجا لیست کارهایی است که شما نباید هنگام انجام کد نویسی انجام ندهید:1. مقایسه خود با افراد دیگراین یک مورد واقعاً مهم است و در شرایط مختلفی صدق می کند. اگر فوتبال  را شروع می کنید ، خوب نیست که مهارت های خود را به عنوان مثال با  کریستیانو رونالدو که خیلی بیشتر از شما بازی کرده مقایسه کنید.وقتی نوبت به برنامه نویسی می رسد ، مهارت های خود را با شخصی که بیش از  شما برنامه نویسی کرده است مقایسه نکنید. این نقل قول را ببینید:  “فصل 1 خود را با فصل 20 شخص دیگر مقایسه نکنید”.  شخصی که به سطح 20 رسیده است در مقطعی از جایی که اکنون هستید بوده است ، منظور من در فصل 1 است.2. جابجایی بین زبان ها و فن آوری های مختلف به جای تمرکز بر روی یکیاین چیزی است که من در طول سفر خود در یادگیری کدنویسی دیده ام. من بین  ویندوز و لینوکس ، ترمینال ها و ویرایشگرهای مختلف کد ، تم های رنگی و غیره  جابجا شدم. به نظر من امروزه این سوئیچینگ مضر است.من بارها به این موضوع فکر می کنم:  “اگر من آن سیستم ها را زیاد  تغییر نمی دادم و از آن زمان عاقلانه برای یادگیری کدنویسی واقعی استفاده  کرده بودم ، امروز خیلی بهتر می شدم”.  بنابراین ، یک هشدار: در حین یادگیری بین فناوری ها جابجا نشوید. ابتدا جریان را بیاموزید و سپس تعویض کنید!3. خیلی راحت تسلیم شدنباز هم نکته دیگری که ناشی از تجربه خودم است. خیلی راحت تسلیم نشوید حتی زمانی که خیلی سخت به نظر می رسد.فقط آن پروژه ها و تکالیف سخت را به پایان برسانید. اگر خودتان قادر به  انجام آنها نیستید ، از کسی کمک بخواهید. هنگامی که شما در مقطعی این کار  را به پایان برسانید ، می توانید به خود افتخار کنید که به آن رسیده اید!4. تلاش برای به خاطر سپردن کدبه خاطر سپردن و یا تلاش برای به خاطر سپردن کد ، معمولا در مبتدیان  دیده می شود. اما وقتی صحبت از واقعیت ها می شود ، به خاطر سپردن آنها  فایده ای ندارد. آن کد خیلی در وظایف شما نمی گنجد و بنابر این نه تنها  مفید نیست که آن را حفظ کنید همچنین به هیچ وجه حرفه ای نیست.5. جستجو نکردناین امر همان نکته قبلی “تلاش برای به خاطر سپردن کد” را دنبال می کند  زیرا بسیاری از مبتدیان فکر می کنند که باید همه چیز را بدانند و به همین  دلیل از Google برای جستجوی راه حل  مشکلات استفاده نمی کنند. باز هم ، این چیزی بود که تجربه کردم. من در گوگل  به دنبال راه حل نبودم ، سعی کردم با تجربه خود مسائل را حل کنم.اگر یادگیری برایتان مهم است، به دنبال جواب نباشید، راهنمایی بگیرید.این 5 کاری است که نباید در طول یادگیری کدنویسی انجام دهید. امیدوارم این مطلب مفید واقع شده باشد!</description><category>صالح رضائی</category><author>صالح رضائی</author><pubDate>Thu, 25 Feb 2021 15:25:56 +0330</pubDate></item></channel></rss>