html5 localStorage

ذخیره کردن داده‌ها تو localStorage با store.js ساده و دوست‌داشتنی!

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

(بیشتر…)

بیشتر بخوانید

mathematics in javascript

جاوااسکریپت به روایت آمیرزا: فاجعه‌ی اعداد بزرگ!

هشدار: رویت هلالِ روی ماهِ اعدادِ بزرگ در جاوااسکریپت با چشم غیرمسلح امکان‌پذیر نمی‌باشد!!

اگه شما یه دانشجوی رشته‌ی فنی مهندسی مثل برق یا مکانیک باشید، حتما یکی از دغدغه‌هاتون انجام محاسبات فنی یا به قول فرنگی‌ها Technical Computation هست. از طرفی اگه شما علاوه بر یه مهندس برق یا مکانیک، یه گیکِ علاقه‌مند به برنامه‌نویسی هم باشید، ممکنه دوست داشته باشید به جای کار با Matlab سنت‌شکنی کنید و با یه چیز شادتری پروژه‌هاتون رو انجام بدید. مثل چی؟ مثل جاوااسکریپت!

(بیشتر…)

بیشتر بخوانید

JetBrains

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

 

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

(بیشتر…)

بیشتر بخوانید

Hacker Rank

میدان مبارزه‌ای به نام HackerRank

سایت HackerRank جاییه که میتونید توانایی‌های خودتون رو بسنجید و قابلیت‌هاتون رو به بوته‌ی آزمایش بسپارید. اگه طالب چالش‌های برنامه‌نویسی هستید و تو کوچه پس کوچه‌های برنامه‌نویسی میگردید و فریاد هَل مَن مُبارز می‌زنید، این گوی و این میدان!

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

چالش‌های این سایت دو قسمت دارند: تمرین‌ها (Practice) و مسابقه‌ها (Contest).

(بیشتر…)

بیشتر بخوانید

js data types javascript

جاوااسکریپت به روایت آمیرزا: همه تنبلا! (یا به قول فرنگی‌ها Lazy ways)

تو جاوااسکریپت یه سری راه ساده و سرراست برای تبدیل کردن یک متغیر از یک نوع به نوع دیگه هست که فرنگی‌ها بهش میگن lazy ways و درصورت نیاز میتونیم ازشون برای تبدیل یک متغیر از یک نوع داده به یک نوع داده دیگه استفاده کنیم. مثلا وقتی یک عدد که در قالب رشته (string) هست ضربدر یک عدد دیگه کنیم، نتیجه از نوع عدد میشه. این حالت برای عملگر منها یا همون تفریق هم حاکمه!

(بیشتر…)

بیشتر بخوانید

حلقه یگانه ارباب حلقه ها

مقایسه‌ی زبون‌های برنامه‌نویسی بر پایه‌ی ارباب حلقه‌ها!

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

منبع اصلی این نوشته وبسایت کارل چئو هست، اما هر جایی که لازم دیدم دخل و تصرف کردم!

(بیشتر…)

بیشتر بخوانید

ES2015 ES6

ES2015 یا ES6 چیه؟

ES2015 مخفف ECMAScript2015 هست، که همون ES6 هست، یا به عبارت دیگه ECMAScript6. اگه اهل برنامه‌نویسی و طراحی وب باشید حتما میدونید که ECMAScript همون جاوااسکریپت خودمونه! یا بهتر بگیم: جاوااسکریپت همون ECMAScript هست! این زبون جاوااسکریپت که اینقدر محبوب‌القلوب شده، در واقع اسم اصلیش ECMAScript بوده و هست، حالا اینکه چرا بهش میگن جاوااسکریپت خودش داستانیه! تو طول تاریخ این ECMAScript به اسم‌های مختلفی ظهور کرده، از جمله Mocha، LiveScript و در نهایت JavaScript، که البته همین جاوااسکریپت یه نسخه‌ی مایکروسافتی هم داشت که بهش میگفتن JScript.

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

الغرض، این زبون نازنین تو سال ۲۰۱۵ دستخوش تغییراتی اساسی شد، تغییراتی که میتونه دانشی که از جاوااسکریپت دارید رو تا حدودی به چالش بکشه! این تغییرات تحت نسخه ES6 ارائه شدند که چون تو سال ۲۰۱۵ انجام شد، معروف شده به ES2015.

اگه خوشحالتون میکنه باید بگم تو نسخه‌ی جدید جاوااسکریپت حمایت از Unicode هم بیشتر شده و حتی امکان Unicode Regex هم فراهم شده. البته تغییرات ES2015 خیلی خیلی بیشتر از این حرفاست. برای دیدن لیست ویژگی‌های جدید ES2015 بهتون توصیه میکنم تا صفحات زیر رو چک کنید:

ECMAScript 6 — New Features: Overview & Comparison

Overview of ECMAScript 6 features

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

یه فیلم خوب برای یادگیری ES2015 تو سایت دانلودها هست، میتونید دانلودش کنید و ببینیدش:

دانلود فیلم آموزش ضروریات JavaScript ES6

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

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

جاوا اسکریپت نسخه جدید ES6 – نصب و راه اندازی ‌‌‌Babel JS (حمید فرجی)

شاد باشید و به‌روز تا همیشه جوون بمونید!

قربان شما،

آمیرزا

بیشتر بخوانید

React.JS

چرا من React.js رو انتخاب کردم؟

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

راستش اول فکر می‌کردم برای فریمورک سمت کاربر، انتخاب‌های زیادی ندارم. از قبل آشنایی مختصری با Angular.JS داشتم و فکر میکردم هرچی هست و نیست همینه! چرا؟ چون هنوز جز اون چیز دیگه‌ای رو نمیشناختم. در هر صورت، قبل از شروع کار با Angular تصمیم گرفتم جست‌جویی کنم، بلکه بهتر از اون رو پیدا کنم. تو جست‌جوهام خیلی زود به چهارتا اسم رسیدم: Angulr, Ember, Backbone, React. باز دوباره من موندم و یه انتخاب سرنوشت‌ساز!

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

(بیشتر…)

بیشتر بخوانید

i love javascript

جاوااسکریپت به روایت آمیرزا: خاص‌ها!

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

اعداد خاص!

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

Infinity و Infinity- که همون مثبت و منفی بینهایت هستند. قاعدتا اگه با چیزی جمع یا کم بشن باز هم همون بینهایتی که هستند باقی میمونن.

مقدار خاص سوم هم چیزی نیست جز NaN که مخفف Not a Number هست. گرچه داد میزنه من عدد نیستم، ولی گولش رو نخورید، چون از جنس اعداد هست. چرا؟ چون هر عملیاتی روی اعداد که نتونه منجر به یک نتیجه‌ی بامعنی بشه، NaN رو برمیگردونه. اینطوری میشه گفت: شاید NaN عدد نباشه، اما حاصل از عملیاتهای ناموفق عددی هست. با دستور typeof میتونید نوع متغیرها رو چک کنید، اگه این دستور رو برای NaN اجرا کنید میبینید که number رو برمیگردونه:

typeof NaN;
          // number

و اما یک نکته دیگه درمورد NaN، و اون اینکه NaN هیچوقت برابر خودش نیست!!! یعنی چی؟ یعنی عبارت منطقی

NaN == NaN

نتیجه‌ای جز false در پی نداره. چون NaN حاصل یک عملیات ریاضی بی‌معنیه، که لزوما نباید برابر نتیجه‌ی عملیات‌های بی‌معنیِ دیگه‌ای باشه! تونستم منظورم رو برسونم؟

راستی، یه تابع هم داریم به اسم ()isNaN که چک میکنه یه متغیر عدد نیست یا هست (دقت کنید! نگفتم عدد هست یا نه، گفتم عدد نیست یا هست). منظور اینه که اگه یه عدد به صورت رشته متنی هم ذخیره شده باشه، این تابع میتونه برامون تشخیصش بده. اگه متغیری که به ورودی این تابع میدیم، به هیچ وجه من الوجوه عدد نباشه، این تابع مقدار true رو برمیگردونه، یعنی این متغیر عدد نیست یا به قول فرنگی‌ها Not A Number. مثالهای زیر میتونن کمک کنن که راحتتر با کارکرد این تابع آشنا بشیم:

var num = '2016';
typeof num;
          // string
 
isNaN(num);
          // false
 
isNaN(2016);
          // false
 
var b = '2016March';
isNaN(b);
          // true

مقادیر خاص!

تو جاوااسکریپت دو مقدار خاص هم داریم. این مقادیر چیزی نیستن جز undefined و null. این دو تا مقدار خیلی شبیه بهم هستند، اول که دیدمشون فکر کردم که داداش‌های دو قلو هستن، اما بیشتر که دقت کردم دیدم تفاوتهایی با هم دارند که دونستنش خالی از لطف نیست!

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

var myVar;
typeof myVar;
          // undefined
 
typeof myLovelyVar
          // undefined

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

اما تفاوت اساسی این دو مقدار اینه که undefined واقعا هیچی نیست و اگه تو یه عملیات ریاضی استفاده بشه، نتیجه‌ای بی‌معنی تولید میکنه! اما null در عملیاتها نقش صفر رو بازی میکنه و عملیاتهای ریاضی رو بی‌معنی نمیکنه و به فنا نمی‌بره! به مثالهای زیر توجه کنید:

result1 = 2 + null;
          // ۲
 
result2 = 5 * null;
          // ۰
 
result3 = 2 + undefined;
          // NaN

توجه داشته باشید که null فقط در عبارات ریاضی نقش صفر رو بازی میکنه، نه جاهای دیگه! در هر صورت، از نظر منطقی null برابر undefined هست، اما null برابر صفر نیست!

null == undefined;
          // true
null == 0;
          //false

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

قربان شما،

آمیرزا

بیشتر بخوانید

javascript

معرفی چندتا کتاب خوب برای یادگیری جاوااسکریپت

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

در هر صورت زبون برنامه نویسی PHP رو همیشه برای کار، کنار خودم نگه میدارم، قبلترها با کدایگنایترِ با وقار کارهام رو پیش میبردم، اما این روزها با لاراولِ مهربون خوش میگذرونم. قبلا مطلبی درمورد اینکه چرا از CodeIgniter رفتم سراغ Laravel نوشتم، که اگه دوست دارید میتونید اون رو مطالعه کنید. الغرض، همیشه دنبال یه زبون برنامه‌نویسی سبک و بی‌دردسر برای کارهای ساده‌ترم بودم. انتخاب اولم جاوااسکریپت بود، البته به همراه Node.JS. اما اون موقع احساس کردم جاوااسکریپت زیادی بدقلقی میکنه و برای همین رفتم سراغ Ruby نازنین که اینجا درموردش نوشتم: روبی این زبون دوست‌داشتنی، این دوست نازنین!

بعد از مدتی کار با روبی احساس کردم که فقط تو زمینه‌ی توسعه‌ی وب خیلی روش کار شده و با همه‌ی خوبی‌هاش تو خیلی از زمینه‌های دیگه زیاد چاق و چله نیست. به همین خاطر رفتم سراغ Python که تو خیلی از زمینه‌ها خیلی خوب روش کار شده بود. تو این نوشته دلایل اینکه چرا رفتم سراغ پایتان رو نوشتم: چرا پایتان؟

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

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

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

(بیشتر…)

بیشتر بخوانید