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

برنامه نویسی, زبان برنامه نویسی سالیدیتی (Solidity) چیست؟, آموزش برنامه نویسی
برنامه نویسی سالیدیتی (Solidity)

قراردادهای هوشمند

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

سالیدیتی یکی از زبان های برنامه نویسی موجود برای توسعه برنامه روی ماشین مجازی اتریوم (EVM) است. کلاس‌ها و کتابخانه های زیادی در سالیدیتی وجود دارند که می‌توانند به توسعه یک قرارداد هوشمند توسط شما، بدون هیچ زحمتی کمک کنند. مهمترین محیط های توسعه نرم افزار (IDE) برای برنامه نویسی به زبان سالیدیتی عبارتند از:

  • ریمیکس Remix
  • ویژوال استدیو Visual Studio (با استفاده از پلاگین)
  • اتر اتم Ether atom (با استفاده از پلاگین)

ویژگی های زبان سالیدیتی

در این قسمت به تعدادی از ویژگی های پایه زبان سالیدیتی اشاره می‌کنیم. این ویژگی ها مشابه ویژگی های زبان های سطح بالایی مثل جاوا و C++ است.

  • نوع داده‌ای ایستا

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

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

  •  قرارداد و رابط‌ها (Interfaces)

در زبان برنامه نویسی سالیدیتی، یک قرارداد (Contract) یک ساختار داده (data structure) است و این امر کمک می‌کند تا بتوانیم قرارداد بسازیم و آن را مدیریت کنیم. قراردادها می‌توانند توسط قراردادهای فرزند به ارث برده شوند و از این طریق قردادهای پیچیده‌تر ایجاد شود.

  •  اصلاح کننده توابع (Function Modifier)

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

  • رویدادها (Events)

رویدادها برای نوشتن اطلاعات مربوط به قراردادها روی لاگ بلاک چین (Blockchain Log) استفاده می‌شوند. یک رویداد مشابه یک تابع است که یک داده را به عنوان ورودی دریافت کرده و آن را روی لاگ بلاک چین می‌نویسد.

  • تعیین سطح دسترسی

این ویژگی مشابه دسترسی های public و private در زبان های برنامه نویسی شیء‌گرا است. در زبان سالیدیتی نام و قوانین این دسترسی‌ها کمی تغییر کرده است. برای مثال در سالیدیتی دو سطح دسترسی owned و mortal داریم. سطح دسترسی های بیشتری هم برای برقراری امنیت بیشتر در این زبان برنامه نویسی وجود دارد.

  • تبدیل نوع داده‌ای به صورت صریح

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

  • آرایه‌های داخل حافظه

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

  • کتابخانه‌ها

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

  • امکان Import کردن

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

نمونه کد: