|
1 | | -# در آمدی بر جاوااسکریپت |
| 1 | +# مقدمهای بر جاوااسکریپت |
2 | 2 |
|
3 | 3 | در اینجا به قابلیتهای جاوااسکریپت، اینکه به واسطه آن چه کارهایی میتوان انجام داد و چه تکنولوژیهایی با آن به خوبی کار میکنند، نگاهی میاندازیم. |
4 | 4 |
|
5 | 5 | ## جاوااسکریپت چیست |
6 | 6 |
|
7 | | -جاوااسکریپت در ابتدا به منظور **زنده کردن صفحات وب** ساخته شد. |
| 7 | +جاوااسکریپت در ابتدا به منظور **جان دادن به صفحات وب** ساخته شد. |
8 | 8 |
|
9 | | -برنامههایی که در این زبان نوشته میشوند را اصطلاحا **اسکریپت** مینامند، که میتوان آن را مستقیما در یک سند HTML نوشت و به صورت خودکار با بارگذاری صفحه، اجرا میشوند. |
| 9 | +برنامههایی که در این زبان نوشته میشوند را اصطلاحا **اسکریپت (script)** مینامند، که میتوان آن را مستقیما در یک سند HTML نوشت و به صورت خودکار با بارگذاری صفحه، اجرا میشوند. |
10 | 10 |
|
11 | | -**اِسکریپتها** نیازی به آمادهسازی (Compilation) ندارند و فقط کافیست آنها را به صورت متنی در یک فایل (Plain Text) بنویسیم. |
| 11 | +**اِسکریپتها** نیازی به Compilation ندارند و فقط کافیست آنها را به صورت متنی در یک فایل (Plain Text) بنویسیم. |
12 | 12 |
|
13 | | -از این نظر جاوااسکریپت تفاوت زیادی با زبان [جاوا](https://en.wikipedia.org/wiki/Java_(programming_language)) دارد . |
| 13 | +از این نظر جاوااسکریپت تفاوت زیادی با زبان [جاوا](https://en.wikipedia.org/wiki/Java_(programming_language)) دارد. |
14 | 14 |
|
15 | 15 | ```smart header="چرا به آن <u>جاوا</u>اسکریپت میگویند؟" |
16 | | -جاوااسکریپت در زمان تولد، «LiveScript» نامیده میشد. اما در آن زمان زبانی به نام [جاوا](https://fa.wikipedia.org/wiki/جاوا) محبوبیت فراوانی داشت، به همین منظور تصمیم بر آن شد تا برای آن (جاوا) برادری جوانتر قرار دهند. |
| 16 | +جاوااسکریپت در زمان تولد، «LiveScript» نامیده میشد. اما در آن زمان زبانی به نام [جاوا](https://fa.wikipedia.org/wiki/جاوا) محبوبیت فراوانی داشت، به همین منظور تصمیم بر آن شد تا برای جاوا برادری جوانتر قرار دهند. |
17 | 17 |
|
18 | 18 | اما با توسعه روز افزون جاوااسکریپت، این زبان کاملا مستقل، و دارای استانداری به نام [اِکمااسکریپت (EcmaScript)](https://fa.wikipedia.org/wiki/اکما_اسکریپت) شد و اکنون هیچ ارتباطی با زبان جاوا ندارد. |
19 | 19 | ``` |
20 | 20 |
|
21 | 21 | در حال حاضر جاوااسکریپت نه تنها در مرورگرهای وب، بلکه در سمت سِرور هم قابلیت اجرایی دارد. عملا در هر محیطی که [موتور جاوااسکریپت](https://fa.wikipedia.org/wiki/موتور_جاوااسکریپت) وجود داشته باشد، این زبان قابلیت اجرا شدن را داراست. |
22 | 22 |
|
23 | | -مرورگرهای وب دارای موتوری داخلی برای اجرای جاوااسکریپت هستند، که گاهی آن را **ماشین مجازی جاوااسکریپت** نیز مینامند. |
| 23 | +مرورگرهای وب دارای موتوری داخلی برای اجرای جاوااسکریپت هستند، که گاهی آن را **ماشین مجازی جاوااسکریپت (JavaScript virtual machine)** نیز مینامند. |
24 | 24 |
|
25 | | -موتورهای مختلف دارای «اسم رمز» خاص خود هستند، برای نمونه : |
| 25 | +موتورهای مختلف دارای «codenameهای» خاص خود هستند، برای نمونه : |
26 | 26 |
|
27 | 27 | - [V8](https://fa.wikipedia.org/wiki/%D9%88%DB%8C%DB%B8_(%D9%85%D9%88%D8%AA%D9%88%D8%B1_%D8%AC%D8%A7%D9%88%D8%A7%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA)) برای مرورگرهای کروم، اُپِرا و Edge. |
28 | | -- [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) برای مرورگر فایرفاکس |
29 | | -- اسم رمزهای دیگری چون «Chakra» برای نسخههای مختلف IE، «JavaScriptCore»، «Nitro» و «SquireFish» برای مرورگر سافاری وجود دارند. |
| 28 | +- [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) برای مرورگر فایرفاکس |
| 29 | +- codenameهای دیگری چون «Chakra» برای نسخههای مختلف IE، «JavaScriptCore»، «Nitro» و «SquireFish» برای مرورگر سافاری وجود دارند. |
30 | 30 |
|
31 | | -بخاطر سپردن این نامها مفید هستند، چراکه در مقالات مختلف توسعه دهندگان به آنها بر خواهید خورد. ما هم از آنها استفاده خواهیم کرد. زمانی که ما در این آموزش برای نمونه میگوییم ویژگی X توسط موتور «V8» پشتیبانی میشود، یعنی به احتمال زیاد در مرورگرهای کروم و اپرا پشتیبانی خواهد شد. |
| 31 | +بخاطر سپردن این نامها مفید هستند، چراکه در مقالات مختلف توسعهدهندگان به آنها بر خواهید خورد. ما هم از آنها استفاده خواهیم کرد. زمانی که ما در این آموزش برای نمونه میگوییم ویژگی X توسط موتور «V8» پشتیبانی میشود، یعنی به احتمال زیاد در مرورگرهای کروم و اپرا پشتیبانی خواهد شد. |
32 | 32 |
|
33 | 33 | ```smart header="موتورها چگونه کار میکنند؟" |
34 | 34 |
|
35 | | -موتورها پیچیده هستند، ولی اساس آنها ساده است. |
| 35 | +موتورها پیچیده هستند، ولی اساس آنها ساده است. |
36 | 36 |
|
37 | 37 | ۱. موتور (اگر مرورگر باشد، تعبیه شده است) اِسکریپت را میخواند (Parse). |
38 | 38 | ۲. سپس اسکریپت را به زبان ماشین ترجمه میکند (Compile). |
|
41 | 41 | موتور در تمام مراحل پردازش عملیات بهینهسازی را انجام میدهد. حتی به اِسکریپت ترجمه شده توجه میکند و اطلاعاتی که در این بین رد و بدل میشود را بررسی میکند و در این مرحله هم روی کدهای ماشین عملیات بهینهسازی را انجام میدهد تا سرعت اجرای اِسکریپتها بالا رود. |
42 | 42 | ``` |
43 | 43 |
|
44 | | -## جاوااسکریپت در مرورگر چه تواناییهایی دارد؟ |
45 | | - |
| 44 | +## جاوااسکریپت در مرورگر چه تواناییهایی دارد؟ |
| 45 | + |
46 | 46 | جاوااسکریپت مدرن یک زبان برنامهنویسی «امن» است. این زبان اجازه دسترسی در سطوح پایین مانند دسترسی به حافظه (Memory) و پردازنده (CPU) را نمیدهد، چراکه از ابتدا برای مرورگرها (که نیازی به این موراد ندارند) ساخته شده بود. |
47 | 47 |
|
48 | 48 | قابلیتهای جاوااسکریپت کاملا به محیطی که در آن اجرا میشود بستگی دارد. برای نمونه با جاوااسکریپت در [Node.JS](https://fa.wikipedia.org/wiki/%D9%86%D9%88%D8%AF_%D8%AC%DB%8C%E2%80%8C%D8%A7%D8%B3) میتوان عملیات خواندن و نوشتن (Read/Write) روی فایلها را انجام داد، و یا در شبکه درخواستهایی ارسال و دریافت کرد، و دیگر موارد. |
|
68 | 68 | مرورگرهای مدرن اجازه کار کردن با فایلها را میدهند اما دسترسی محدود است و فقط اگر کاربر کارهای مشخصی را انجام دهد مجاز هستند مانند «drop» کردن یک فایل درون یک پنجره مرورگر یا انتخاب کردن آن فایل توسط یک تگ `<input>`. |
69 | 69 |
|
70 | 70 | همچنین راههایی برای تعامل با دوربین، میکروفون و دیگر دستگاهها وجود دارد، اما استفاده از چنین مواردی به اجازه صریح از طرف کاربر نیاز دارد و یک صفحه جاوااسکریپت دار نمیتواند به صورت پنهانی دوربین را روشن کند اطلاعات اطرافش را جمع آوری کند و به [NSA](https://en.wikipedia.org/wiki/National_Security_Agency) یا سایر نهادهای اطلاعاتی ارسال کند. |
71 | | -- تبها و پنجرهها بطور کلی در مورد یکدیگر چیزی نمیدانند. اما درشرایطی هم میدانند، بطور نمونه زمانی که یک پنجره برای باز نمودن پنجره دیگر از جاوااسکریپت استفاده میکند. اما حتی در این حالت هم ممکن است جاوااسکریپت به صفحات دیگر دسترسی نداشته باشد (اگر صفحات مذکور از دامنه، پروتکل یا پورت دیگری باشند). |
| 71 | +- تبها (tab) و پنجرهها بطور کلی در مورد یکدیگر چیزی نمیدانند. اما درشرایطی هم میدانند، بطور نمونه زمانی که یک پنجره برای باز نمودن پنجره دیگر از جاوااسکریپت استفاده میکند. اما حتی در این حالت هم ممکن است جاوااسکریپت به صفحات دیگر دسترسی نداشته باشد (اگر صفحات مذکور از دامنه، پروتکل یا پورت دیگری باشند). |
72 | 72 |
|
73 | 73 | به این موضوع Same Origin Policy گفته میشود. برای آنکه بتوان در این حالت کار کرد هر دو صفحه باید یک کد جاوااسکریپت مخصوصی داشته باشند تا بتوان این تبادل اطلاعات را انجام داد. |
74 | 74 |
|
|
77 | 77 |
|
78 | 78 |  |
79 | 79 |
|
80 | | -اگر جاوااسکریپت در محیطی خارج از مرورگرها اجرا میشد (برای نمونه در سِروِرها) ، این محدودیتها محدودیتها وجود نداشتند. همینطور پلاگینها مختلف ممکن است برای انجام کارهای مختلف پلاگینها و افزونههایی را نصب کنند که سطح دسترسیشان را افزایش میدهد. |
| 80 | +اگر جاوااسکریپت در محیطی خارج از مرورگرها اجرا میشد (برای نمونه در سِروِرها) ، این محدودیتها وجود نداشتند. همینطور پلاگینهای مختلف (plugin) ممکن است برای انجام کارهای مختلف پلاگینها و افزونههایی (extension) را نصب کنند که سطح دسترسیشان را افزایش میدهد. |
81 | 81 |
|
82 | 82 | ## چه چیزی جاوااسکریپت را منحصر بفرد میکند؟ |
83 | 83 |
|
|
98 | 98 |
|
99 | 99 | سینتَکس (Syntax) جاوااسکریپت مورد نیاز هر کسی نیست و اشخاص مختلف به قابلیتهای متفاوتی نیاز دارند. |
100 | 100 |
|
101 | | -این چیزی است که توقع میرود چراکه پروژهها و نیازمندیها برای هر شخص متفاوت است. |
| 101 | +این موضوع قابل انتظار است چراکه پروژهها و نیازمندیها برای هر شخص متفاوت است. |
102 | 102 |
|
103 | | -اخیرا تعداد زیادی زبان بوجود آمدهاند که پیش از آنکه در مرورگر اجرا شوند به جاوااسکریپت *تبدیل* (Transpile) میشوند. |
| 103 | +اخیرا تعداد زیادی زبان بوجود آمدهاند که پیش از آنکه در مرورگر اجرا شوند به جاوااسکریپت *transpile (تبدیل)* میشوند. |
104 | 104 |
|
105 | | -ابزارهای مدرن فرایند تبدیل را بسیار سریع و پنهانی میکنند و به توسعهدهندگان اجازه میدهند که به زبانی دیگر کد بنویسند و «پشت پرده» آن را به طور خودکار تبدیل میکنند. |
| 105 | +ابزارهای مدرن فرایند transpile را بسیار سریع و پنهانی میکنند و به توسعهدهندگان اجازه میدهند که به زبانی دیگر کد بنویسند و «پشت پرده» آن را به طور خودکار تبدیل میکنند. |
106 | 106 |
|
107 | 107 | نمونههایی از این زبانها : |
108 | 108 |
|
109 | 109 | - [CoffeeScript](http://coffeescript.org/) : که سینتکس کوتاهتری را ارائه میکند و قابلیت نوشتن کدهایی تمیز و دقیق را بوجود میآورد.که معمولا توسعه دهندگان زبان روبی به آن علاقه مند هستند. |
110 | | -- [TypeScript](http://www.typescriptlang.org/) : که تمرکز اصلی خود را بر اضافه نمودن DataType ها قرار داده تا فرایند توسعه سادهتر شود و نرمافزار نهایی قابلیتهای پیچیدهتری را به اجرا در آورد. این زبان توسط مایکروسافت توسعه داده شده است. |
111 | | -- [Flow](http://flow.org/) هم به شیوه دیگری DataType اضافه می کند. و توسط فیس بوک توسعه داده شده است. |
| 110 | +- [TypeScript](http://www.typescriptlang.org/) : که تمرکز اصلی خود را بر اضافه نمودن «strict data typing» قرار داده تا فرایند توسعه سادهتر شود و نرمافزار نهایی قابلیتهای پیچیدهتری را به اجرا در آورد. این زبان توسط مایکروسافت توسعه داده شده است. |
| 111 | +- [Flow](http://flow.org/) هم به شیوه دیگری data typing را اضافه می کند. و توسط فیس بوک توسعه داده شده است. |
112 | 112 | - [Dart](https://www.dartlang.org/) : که زبانی مستقل با موتور مربوط به خود بوده و در محیطهای غیر مرورگری (مانند نرمافزارهای موبایل) کار میکند. این زبان در ابتدا توسط گوگل معرفی شد تا جایگزینی برای جاوااسکریپت باشد. |
113 | | -- [Brython](https://brython.info/) یک ترانسپایلر پایتون به جاوااسکریپت است که توسعه دهندگان را قادر می سازد برنامه هایی به زبان پایتون خالص بدون جاوااسکریپت بنویسند. |
| 113 | +- [Brython](https://brython.info/) یک transpiler پایتون به جاوااسکریپت است که توسعه دهندگان را قادر می سازد برنامه هایی به زبان پایتون خالص بدون جاوااسکریپت بنویسند. |
114 | 114 | - [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) یک زبان برنامهنویسی مدرن، کوتاه و امن است که میتواند مرورگر یا Node را مورد هدف قرار دهد. |
115 | 115 |
|
116 | 116 | زبانهای بیشتر هم وجود دارند. اگر ما از یکی از این زبانهای تبدیلشونده استفاده کنیم، قطعا باید جاوااسکریپت را بلد باشیم تا واقعا بدانیم که در حال انجام چه کاری هستیم. |
|
0 commit comments