برنامه نویسی

معرفی زبان برنامه نویسی Ruby 

Ruby یک زبان برنامه‌نویسی است که در دهه ۱۹۹۰ توسط یوکیهیرو ماتسوموتو (Yukihiro Matsumoto) در ژاپن توسعه داده شد. او هدف خود را برای طراحی یک زبان برنامه‌نویسی ساده، قابل فهم و لذت‌بخش برای برنامه‌نویسان قرار داد.

یکی از ویژگی‌های برجسته Ruby، خوانایی بالا و نحو قوی آن است. Ruby با تأکید بر خوانایی کدها، می‌کوشد تا برنامه‌نویسان را در خلق کدی قابل فهم و پشتیبانی‌پذیر یاری دهد. این زبان از پارادایم‌های متعددی مانند برنامه‌نویسی شیءگرا، برنامه‌نویسی فانکشنال و برنامه‌نویسی ساختارمند پشتیبانی می‌کند.

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

اکوسیستم Ruby بسیار پویا و پربار است و شامل یک مجموعه گسترده از کتابخانه‌ها و فریم‌ورک‌ها است. Ruby on Rails، یکی از معروف‌ترین فریم‌ورک‌های توسعه وب بر پایه Ruby است که به برنامه‌نویسان کمک می‌کند تا به سرعت برنامه‌های تحت وب قوی و پویا را ایجاد کنند.

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

Ruby on Rails چیست؟

Ruby on Rails (معمولاً به صورت Rails یا RoR شناخته می‌شود) یک فریم‌ورک توسعه وب بر پایه زبان برنامه‌نویسی Ruby است. این فریم‌ورک توسط دیوید هانسون (David Heinemeier Hansson) در سال ۲۰۰۴ ایجاد شد و از آن زمان به عنوان یکی از فریم‌ورک‌های محبوب و قدرتمند برای توسعه برنامه‌های وب مورد استفاده قرار می‌گیرد.

Rails بر اساس الگوی طراحی MVC (Model-View-Controller) عمل می‌کند که به تقسیم وظایف برنامه به بخش‌های مدل (Model)، نمایش (View) و کنترل‌کننده (Controller) کمک می‌کند. این الگوی طراحی به ترتیب مسئولیت‌های داده‌ها، نمایش و روابط بین آن‌ها را تعیین می‌کند. این تقسیم بندی منطقی وظایف کمک می‌کند تا کد قابل نگهداری، تست و توسعه باشد.

Rails برخلاف بسیاری از فریم‌ورک‌های دیگر، از اصول “تعیین توسط توافق” (Convention over Configuration) پیروی می‌کند. این به معنای آن است که با تعیین یک سری قواعد و توافقات، Rails به‌طور خودکار تصمیم‌گیری‌های معمول را برای توسعه برنامه‌ها انجام می‌دهد. این باعث می‌شود که برنامه‌نویسان کمتر درگیر تنظیمات و پیکربندی‌های جزئی شوند و بیشتر تمرکز خود را بر روی توسعه ویژگی‌های برنامه بگذارند.

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

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

…برای برنامه‌نویسانی که قبلاً با فریم‌ورک‌های دیگر کار کرده‌اند، یکمی چالش‌بر باشد. اما با یادگیری مفاهیم اساسی و آشنایی با روش‌های کار با Rails، می‌توانید به سرعت به توسعه برنامه‌های وب پرداخته و از امکانات آن بهره‌برداری کنید.

Ruby چه کاربردی در برنامه نویسی دارد؟

توسعه وب: Ruby به خصوص در توسعه برنامه‌های وب بسیار محبوب است. با استفاده از فریم‌ورک Ruby on Rails، می‌توانید به سرعت و با کد قابل نگهداری برنامه‌های وب پویا و اپلیکیشن‌های تحت وب را ایجاد کنید. Rails دارای امکاناتی مانند مدیریت پایگاه داده، مدیریت جلسات، امنیت و رفتارهای پیش‌فرض است که توسعه را آسان‌تر می‌کند.

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

توسعه نرم‌افزار دسکتاپ: با استفاده از فریم‌ورک‌هایی مانند Shoes یا FXRuby، می‌توانید برنامه‌های دسکتاپ مستقل با رابط کاربری گرافیکی (GUI) را با استفاده از Ruby توسعه دهید. این کاربرد عموماً برای ایجاد ابزارهای داخلی، برنامه‌های مدیریت و ابزارهای تحلیلی مورد استفاده قرار می‌گیرد.

توسعه بازی: Ruby به صورت گسترده در توسعه بازی‌ها استفاده نمی‌شود، اما با وجود فریم‌ورک‌هایی مانند Gosu و Rubygame، می‌توانید بازی‌های ساده و متوسط را با Ruby برنامه‌نویسی کنید.

توسعه موبایل: با استفاده از فریم‌ورک‌هایی مانند RubyMotion، می‌توانید برنامه‌های موبایل برای سیستم‌عامل‌های iOS و Android را با استفاده از Ruby توسعه دهید.

در کل، Ruby یک زبان برنامه‌نویسی چندمنظوره است و می‌تواند در بسیاری از حوزه‌های برنامه‌نویسی مورد استفاده قرار بگیرد. قدرت و خوانایی آن، همراه با فریم‌ورک‌های قوی مثل Ruby on Rails، آن را به یکی از ابزارهای محبا دروازه برنامه‌نویسی تبدیل کرده است.

چه فریم‌ورک‌های برای توسعه وب با Ruby وجود دارند؟

علاوه بر Ruby on Rails، چندین فریم‌ورک دیگر نیز برای توسعه وب با استفاده از Ruby وجود دارند. در زیر، تعدادی از این فریم‌ورک‌ها را بررسی می‌کنیم:

Sinatra: یک فریم‌ورک سبک و انعطاف‌پذیر برای توسعه وب است. با Sinatra می‌توانید برنامه‌های وب ساده و سریع را با حداقل اجزا و کد نوشته شده به سرعت توسعه دهید. این فریم‌ورک برای ساخت API ها و وب‌سرویس‌ها نیز بسیار مناسب است.

(قبلاً Lotus): Hanami یک فریم‌ورک وب با قابلیت‌های مشابه Rails است. با Hanami، می‌توانید برنامه‌های وب پویا و قابل گسترش را ایجاد کنید. این فریم‌ورک از معماری “تعیین شده توسط توافق” استفاده می‌کند و به برنامه‌نویسان امکان می‌دهد بر روی جزئیات پیکربندی تمرکز کمتری داشته باشند.

Padrino: یک فریم‌ورک کامل و قدرتمند بر پایه Sinatra است. این فریم‌ورک برای توسعه برنامه‌های وب پیچیده و بزرگ با قابلیت‌های مانند مدیریت پایگاه داده و سیستم ماژولار بسیار مناسب است.

Cuba: Cuba نیز یک فریم‌ورک سبک و سریع بر پایه Rack است. با استفاده از Cuba می‌توانید برنامه‌های وب ساده و خط‌مشی‌دار را توسعه دهید. این فریم‌ورک به شما اجازه می‌دهد تا به صورت دستی بر روی مسیریابی و نمایش صفحات کنترل داشته باشید.

همچنین، در کنار این فریم‌ورک‌ها، برخی ابزارها و کتابخانه‌های دیگر نیز برای توسعه وب با Ruby وجود دارند که به شما امکانات و قابلیت‌های متنوعی را فراهم می‌کنند. با توجه به نیازها و الزامات پروژه خود، می‌توانید از این ابزارها استفاده کنید.

قابلیت ORM در Ruby

ORM به عنوان یک قابلیت مهم در زبان برنامه‌نویسی Ruby شناخته شده است. در Ruby، ActiveRecord به عنوان یک ORM بسیار قدرتمند و محبوب استفاده می‌شود. ActiveRecord به صورت پیش‌فرض در فریم‌ورک Ruby on Rails مورد استفاده قرار می‌گیرد، اما می‌توانید آن را در پروژه‌های Ruby مستقل نیز استفاده کنید.

ActiveRecord امکاناتی برای تعامل با پایگاه داده فراهم می‌کند و به برنامه‌نویسان اجازه می‌دهد تا با استفاده از کلاس‌ها و اشیاء Ruby با داده‌های پایگاه داده کار کنند. برخی از قابلیت‌های ORM ActiveRecord در Ruby عبارتند از:

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

عملیات CRUD: با استفاده از ActiveRecord، می‌توانید عملیات ایجاد (Create)، خواندن (Read)، به‌روزرسانی (Update) و حذف (Delete) را بر روی رکوردهای پایگاه داده انجام دهید. این عملیات به سادگی با استفاده از متدهایی مانند create، find، update و destroy در ActiveRecord قابل انجام است.

روابط بین جداول: ActiveRecord امکان تعریف روابط میان جداول را فراهم می‌کند. شما می‌توانید روابط یک به چند (One-to-Many)، چند به یک (Many-to-One) و چند به چند (Many-to-Many) را بین مدل‌ها تعریف کنید و با استفاده از متدهایی مانند has_many، belongs_to و has_and_belongs_to_many، روابط را مدیریت کنید.

مهاجرت پایگاه داده: ActiveRecord به شما امکان می‌دهد تا تغییرات ساختاری در پایگاه داده را با استفاده از مهاجرت‌ها (Migrations) مدیریت کنید. با استفاده از مهاجرت‌ها، می‌توانید جداول جدید را ایجاد، فیلدها و روابط را تغییر دهید و تغییرات را به پایگاه داده اعمال کنید.

این فقط برخی از قابلیت‌های ORM ActiveRecord در Ruby هستند. Ruby دارای انواع دیگری از ORM همچون DataMapper و Sequel نیز است که می‌تکنید. اما ActiveRecord به عنوان ORM پیش‌فرض در فریم‌ورک Ruby on Rails استفاده می‌شود و بسیار قدرتمند و گسترده است.

آموزش نصب Ruby

برای نصب Ruby، شما می‌توانید از روش‌های مختلفی استفاده کنید، اعم از استفاده از مدیر بسته‌های سیستم عامل، استفاده از مدیریت کننده بسته مانند rbenv یا RVM، یا حتی استفاده از بسته‌های نصب شده مسبب از پیش. در ادامه، من دو روش رایج برای نصب Ruby را توضیح می‌دهم.

نصب Ruby با استفاده از rbenv:

قدم ۱: نصب و راه‌اندازی rbenv:

برای نصب rbenv، ابتدا بسته‌های پیشنیاز را نصب کنید. برای سیستم‌عامل‌های مبتنی بر Debian/Ubuntu این دستور را اجرا کنید:

sudo apt-get update sudo apt-get install rbenv build-essential libssl-dev libreadline-dev zlib1g-dev

برای سیستم‌عامل‌های مبتنی بر macOS، شما می‌توانید از Homebrew استفاده کنید:

brew update brew install rbenv

برای سیستم‌عامل‌های دیگر، می‌توانید به مستندات rbenv مراجعه کنید.

قدم ۲: نصب Ruby با rbenv:

بعد از نصب و راه‌اندازی rbenv، می‌توانید نسخه مورد نظر Ruby را نصب کنید. برای مثال، برای نصب Ruby 2.7.4، این دستورات را اجرا کنید:

rbenv install 2.7.4

پس از اتمام نصب، نسخه Ruby مورد نظر شما باید در دسترس باشد. برای تنظیم آن به عنوان نسخه پیش‌فرض، این دستور را اجرا کنید:

rbenv global 2.7.4

برای بروزرسانی PATH محل نصب Ruby، این دستور را اجرا کنید:

rbenv rehash

حالا می‌توانید با اجرای دستور ruby -v ورژن نصب شده Ruby را بررسی کنید.

نصب Ruby با استفاده از RVM:

قدم ۱: نصب و راه‌اندازی RVM:

برای نصب RVM، دستور زیر را در ترمینال اجرا کنید:

\curl -sSL https://get.rvm.io | bash -s stable

پس از نصب، دستور زیر را برای بارگیری تنظیمات RVM اجرا کنید:

 source ~/.rvm/scripts/rvm

قدم ۲: نصب Ruby با RVM:

می‌توانید نسخه مورد نظر Ruby را با دستور زیر نصب کنید. برای مثال، برای نصب Ruby 2.7.4، این دستور را اجرا کنید:

rvm install 2.7.4

پس از اتمام نصب، می‌توانید با استفاده از دستور rvm use 2.7.4 ازنسخه Ruby 2.7.4 استفاده کنید. همچنین، می‌توانید با استفاده از دستور rvm --default use 2.7.4 آن را به عنوان نسخه پیش‌فرض تنظیم کنید.

حالا می‌توانید با اجرای دستور ruby -v ورژن نصب شده Ruby را بررسی کنید.

این دو روش، rbenv و RVM، از مدیریت نسخه‌های مختلف Ruby بر روی سیستم شما پشتیبانی می‌کنند و به شما امکان می‌دهند نسخه مورد نیاز را انتخاب کنید و مدیریت کنید. با انتخاب یکی از این روش‌ها، می‌توانید Ruby را بر روی سیستم خود نصب کنید و از آن استفاده کنید.

نوشتن Hello, World! با Ruby

به روبی، نوشتن “Hello, World!” بسیار آسان است. اینجا یک نمونه کد Ruby برای نمایش رشته “Hello, World!” است:

puts "Hello, World!"

شما می‌توانید این کد را در یک فایل با پسوند .rb ذخیره کنید، مانند hello.rb، و سپس آن را اجرا کنید. برای اجرای فایل Ruby، از دستور زیر در ترمینال استفاده کنید:

ruby hello.rb

پس از اجرای این دستور، خروجی “Hello, World!” روی ترمینال نمایش داده خواهد شد.

آموزش متد: reduce, each وprime در Ruby 

بطور خلاصه، متد‌های reduce، each و prime در Ruby عملکردهای مختلفی را اجرا می‌کنند. در ادامه به طور مفصل توضیح می‌دهم که هر یک از این متدها چه کاری انجام می‌دهند:

  1. متد reduce:
    متد reduce برای کاهش یک مجموعه از عناصر به یک مقدار تکی استفاده می‌شود. این متد یک بلوک کد را به عنوان پارامتر دریافت می‌کند و در هر مرحله، عنصر فعلی و نتیجه قبلی را به عنوان ورودی به بلوک ارسال می‌کند. مقدار نهایی بر اساس عمل مشخص در بلوک برگشت داده می‌شود.
    نمونه کد زیر نشان می‌دهد چگونه متد reduce برای جمع عناصر یک آرایه استفاده می‌شود:
   numbers = [1, 2, 3, 4, 5]
   sum = numbers.reduce(0) { |result, num| result + num }
   puts sum

در این مثال، مقدار اولیه ۰ به عنوان آرگومان اول به reduce ارسال می‌شود و در هر مرحله، عنصر فعلی num به عنوان آرگومان دوم به بلوک ارسال می‌شود. در نهایت، مقدار تجمعی عناصر، یعنی جمع اعداد از ۱ تا ۵ (۱ + ۲ + ۳ + ۴ + ۵ = ۱۵)، در متغیر sum قرار می‌گیرد و در خروجی نمایش داده می‌شود.

  1. متد each:
    متد each برای اجرای یک بلوک کد بر روی هر عنصر یک مجموعه استفاده می‌شود. این متد برای حلقه‌ای شبیه به حلقه for یا foreach در زبان‌های دیگر استفاده می‌شود. متد each برخلاف reduce، نتیجه‌ای را برنمی‌گرداند و فقط بلوک کد را بر روی هر عنصر اجرا می‌کند.
    نمونه کد زیر نشان می‌دهد چگونه متد each بر روی عناصر یک آرایه اجرا می‌شود:
   numbers = [1, 2, 3, 4, 5]
   numbers.each { |num| puts num }

در این مثال، بلوک کد puts num برای هر عنصر در آرایه اجرا می‌شود و عناصر به ترتیب در خروجی نمایش داده می‌شوند.

  1. متد prime:
    در Ruby، متد prime? برای بررسی اینکه آیا یک عدد اول است یا نه، استفاده می‌شود. این متد بر رای عدد را به عنوان ورودی دریافت می‌کند و true یا false را برمی‌گرداند براساس اینکه آیا عدد مورد نظر اول است یا خیر.
    نمونه کد زیر نشان می‌دهد چگونه متد prime? برای بررسی عدد اول بودن یک عدد استفاده می‌شود:
   require 'prime'

   number = 7

   if number.prime?
     puts "#{number} is a prime number"
   else
     puts "#{number} is not a prime number"
   end

در این مثال، عدد ۷ به عنوان ورودی به متد prime? ارسال می‌شود و بررسی می‌شود که آیا عدد ۷ اول است یا خیر. در این حالت، عدد ۷ یک عدد اول است، بنابراین پیام “۷ is a prime number” در خروجی نمایش داده می‌شود.

چه فرقی بین Ruby و Python وجود داره؟

Ruby و Python هر دو زبان‌های برنامه‌نویسی قدرتمند و پرکاربرد هستند، اما تفاوت‌هایی در مورد طراحی و خصوصیات آن‌ها وجود دارد. در ادامه، تفاوت‌های برخی جنبه‌های اصلی بین Ruby و Python را بررسی می‌کنیم:

نحو و سینتکس:

  • Ruby: Ruby به عنوان یک زبان برنامه‌نویسی دیینامیک شناخته می‌شود و دارای نحوی غنی و زیبا است. طراحی Ruby بر پایه اصول “خوانا بودن” و “کد زیبا” قرار دارد و از نظر نحوی به صورت مشابهی با زبان انگلیسی است. همچنین، Ruby از “بلاک‌ها” و “فلوآر” برای نشان دادن بخش‌های کدی و جریان برنامه استفاده می‌کند.
  • Python: Python نیز یک زبان برنامه‌نویسی خوانا و زیبا است، اما به نسبت Ruby، سینتکس آن به صورت مقداری ساده‌تر است. Python از “فضاهای سفید” برای تعیین بلوک‌ها و “دستورات منظم” برای جریان برنامه استفاده می‌کند.

عکس‌العمل به خطاها:

  • Ruby: Ruby در مواجهه با خطاها به شکل استثنائات عمل می‌کند (exception-based). این بدان معنی است که هرگونه خطا یا استثناء می‌تواند توسط بلاک‌های begin و rescue در دستورات کد پیگیری شوند و برنامه بتواند به طور معمول ادامه یابد.
  • Python: Python نیز از مکانیزم استثنائات برای رسیدگی به خطاها استفاده می‌کند. اما در Python، استثناء‌ها بیشتر به عنوان “شیء” هستند و برای رسیدگی به آن‌ها از بلاک‌های try، except و finally استفاده می‌شود.

پایگاه‌های داده:

  • Ruby: در Ruby، یکی از پرکاربردترین پایگاه‌های داده محبوب برای استفاده با Ruby on Rails، PostgreSQL است. با این حال، Ruby همچنین از پایگاه‌های داده دیگری مانند MySQL و SQLite پشتیبانی می‌کند.
  • Python: Python نیز از پایگاه‌های داده متنوعی پشتیبانی می‌کند، از جمله SQLite، MySQL، PostgreSQL، Oracle و MongoDB. با استفاده از کتابخانه‌هایی مانند Django و SQLAlchemy، برنامه‌نویسان Python می‌توانند به راحتی با این پایگاه‌های داده ارتباط برقرار کنند.

فریمورک‌ها:

  • Ruby: Ruby به دلیل وجود فریمورک قدرتمند Ruby on Rails (RoR) شناخته می‌شود. RoR محبوبیت زیادی در جهان برنامه‌نویسی وب پیدا کرده است و ابزارهای قدرتمندی برای توسعه سریع وبسایت‌ها و برنامه‌های وب ارائه می‌دهد.
  • Python: Python نیز دارای فریمورک‌های مشهوری برای توسعه وب است، مانند Django و Flask. Django یک فریمورک وب قدرتمند است که برای توسعه برنامه‌های وب پیچیده و بزرگ مورد استفاده قرار می‌گیرد. Flask به عنوان یک فریمورک سبک‌تر و انعطاف‌پذیرتر شناخته می‌شود و برای توسعه برنامه‌های کوچکتر و ساده‌تر مناسب است.

جامعه و منابع:

  • Ruby: Ruby یک جامعه فعال و پرشور برنامه‌نویسان دارد، به خصوص در زمینه توسعه وب. مستندات و منابع آموزشی غنی برای Ruby و Ruby on Rails وجود دارد.
  • Python: Python دارای یکی از بزرگترین جوامع برنامه‌نویسی است. منابع آموزشی فراوانی برای Python و کتابخانه‌ها و فریمورک‌های مختلف آن وجود دارد. همچنین، Python در حوزه‌های مختلفی مانند علم داده، هوش مصنوعی و اینترنت اشیا نیز بسیار پرکاربرد است.

استفاده در حوزه‌های کاربردی:

  • Ruby: Ruby به خصوص در توسعه وب و برنامه‌نویسی وب محبوبیت بالایی دارد. Ruby on Rails به عنوان یک فریمورک وب قدرتمند و انعطاف‌پذیر، استفاده گسترده‌ای در صنعت وب دارد. همچنین، Ruby در حوزه توسعه بازی‌های ویدیویی نیز کاربرد دارد.
  • Python: Python در بسیاری از حوزه‌های کاربردی مورد استفاده قرار می‌گیرد. از جمله، توسعه وب، علم داده، هوش مصنوعی، اینترنت اشیا، اسکریپت نویسی، توسعه برنامه‌های سیستم و غیره.

در کل، هر دو Ruby و Python زبان‌های برنامه‌نویسی قدرتمند و پرکاربردی هستند و تفاوت‌هایی در نحو و سینتکس، فریمورک‌ها، پایگاه‌های داده و زمینه‌های کاربرد

جمع بندی:

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

امیدوارم این مقاله برایتان مفید بوده باشد و شما را به یادگیری Ruby تشویق کرده باشد. اگر سوالی دارید یا نیاز به راهنمایی بیشتر دارید، از قسمت نظرات با ما در ارتباط باشید.

پوریا گودرز

پوریا گودرز هستم‌ علاقه مند به مباحث‌ و‌‌ مشکلات مربوط به تکنولوژی و فناوری. همچنین اندک آشنایی در زمینه گرافیک دارم. امیدوارم بتونم مشکلات شما رو در این مباحث حل کنم . انتقادات خود را از بخش نظرات با من در میان بگذارید :)

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *