سرزمین نیم - (3) ثابت ها و متغیر ها

توی قسمت قبل اومدیم و محیط vscode رو برای توسعه با nim آماده کردیم.امروز میخوایم اولین برنامه مون رو توی nim بنویسیم.یک سری مقدماتبرای شروع ی فایل با پسوند nim توی vscode تون ایجاد کنید.اولین دستوری که باید یادبگیرید تابع echo هست. این دستور هرچی که جلو اش بنویسیم رو میندازه توی کنسول.البته این تابع رو بدون پرانتز هم میتونی بنویسی که بعدا در موردش مفصل حرف میزنیمخب حالا چطوری اجراش کنیم؟میتونید با دستور زیر اون رو اجرا کنید nim r <code.nim>بجای <code.nim> اسم فایل خودتون رو بنویسید خب همونطور که میدونید زبان nim ی زبان کامپایلی هست - یعنی اول برنامه رو به کد های باینری تبدیل میکنه و بعد اجراش میکنهبعد از اجرای برنامه من چنین چیزی میبینم:12.45wordcدر واقع من موقع اجرا اینو میبینماگر دوست ندارید این hint هایی که کامپایلر موقع کامپایل برنامه مینویسه رو ببینید، میتونید اینطوری برنامه تون رو اجرا کنیدnim --hints:off r <code.nim>نکته: برای خروجی گرفتن (فایل exe در ویندوز) هم بجای حرف r ( که مخفف run هست ) میتونید کلمه c برای زبان C ، کلمه cc برای زبان cpp و کلمه js برای زبان javascript رو بنویسید تا به اون زبان ها تبدیل و کامپایل بشه. ( وقتی که r رو میزنید خودش به صورت خودکار زبان c رو انتخاب میکنه )خب بریم سراغ موضوع اصلی پستتعریف متغیر و ثابتیک متغیر در زبان nim به این صورت تعریف میشه:کلمه var که مشخص کننده تغییرپذیری هستاسم متغیر ( با آندرلاین ( _ ) نمیتونه شروع بشه )دو نقطه و نوع متغیر ( که در اینجا int یا همون عدد صیحیح هست )مقدار متغیر که در اینجا 2 هستاین روش ها هم برای تعریف متغیر مجازه:در مثال اول ما فقط نوع متغیر رو تعریف کردیم - nim برای ما مقدار اولیه از نوعی که مشخص کردیم رو قرار میده که برای int ها مقدار 0 هستدر مثال دوم هم فقط مقدار متغیر رو نوشتیم و nim انقدر باهوش هست که بفهمه منظور ما int بوده ...خب ما بجای کلمه var متونیم از دوتا کلمه دیگه هم استفاده کنیم که فرقشون اینان:کلمه var: وقتی میخوایم مقدار اون رو توی خط های بعد تغییر بدیمکلمه let: وقتی نمیخوایم مقدار اون رو در خط های بعد تغییر بدیمکلمه const: وقتی نمیخوایم مقدار اون رو تغییر بدیم و مقدار اون میتونه در زمان کامپایل ( قبل از اجرای برنامه ) مشخص بشه.برای برای فهم بهتر یک مثال میزنم. تابع stdin.readline میاد و توی کنسول از کاربر یک خط ورودی میگیره ( ی چیزی مثل تابع input توی زبان پایتون یا getline در زبان cpp ) و اون رو به صورت string برمیگردونه ( string ها برای متن ها استفاده میشن )نترسید جلو تر در مورد تابع هاش توضیح میدمخب توی این مثال بالا، تعریف a و b و c همگی درست هست چون مقداری که بهشون نسبت دادیم حتی زمان قبل از اجرای برنامه هم مشخصه ( مقدار "hello " ).دو خط پایینی مقداری قراره توی d و f قرار بگیره بعد از اینکه کاربر اون خط رو وارد کرد قابل محاسبه است ( زمان اجرا ) پس const نمیتونه قرار بگیرهدر مثال بعدی چون ما به متنی که داشتیم کلمه "world" رو اضافه کردیم، پس فقط متغیر ها ( چیز هایی که با var تعریف کردیم قابل استفاده است ) در نهایت هم با دستور echo که امروز یادگرفتید میتونید مقدار اون متغیر ها و ثابت هارو توی کنسول نمایش بدید.انواع ساده داده ای در nimخب اینجا چند نوع ساده متغیری میگم . توی جلسه بعدی ان شا الله نوع های پیچیده تر رو میگم.باینری ( boolean )توی nim بهشون میگن boolیک نوع داده ای که فقط دو تا مقدار میگیره false که معادلش میشه 0 و true که معادلش میشه 1تابع های مقداری: تابع and: هر دو طرف باید true باشن تا جواب true بشهتابع or: حداقل یکی از دوطرف true باشن جواب true میشهتابع xor: مثل همون =! عمل میکنهتابع not: برعکس اون مقدار رو پس میده ( اگر false باشه میشه true و برعکس )توابع مقایسه ای مثل == , =! , < , > , =< , => : اینا مقدار عددیش رو مقایسه میکنهخروجی کنسول:true true false trueاعداد صحیح - integerتوی nim چند نوع عدد صحیح داریم.int[ 8, 16, 32, 64 ]که بحای اون اعداد توی پرانتز هرکدوم میتونه قرار بگیره. به طور خودکار وقتی تنها کلمه int رو مینویسید، اگر کامپیوترتون 64 بیت باشه int64 انتخاب میشه و اگر 32 بیت باشه int32یک سری نوع عدد صحیح هم داریم که منفی ندارن ( فقط صفر و مثبت هستن و قاعدتا فضا شون دو برابر int ها هست ) که بهشون میگن uint ( همون unsigned int توی cpp )اونا هم مثل int ها از 8 تا 64 انتخاب دارناگر میخواید موقع تعریف عددی نوع دلخواهتون اعمال بشه میتونید از این روش ها برای تعریف ثابت ها یا متغیر هاتون استفاده کنید:توی حالت اول ما از عدد 5 رو دادیم به تابع uint8 ( فعلا این رو بدونید که این معادل uint8(5) هست)توی حالت دوم هم اومدیم تقریبا همین کارو کردیم ( اگر int هست مقدارتون بجای u از i استفاده کنید )توی حالت سوم هم به صورت عادی این کارو انجام دادیممیتونید برای خوانایی هم بین رقم های عددتون آندرلاین بزارید :)تابع های پرکاربرد که برای اعداد صحیح استفاده میشه:تابع ضرب ( * ) - همینطور جمع ( + ) و تفریق ( - )تابع تقسیم به صورت اعشاری ( / ) و تابع تقسیم به صورت صحیح ( div )تابع باقی مانده ( mod )تابع چک کردن تساوی ( == ) و نامساوی ( =! ) که خروجیشون bool هستتابع چک کردن بزرگتر ( < ) و کوچیکتر ( > ) و بزرگتر مساوی ( =< ) و کوچیکتر مساوی ( => ) اینم نحوه استفاده شونی سری تابع ها هم هست که فقط برای متغیرهای عددی استفاده میشه و جواب رو میریزه توی متغیر سمت چپ:تابع اضافه کردن ( =+ ) یا ( inc ) ( مخفف increment یعنی اضافه کردن )تابع کم کردن ( =- ) یا ( dec ) ( مخفف decrement یعنی کم کردن )تابع ضرب کردن ( =* )جلوی هر خط معادلش رو نوشتمی سری تابع ها هم وجود دارن که برای عملیات های باینری ( 0 و 1 ) هست که توضیحی در موردشون نمیدونم ولی خودتون میتونید امتحان کنید. ( فقط خواستم بدونید که هست )تابع های ( and - or - not - xor , shr, shl): غیر از تابع not که پشت عدد یا متغیر میان بقیه بینشون میان.اعداد اعشاری - floatخیلی شبیه به اعداد صحیح فقط دو نوع float32 و float64 داره که میتونید به صورت float خالی هم بنویسید.اگر یک عدد صحیح رو به اینصورت بنوسید نوع float براش انتخاب میشهتابع هاشون مثل اعداد صحیح هستن فقط تابع های باینری براشون موجود نیست و توی توابع متغیری هم تابع تقسیم ( =/ ) رو دارن و توی توابع عمومی هم تابع های div و mod رو ندارنحرف - کاراکتر - ( char )این نوع داده ای حرف های جدول ascii که 256 تا هستن رو میتونه ذخیره کنهنحوه نوشتنشون به این صورته که یک حرف رو بین دوتا ( ' ) میزاریدبا تابع ord میتونید اون کاراکتر رو به کد ascii اش تبدیل کنید ( که یک عدد بین 0 تا 256 هست )و با تابع chr میتونید برعکس این کار رو انجام بدیدرشته ها - string- ( متن ) برای نوشتنشون اون متنتون رو بین دوتا ( " ) میزاریدتابع های مقداری:تابع های مقایسه ای مثل >= و =!تابع ( &amp;amp;amp;amp; ) که مقدار های string یا char رو بهم میپسبونهتابع [ ] که ی عدد صحیح ( مثلا به نام n ) میگیره و خونه n امش رو که یک char هست بر میگردونهتابع substr: دوتا عدد میگیره ( مثلا s و e ) که اون رشته رو از خونه s ام تا e ام میبره ( برش )تابع len: تعداد کاراکتر های توی رشته رو میدهتابع های متغیری:تابع insert ی ی رشته میگیره و ی عدد ( مثلا s و n ) و رشته s رو توی خونه n اضافه میکنه ( اگر n رو بهش ندید امثل این میمونه که 0 رو بهش دادید و اون متن رو به اولش اضافه میکنه )تابع add یا ( =& ) که میتونید به متغیر از نوع string یک string یا char دیگه رو بچسبونیدتابع [ ]= که یک عدد و یک کاراکتر میگیره ( مثلا n و v ) و خونه n ام اون رشته رو برابر با v قرار میده تابع setlen که یک عدد میگیره ( مثلا n ) و متغیری که توش رشته هست رو تا خونه n ام نگه میداره ( بقیه اش رو دور میندازه )مثال استفادهخروجی که کنسول بهم میده:> do my fingers hurt? < no they don't false trueفعلا چون که خیلی چیزی در مورد nim نمیدونید، بهتون تمرین نمیدم ?