فرق سیشارپ و جاوااسکریپت در یونیتی/مقایسه سیشارپ و جاوااسکریپت_
دوشنبه, ۳۰ شهریور ۱۳۹۴، ۰۸:۰۲ ب.ظ
منبع: gameover.blog.ir
چطور سیشارپ و جاوااسکریپت رو یادبگیریم ؟
چون بچه های زیادی مشکل داشتن تصمیم گرفتم کمی توضیح بدم :
واسه یادگیری سیشارپ باید CPP بلد باشید. ساختار سیشارپ همونه فقط یه سری چیزا اضافه میشه،که اونم خلاصه یاد میدم.
واسه یادگیری js هم کمی پاسکال بلد باشید و همون c کافیه.
یه مقایسه سطحی میندازم روی دستورات سی پلاس پلاس و سیشاپ و جاوااسکریپت
یا همون js (دقت کنید js رو با JAVA اشتباه نگیرید چون جاوا یه زبون
جداست که js زیرمجموعه ی JAVA میشه و ساختار JAVA رو بعدا یاد می دم اگه
نیازی بود)
* در CPP یا C وقتی بخوایم یه فایل کتابخونه ای رو ضمیمه کنیم از دستور include استفاده می کنیم که ابتدای برنامه می یاریمش.
مثال :
کد:
روش اول:
#include <iostream.h>
روش دیگر :
#include "stdio.h"
* در JS نیازی به بار یا ضمیمه کردن فایل های کتابخونه ای نیست و خود انجین وظیفه داره هر فایلی رو که نیاز بود ضمیمه کنه پس ساده تر هست از این جهت کدنویسی کمتر.
* در csharp از using استفاده می کنیم برای افزودن فضای نام یا namespace یا همون کلاس هایی که توی اسکریپت هاو برناممون می خوایم از اونا استفاده کنیم.
مثال:
کد:
using UnityEngine;
using System.Collections;
این دو تا رو میاریم چون بیشتر کدهایی که می نویسیم توابع یا دستوراتی هستن که توی کلاس UnityEngine و کلاس Collections (که خودش زیر مجموعه ی کلاس System میشه) تعریفشون وجود داره.
البته اگه این دستورات رو نیاریم دیگه هرکدی که می نویسیم دقیقا بدونیم توی کدوم کلاس تعریف شده .
به عنوان مثال وقتی از دستور Debug.Log برای چاپ یه پیام استفاده می کنیم باید اونو به صورت UnityEngine.Debug.Log بیاریم چون تابع Log در کلاس Debug تعریف شده و کلاس Debug هم در کلاس UnityEngine تعریف شده.
کلاس MonoBehaviour هم که در کلاس UnityEngine تعریف شده پس اگه فضای نام UnityEngine رو بالای برنامه ضممیه نکنیم باید به صورت UnityEngine.MonoBehaviour بیاد.
دستوراتی که در کلاس های دیگه تعریف شده رو هم باید شناخت و اسم کلاسشون رو بیاریم و بعدش علامت نقطه بزنیم و توابع زیرشاخه ی اونا رو که لیست میشه شناسایی کنیم که این کار چون شلوغ کاری هست از فضای نام استفاده می کنیم تا خلاصه بشه(یعنی همون آوردن اسم کلاس های مادر اونا که در بالا با using ضمیمه می کنیم)
مثال :
توی سیشارپ اگه بخوام اسکریپتی بسازم که پیام "Hello Promakers.ir " رو چاپ کنه کد اینطوری میشه:
کد PHP:
//using UnityEngine;
//using System.Collections;
public class NewBehaviourScript : UnityEngine.MonoBehaviour {
// Use this for initialization
void Start () {
UnityEngine.Debug.Log("Hello promakers.ir");
}
// Update is called once per frame
void Update () {
}
}
می بینید فضای نام رو گذاشتم جزو توضیحات که بعد از دو تا علامت اسلش(//) آوردم(توضیحات چند خطی هم بین /**/ میاد که اینا همون ساختار سی پلاس پلس هست که اینجا نباید درس بدم توی بخش c بپرسید )
اگه در کد فوق دو خط زیر حزو توضیحات نباشه:
کد:
//using UnityEngine;
//using System.Collections;
کد معادل:
کد PHP:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : UnityEngine.MonoBehaviour {
// Use this for initialization
void Start () {
UnityEngine.Debug.Log("Hello promakers.ir");
}
// Update is called once per frame
void Update () {
}
}
کد PHP:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
Debug.Log("Hello promakers.ir");
}
// Update is called once per frame
void Update () {
}
}
--
از تفاوت های دیگه زبان js و سیشارپ اینه که توی js متغیرها رو به این صورت تعریف می کنیم:
کد:
var varName:varType[=defaultVal];
قسمتی که توی [] اوردم شال مقدار پیشفرض متغیر میشه و اختیاری هست. توضیح هم نمی دم روی کد چون اسم خوبی گذاشتم به فارسی انگلیسی(فینگلیش) واضح هست.
در سیشارپ اول نوع متغیر میاد و بعدش اسم متغیر و بعدش علامت انتساب(=) و بعدش مقدار پیش فرض که مساوی و مقدار دادن اختیاری هست. قبل از نوع متغیر هم میشه کلمات public و private رو اورد که به معنی سراسری و خصوصی هست. فرقشون اینه که متغیر سراسری در تمام توابع شناخته شده هست و می تونیم به مقدار اون متغیر دسترسی داشته باشیم ولی نوع خصوصی فقط داخل همون تابع.
مثال :
کد:
public bool render_mesh_normaly = true;
private bool render_lines_1st = true;
نکته آخر: یاد گیری زبان های js و csharp بسیار ساده است ولی احتیاج به دانش کلی داره. وقتی کل ساختار یک زبان رو یاد بگیریم دیگه نیازی به حفظ کردن نداریم. کافیه الگو رو از اینترنت درآریم و نحوه ی استفاده از اونا رو درک کنیم . یا یک مثال ببینیم و کمی تحقیق کنیم.
معمولا زمانی که برامون سوالی پیش می یاد بسته به اون سوالمون سعی می کنیم در امر یادگیری پیش روی کنیم در غیر اینصورت اگه بخوایم کل زبان سیشارپ و تمامی مسائل رو حل کنیم باید بگم یک شبه نمیشه. شما ساختار سی پلاس پلاس رو یاد بگیرید بعدش بیاید ببینید سیشارپ چقدر آسونه.
یکی از خصوصیات دیگه ی سیشارپ و قدرتش نسبت به cPP اینه که مثلا وقتی می خوایم تبدیل متغیر انجام بدیم می تونیم بعد از اسم اون متغیر یه نقطه بذارم و بعدش تابع مورد نظر رو انتخاب کنیم. چون خود اسم متغیرها هم نوعی کلاس محسوب می شن که زیر توابعی عضو خودشون دارن . مثلا اگه متغیری از نوع int تعریف کرده باشیم به اسم number برای تبدیلش به رشته ی عددی و برگشت مقدار تبدیل شده می نویسیم num.toString() و و یا تبدیل float به int می نویسیم varName.toByte() و الی آخر.
در مورود خوندن کتاب هم خیلیا مراجعه می کنن باید بگم فقط زبان c و cpp و سپس js رو درک کنید دیگه همه چیز زیبامیشه براتون.
من حتی سیشارپ رو خوب نمی دونستم و کمی فکر کردم دیدم همون CPP هست ولی با قابلیت های تازه تر (در حقیقت سیشارپ ورژن جدید CPP هست از نظر من و اگر چه اینطور نیست و CPP یه جاهایی لازمه ولی به هر حال نظر شخصیمه و فعلا بپذیرید)
اینا تازه خیلی چیزای مسخره و ساده بود.
بعدش چیزای پیشرفته توی سایتای مختلف بگردید مفاهیم thread و delegate و خیلی خیلی چیزای جدید دیگه که هی دات نت به روز میشه. و شما باید برنامه های بهینه و سرعتی مثل تلگرام بسازید
موفق باشید
۹۴/۰۶/۳۰