forked from CryptozombiesHQ/cryptozombie-lessons
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Farsi Translation (Chapter 1,2,3) (CryptozombiesHQ#472)
* add fa folder for Farsi translation * Translated Chapter 1,2, and mid 3 * finish chapter 3 and reviewed
- Loading branch information
Showing
246 changed files
with
54,003 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
--- | ||
title: ایجاد کارخانه زامبی | ||
header: خوش آمدی انسان! | ||
roadmap: roadmap.jpg | ||
path: solidity | ||
--- | ||
<div dir="rtl"> | ||
|
||
خب فکر میکنی برای کریپتوزامبی شدن آمادهای؟ | ||
|
||
این دوره بهت آموزش میده که چطوری **روی شبکه اتریوم یه بازی بسازی.** | ||
|
||
این دوره برای مبتدیان زبان سالیدیتی طراحی شده، ولی فرض بر اینه که شما تجربه برنامهنویسی با زبانهای دیگر را دارید.(مثلا جاوا اسکریپت) | ||
|
||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
--- | ||
title: آرایهها | ||
|
||
actions: ['بررسی پاسخ', 'راهنمایی'] | ||
material: | ||
editor: | ||
language: sol | ||
startingCode: | | ||
pragma solidity ^0.4.25; | ||
contract ZombieFactory { | ||
uint dnaDigits = 16; | ||
uint dnaModulus = 10 ** dnaDigits; | ||
struct Zombie { | ||
string name; | ||
uint dna; | ||
} | ||
// start here | ||
} | ||
answer: > | ||
pragma solidity ^0.4.25; | ||
contract ZombieFactory { | ||
uint dnaDigits = 16; | ||
uint dnaModulus = 10 ** dnaDigits; | ||
struct Zombie { | ||
string name; | ||
uint dna; | ||
} | ||
Zombie[] public zombies; | ||
} | ||
--- | ||
|
||
<div dir="rtl"> | ||
|
||
زمانی که میخواین یک مجموعه از هر چیزی بسازین، میتونین از **آرایه** استفاده کنین. در سالیدیتی دو نوع آرایه وجود داره: آرایه **ایستا** و آرایه **پویا**: | ||
</div> | ||
|
||
``` | ||
// آرایه دو عنصری ایستا (طول ثابت): | ||
uint[2] fixedArray; | ||
// آرایه ایستای دیگری که میتواند ۵ رشته را نگه دارد: | ||
string[5] stringArray; | ||
// :آرایه پویا- طول ثابت ندارد و میتواند بزرگ شود | ||
uint[] dynamicArray; | ||
``` | ||
|
||
<div dir="rtl"> | ||
|
||
همچنین میتونین از آرایهای از **ساختارها** استفاده کنین. در اینجا از ساختار `Person` از فصل قبل استفاده میکنیم: | ||
</div> | ||
``` | ||
Person[] people; // dynamic Array, we can keep adding to it | ||
``` | ||
<div dir="rtl"> | ||
|
||
|
||
یادتونه که متغیرهای حالت به صورت دائمی در بلاکچین ذخیره میشدند؟ بنابراین ایجاد یک آرایه پویا از ساختارها مثل این میتونه برای ذخیره دادههای ساختاریافته در قرارداد، چیزی شبیه به پایگاه داده، مفید باشه | ||
|
||
## آرایههای عمومی | ||
|
||
شما میتونین یک آرایه را به صورت `عمومی` تعریف کنین، و سالیدیتی بهصورت خودکار یک متد **_getter_** برایش ایجاد میکنه. سینتکس آن به صورت زیر خواهد بود: | ||
</div> | ||
|
||
``` | ||
Person[] public people; | ||
``` | ||
<div dir="rtl"> | ||
|
||
به این ترتیب بقیه قراردادها تنها دسترسی خواندن از این آرایه را خواهند داشت. بنابراین این یک الگوی مناسب برای ذخیره داده عمومی در قرارداد شما است. | ||
|
||
|
||
|
||
# دست به کد شو | ||
|
||
میخواهیم یک ارتش زامبی در اپلیکیشنمان داشته باشیم. و میخواهیم زامبیهامون را به رخ اپلیکیشنهای دیگر بکشیم، بنابراین میخواهیم به صورت عمومی ذخیره بشن. | ||
|
||
۱. یک آرایه عمومی `Zombie` به صورت **_ساختار_** ایجاد کنین، و اسمش رو `zombies` بگذارین. | ||
|
||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
--- | ||
title: ساختارها و آرایهها | ||
actions: ['بررسی پاسخ', 'راهنمایی'] | ||
material: | ||
editor: | ||
language: sol | ||
startingCode: | | ||
pragma solidity ^0.4.25; | ||
contract ZombieFactory { | ||
uint dnaDigits = 16; | ||
uint dnaModulus = 10 ** dnaDigits; | ||
struct Zombie { | ||
string name; | ||
uint dna; | ||
} | ||
Zombie[] public zombies; | ||
function createZombie (string _name, uint _dna) { | ||
// start here | ||
} | ||
} | ||
answer: > | ||
pragma solidity ^0.4.25; | ||
contract ZombieFactory { | ||
uint dnaDigits = 16; | ||
uint dnaModulus = 10 ** dnaDigits; | ||
struct Zombie { | ||
string name; | ||
uint dna; | ||
} | ||
Zombie[] public zombies; | ||
function createZombie (string _name, uint _dna) { | ||
zombies.push(Zombie(_name, _dna)); | ||
} | ||
} | ||
--- | ||
|
||
<div dir="rtl"> | ||
|
||
۱.داخل تابع یه زامبی جدید با عنوان `Zombie`بسازین و اونو به آرایه`zombies` اضافه کنین. اسم `name` و دیانای `dna` زامبی جدید از آرگومانهای تابعمونه. | ||
۲. بیایین کدمونو تو یه خط بنویسیم تا تمیزتر باشه. | ||
|
||
|
||
### ایجاد ساختار جدید | ||
|
||
ساختار `Person` از مثال قبل رو یادتونه؟ | ||
|
||
</div> | ||
|
||
``` | ||
struct Person { | ||
uint age; | ||
string name; | ||
} | ||
Person[] public people; | ||
``` | ||
|
||
|
||
<div dir="rtl"> | ||
|
||
حالا میخوایم یاد بگیریم چطوری `Person`های جدید بسازیم و اونا رو به آرایه `people` (مردم) اضافه کنیم. | ||
|
||
</div> | ||
|
||
``` | ||
// یک شخص جدید ایجاد کنید | ||
Person satoshi = Person(172, "Satoshi"); | ||
// این شخص را به آرایه اضافه کنید | ||
people.push(satoshi); | ||
``` | ||
|
||
|
||
<div dir="rtl"> | ||
|
||
همچنین میتونیم این دو مرحله رو با هم تو یه خط کد بنویسیم تا کدمون تمیزتر باشه: | ||
|
||
</div> | ||
|
||
``` | ||
people.push(Person(16, "Vitalik")); | ||
``` | ||
|
||
|
||
<div dir="rtl"> | ||
|
||
توجه کنین که `array.push()` عنصر جدید رو به **انتها**ی آرایه اضافه میکنه، پس عناصر به ترتیبی که اضافه شدند در آرایه ذخیره میشن. مثال زیر رو ببینین: | ||
|
||
</div> | ||
|
||
``` | ||
uint[] numbers; | ||
numbers.push(5); | ||
numbers.push(10); | ||
numbers.push(15); | ||
// آرایه number در نهایت به این ترتیب میشه [5, 10, 15] | ||
``` | ||
|
||
|
||
|
||
<div dir="rtl"> | ||
|
||
# دست به کد شو | ||
|
||
بیاین کدی بنویسیم که تابع createZombie کاری انجام بده! | ||
|
||
|
||
۱.داخل تابع یه زامبی جدید با عنوان `Zombie`بسازین و اونو به آرایه`zombies` اضافه کنین. اسم `name` و دیانای `dna` زامبی جدید از آرگومانهای تابعمونه. | ||
|
||
۲. بیایین کدمونو تو یه خط بنویسیم تا تمیزتر باشه. | ||
|
||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
--- | ||
title: "قراردادها" | ||
actions: ['بررسی پاسخ', 'راهنمایی'] | ||
material: | ||
editor: | ||
language: sol | ||
startingCode: | | ||
pragma solidity //1. Enter solidity version here | ||
//2. Create contract here | ||
answer: > | ||
pragma solidity ^0.4.25; | ||
contract ZombieFactory { | ||
} | ||
--- | ||
<div dir="rtl"> | ||
|
||
از پایه شروع میکنیم: | ||
|
||
زبان سالیدیتی برای توسعه `قرارداد`ها ایجاد شده. `قرارداد` پایهای ترین بلوک ساختاری اپلیکیشنهای اتریوم است. تمامی متغیرها و توابع به قرارداد تعلق دارند و این میتونه نقطه شروع پروژههاتون باشه. | ||
|
||
این یه نمونه قرارداد خالی به اسم `HelloWorld` است: | ||
</div> | ||
``` | ||
contract HelloWorld { | ||
} | ||
``` | ||
<div dir="rtl"> | ||
## نسخه کامپایلر | ||
|
||
همه کدهای سالیدیتی با عبارت "version pragma" شروع میشن. این عبارت نسخه کامپایلری که اون کد ازش استفاده میکنه رو نشون میده. به دلیل اینکه کامپایلر سالیدیتی در حال توسعه و تغییره، نسخه کامپایلری که هر کد استفاده میکنه رو مشخص میکنیم تا در آینده مشکلی برای کدمون به وجود نیاد. | ||
|
||
به این صورت نوشته میشه: `pragma solidity ^0.4.25;` | ||
|
||
یه جمعبندی کنیم، هر بار که یه پروژهای رو شروع میکنین اولین چیزی که مینویسید اینه: | ||
</div> | ||
``` | ||
pragma solidity ^0.4.25; | ||
contract HelloWorld { | ||
} | ||
``` | ||
<div dir="rtl"> | ||
# دست به کد شو | ||
|
||
برای ایجاد ارتش زامبی، یه قرارداد پایه به اسم `ZombieFactory` بسازین. | ||
|
||
۱. نسخه کامپایلر رو `0.4.25` بذارین. | ||
|
||
۲. یه قرارداد خالی به اسم `ZombieFactory` ایجاد کنین. | ||
|
||
وقتی این مراحل رو انجام دادین روی گزینه "بررسی پاسخ" کلیک کنین و اگر به مشکل خوردین میتونین روی گزینه "راهنمایی" کلیک کنین. | ||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
--- | ||
title: State Variables & Integers | ||
actions: ['بررسی پاسخ', 'راهنمایی'] | ||
material: | ||
editor: | ||
language: sol | ||
startingCode: | | ||
pragma solidity ^0.4.25; | ||
contract ZombieFactory { | ||
//start here | ||
} | ||
answer: > | ||
pragma solidity ^0.4.25; | ||
contract ZombieFactory { | ||
uint dnaDigits = 16; | ||
} | ||
--- | ||
<div dir="rtl"> | ||
|
||
کارتون عالی بود! حالا که با ساختار کلی قرارداد آشنا شدیم بریم ببینیم متغیرها در سالیدیتی چطور تعریف میشن. | ||
|
||
**_متغیرهای حالت(State variables)_** به صورت دائم در حافظه قرارداد ذخیره میشن. یعنی روی بلاکچین اتریوم نوشته میشن. مثل نوشتن تو دیتابیس. | ||
|
||
##### مثال: | ||
</div> | ||
|
||
``` | ||
contract Example { | ||
// This will be stored permanently in the blockchain | ||
uint myUnsignedInteger = 100; | ||
} | ||
``` | ||
<div dir="rtl"> | ||
|
||
در این قرارداد نمونه، یک `uint` به اسم `myUnsignedInteger` ایجاد کردیم و مقدارش رو ۱۰۰ گذاشتیم. | ||
|
||
## اعداد صحیح بدون علامت: `uint` | ||
|
||
نوع داده `uint` برای نمایش و ذخیره اعداد بدون علامته ینی **مقدارش حتما باید نامنفی باشه**. برای ذخیره اعداد علامتدار از `int` استفاده میکنیم. | ||
</div> | ||
<div dir="rtl"> | ||
|
||
> نکته: در سالیدیتی `uint`، نام مستعار nt256` است، یک عدد صحیح بدون علامت ۲۵۶ بیتی. میتونین uintها رو با تعداد بیت کمتری هم ذخیره کنین- `uint8`، `uint16`، `uint32` و الی آخر. اما در کل معمولا از `uint` استفاده میشه جز در موارد خاصی که بعدا دربارهش صحبت میکنیم. | ||
</div> | ||
<div dir="rtl"> | ||
|
||
# دست به کد شو | ||
|
||
قراره DNA زامبی ما یک عدد ۱۶ بیتی باشه. | ||
|
||
یک `uint` به اسم `dnaDigits` با مقدار ۱۶ بسازین. | ||
|
||
</div> |
Oops, something went wrong.