Hamid Bluri
Hamid Bluri
خواندن ۷ دقیقه·۳ سال پیش

سرزمین نیم - (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 به این صورت تعریف میشه:

  1. کلمه var که مشخص کننده تغییرپذیری هست
  2. اسم متغیر ( با آندرلاین ( _ ) نمیتونه شروع بشه )
  3. دو نقطه و نوع متغیر ( که در اینجا int یا همون عدد صیحیح هست )
  4. مقدار متغیر که در اینجا 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

تابع های مقداری:

  1. تابع and: هر دو طرف باید true باشن تا جواب true بشه
  2. تابع or: حداقل یکی از دوطرف true باشن جواب true میشه
  3. تابع xor: مثل همون =! عمل میکنه
  4. تابع not: برعکس اون مقدار رو پس میده ( اگر false باشه میشه true و برعکس )
  5. توابع مقایسه ای مثل == , =! , < , > , =< , => : اینا مقدار عددیش رو مقایسه میکنه

خروجی کنسول:

true true false true


اعداد صحیح - integer

توی nim چند نوع عدد صحیح داریم.

int[ 8, 16, 32, 64 ]

که بحای اون اعداد توی پرانتز هرکدوم میتونه قرار بگیره. به طور خودکار وقتی تنها کلمه int رو مینویسید، اگر کامپیوترتون 64 بیت باشه int64 انتخاب میشه و اگر 32 بیت باشه int32


یک سری نوع عدد صحیح هم داریم که منفی ندارن ( فقط صفر و مثبت هستن و قاعدتا فضا شون دو برابر int ها هست ) که بهشون میگن uint ( همون unsigned int توی cpp )

اونا هم مثل int ها از 8 تا 64 انتخاب دارن

اگر میخواید موقع تعریف عددی نوع دلخواهتون اعمال بشه میتونید از این روش ها برای تعریف ثابت ها یا متغیر هاتون استفاده کنید:

  1. توی حالت اول ما از عدد 5 رو دادیم به تابع uint8 ( فعلا این رو بدونید که این معادل uint8(5) هست)
  2. توی حالت دوم هم اومدیم تقریبا همین کارو کردیم ( اگر int هست مقدارتون بجای u از i استفاده کنید )
  3. توی حالت سوم هم به صورت عادی این کارو انجام دادیم


میتونید برای خوانایی هم بین رقم های عددتون آندرلاین بزارید :)
میتونید برای خوانایی هم بین رقم های عددتون آندرلاین بزارید :)


تابع های پرکاربرد که برای اعداد صحیح استفاده میشه:

  1. تابع ضرب ( * ) - همینطور جمع ( + ) و تفریق ( - )
  2. تابع تقسیم به صورت اعشاری ( / ) و تابع تقسیم به صورت صحیح ( div )
  3. تابع باقی مانده ( mod )
  4. تابع چک کردن تساوی ( == ) و نامساوی ( =! ) که خروجیشون bool هست
  5. تابع چک کردن بزرگتر ( < ) و کوچیکتر ( > ) و بزرگتر مساوی ( =< ) و کوچیکتر مساوی ( => )
اینم نحوه استفاده شون
اینم نحوه استفاده شون


ی سری تابع ها هم هست که فقط برای متغیرهای عددی استفاده میشه و جواب رو میریزه توی متغیر سمت چپ:

  1. تابع اضافه کردن ( =+ ) یا ( inc ) ( مخفف increment یعنی اضافه کردن )
  2. تابع کم کردن ( =- ) یا ( dec ) ( مخفف decrement یعنی کم کردن )
  3. تابع ضرب کردن ( =* )
جلوی هر خط معادلش رو نوشتم
جلوی هر خط معادلش رو نوشتم


ی سری تابع ها هم وجود دارن که برای عملیات های باینری ( 0 و 1 ) هست که توضیحی در موردشون نمیدونم ولی خودتون میتونید امتحان کنید. ( فقط خواستم بدونید که هست )

تابع های ( and - or - not - xor , shr, shl): غیر از تابع not که پشت عدد یا متغیر میان بقیه بینشون میان.


اعداد اعشاری - float

خیلی شبیه به اعداد صحیح فقط دو نوع float32 و float64 داره که میتونید به صورت float خالی هم بنویسید.

اگر یک عدد صحیح رو به اینصورت بنوسید نوع float براش انتخاب میشه
اگر یک عدد صحیح رو به اینصورت بنوسید نوع float براش انتخاب میشه


تابع هاشون مثل اعداد صحیح هستن فقط تابع های باینری براشون موجود نیست و توی توابع متغیری هم تابع تقسیم ( =/ ) رو دارن و توی توابع عمومی هم تابع های div و mod رو ندارن


حرف - کاراکتر - ( char )

این نوع داده ای حرف های جدول ascii که 256 تا هستن رو میتونه ذخیره کنه

نحوه نوشتنشون به این صورته که یک حرف رو بین دوتا ( ' ) میزارید

با تابع ord میتونید اون کاراکتر رو به کد ascii اش تبدیل کنید ( که یک عدد بین 0 تا 256 هست )

و با تابع chr میتونید برعکس این کار رو انجام بدید


رشته ها - string- ( متن )

برای نوشتنشون اون متنتون رو بین دوتا ( " ) میزارید

تابع های مقداری:

  1. تابع های مقایسه ای مثل >= و =!
  2. تابع ( &amp;amp;amp;amp; ) که مقدار های string یا char رو بهم میپسبونه
  3. تابع [ ] که ی عدد صحیح ( مثلا به نام n ) میگیره و خونه n امش رو که یک char هست بر میگردونه
  4. تابع substr: دوتا عدد میگیره ( مثلا s و e ) که اون رشته رو از خونه s ام تا e ام میبره ( برش )
  5. تابع len: تعداد کاراکتر های توی رشته رو میده

تابع های متغیری:

  1. تابع insert ی ی رشته میگیره و ی عدد ( مثلا s و n ) و رشته s رو توی خونه n اضافه میکنه ( اگر n رو بهش ندید امثل این میمونه که 0 رو بهش دادید و اون متن رو به اولش اضافه میکنه )
  2. تابع add یا ( =& ) که میتونید به متغیر از نوع string یک string یا char دیگه رو بچسبونید
  3. تابع [ ]= که یک عدد و یک کاراکتر میگیره ( مثلا n و v ) و خونه n ام اون رشته رو برابر با v قرار میده
  4. تابع setlen که یک عدد میگیره ( مثلا n ) و متغیری که توش رشته هست رو تا خونه n ام نگه میداره ( بقیه اش رو دور میندازه )


مثال استفاده
مثال استفاده

خروجی که کنسول بهم میده:

> do my fingers hurt? < no they don't false true


فعلا چون که خیلی چیزی در مورد nim نمیدونید، بهتون تمرین نمیدم ?

nimnimlangانواع داده ایبرنامه نویسیآموزش
life is what you choose it to be ...
شاید از این پست‌ها خوشتان بیاید