From 10f26062d21ae909655aeb1293051ddb2e73280e Mon Sep 17 00:00:00 2001 From: Newsha Hosseiny Nik Date: Sat, 23 Jan 2021 13:01:18 +0330 Subject: [PATCH 1/5] translated polyfills halfway --- 1-js/03-code-quality/06-polyfills/article.md | 36 ++++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/1-js/03-code-quality/06-polyfills/article.md b/1-js/03-code-quality/06-polyfills/article.md index 75db49d2f..7e2ab2598 100644 --- a/1-js/03-code-quality/06-polyfills/article.md +++ b/1-js/03-code-quality/06-polyfills/article.md @@ -1,38 +1,38 @@ # Polyfills -The JavaScript language steadily evolves. New proposals to the language appear regularly, they are analyzed and, if considered worthy, are appended to the list at and then progress to the [specification](http://www.ecma-international.org/publications/standards/Ecma-262.htm). +زبان جاوااسکریپت پیوسته در حال تکامل است. پیشنهادهایی برای بهتر شدن آن به‌طور منظم صورت می‌گیرد، این پیشنهاد‌ها بررسی می‌شوند و اگر ارزشمند باشند، به لیست اضافه می‌شوند و سپس به [specification](http://www.ecma-international.org/publications/standards/Ecma-262.htm) راه می‌یابند. -Teams behind JavaScript engines have their own ideas about what to implement first. They may decide to implement proposals that are in draft and postpone things that are already in the spec, because they are less interesting or just harder to do. +تیم‌های مسئول موتورهای جاوااسکریپت تصمیم می‌گیرند کدام یک را اول پیاده‌سازی کنند. ممکن است تصمیم بگیرند پیشنهادهایی که هنوز به‌صورت پیش‌نویس هستند را اول پیاده‌سازی کنند و چیزهایی که در spec هستند را به بعدتر موکول کنند. دلیلش هم می‌تواند این باشد که شاید بعضی جذابیت کمتری دارند یا انجام آن‌ها سخت‌تر است. -So it's quite common for an engine to implement only the part of the standard. +پس کاملا طبیعی است که یک موتور فقط بخشی از یک استاندارد را پیاده‌سازی کند. -A good page to see the current state of support for language features is (it's big, we have a lot to study yet). +یک صفحه‌ی خوب برای این که ببینید در حال حاضر چه چیزهایی پشتیبانی می‌شود اینجاست (خیلی بزرگ است، ما چیزهای زیادی برای مطالعه داریم). -## Babel +## بابِل -When we use modern features of the language, some engines may fail to support such code. Just as said, not all features are implemented everywhere. +وقتی از ویژگی‌های جدید یک زبان استفاده می‌کنیم، ممکن است برخی موتورها از این کدها پشتیبانی نکنند. همانطور که گفته شد، همه‌ی ویژگی‌ها همه جا پیاده‌سازی نمی‌شوند. -Here Babel comes to the rescue. +اینجاست که بابل به نجات ما می‌آید. -[Babel](https://babeljs.io) is a [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler). It rewrites modern JavaScript code into the previous standard. +[بابل](https://babeljs.io) یک [کامپایلر بین زبانی](https://en.wikipedia.org/wiki/Source-to-source_compiler) است. بابل کد جاوااسکریپت مدرن را به استانداردهای قبلی‌اش تبدیل می‌کند. -Actually, there are two parts in Babel: +در بابل دو بخش وجود دارد: -1. First, the transpiler program, which rewrites the code. The developer runs it on their own computer. It rewrites the code into the older standard. And then the code is delivered to the website for users. Modern project build systems like [webpack](http://webpack.github.io/) provide means to run transpiler automatically on every code change, so that it's very easy to integrate into development process. +1. اولی برنامه‌ی کامپایلر بین زبانی است که کد را بازنویسی می‌کند. توسعه‌دهنده کد را روی کامپیوتر خودش اجرا می‌کند. و بابل کد را به استاندارد قبلی بازنویسی می‌کند و سپس کد برای مشاهده کاربر به وبسایت تحویل داده می‌شود. سیستم‌های مدرن برای build پروژه‌ها مثل [webpack](http://webpack.github.io/) این امکان را می‌دهند که کامپایلر بین‌زبانی در هر تغییر کد به‌صورت اتوماتیک اجرا شود. و به همین دلیل استفاده از آن‌ها در روند توسعه بسیار ساده است. -2. Second, the polyfill. +2. بخش دوم polyfill است. - New language features may include new built-in functions and syntax constructs. - The transpiler rewrites the code, transforming syntax constructs into older ones. But as for new built-in functions, we need to implement them. JavaScript is a highly dynamic language, scripts may add/modify any functions, so that they behave according to the modern standard. + ویژگی‌های جدید یک زبان ممکن است functionهای built-in جدید یا ساختارهای syntax جدید باشند. + transpiler کد را بازنویسی می‌کند. و ساختارهای syntax جدید را به ساختارهای قدیمی تبدیل می‌کند. ولی functionهای جدید باید پیاده‌سازی شوند. جاوااسکریپت یک زبان داینامیک است. اسکریپت‌ها ممکن است هر functionای را به کد اضافه کنند یا آن را اصلاح کنند تا متناسب با استاندارد مدرن رفتار کنند. - A script that updates/adds new functions is called "polyfill". It "fills in" the gap and adds missing implementations. + به اسکریپتی که function جدیدی اضافه می‌کند یا یک function را آپدیت می‌کند، polyfill گفته می‌شود. Polyfill جای خالی پیاده‌سازی را پر می‌کند. - Two interesting polyfills are: - - [core js](https://github.com/zloirock/core-js) that supports a lot, allows to include only needed features. - - [polyfill.io](http://polyfill.io) service that provides a script with polyfills, depending on the features and user's browser. + دو polyfill جالب: + - [core js](https://github.com/zloirock/core-js) که از چیزهای زیادی پشتیبانی می‌کند و این امکان را می‌دهد که فقط ویژگی‌های مورد نظر را اضافه کنیم. + - [polyfill.io](http://polyfill.io) سرویسی که یک اسکریپت به‌همراه polyfillها ارائه می‌دهد بسته به مرورگر و ویژگی‌های یک کاربر. -So, if we're going to use modern language features, a transpiler and a polyfill are necessary. +پس اگر می‌خواهیم از ویژگی‌های مدرن یک زبان استفاده کنیم، باید حتما از یک transpiler و از یک polyfill استفاده کنیم. ## Examples in the tutorial From 35cdf2f33f71cc11a6c9503d8264dace57da00f2 Mon Sep 17 00:00:00 2001 From: Newsha Hosseiny Nik Date: Sat, 3 Apr 2021 14:08:28 +0430 Subject: [PATCH 2/5] translated polyfills and transpilers --- 1-js/03-code-quality/06-polyfills/article.md | 76 ++++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/1-js/03-code-quality/06-polyfills/article.md b/1-js/03-code-quality/06-polyfills/article.md index a05dee771..ad1c99948 100644 --- a/1-js/03-code-quality/06-polyfills/article.md +++ b/1-js/03-code-quality/06-polyfills/article.md @@ -1,4 +1,3 @@ - # Polyfills and transpilers زبان جاوااسکریپت پیوسته در حال تکامل است. پیشنهادهایی برای بهتر شدن آن به‌طور منظم صورت می‌گیرد، این پیشنهاد‌ها بررسی می‌شوند و اگر ارزشمند باشند، به لیست اضافه می‌شوند و سپس به [specification](http://www.ecma-international.org/publications/standards/Ecma-262.htm) راه می‌یابند. @@ -9,84 +8,85 @@ یک صفحه‌ی خوب برای این که ببینید در حال حاضر چه چیزهایی پشتیبانی می‌شود اینجاست (خیلی بزرگ است، ما چیزهای زیادی برای مطالعه داریم). -As programmers, we'd like to use most recent features. The more good stuff - the better! +به عنوان برنامه‌نویس، ما همیشه دوست داریم از ویژگی‌ها و امکانات جدید استفاده کنیم. هر چه جدیدتر، بهتر! -On the other hand, how to make our modern code work on older engines that don't understand recent features yet? +از طرف دیگر، دوست داریم کدهایمان روی مرورگرهای قدیمی‌تر که امکانات جدید را نمی‌فهمند هم کار کنند. اما چطور می‌شود این کار را انجام داد؟ -There are two tools for that: +دو ابزار برای این کار وجود دارد: 1. Transpilers. 2. Polyfills. -Here, in this chapter, our purpose is to get the gist of how they work, and their place in web development. +هدف ما در این فصل این است که درک کنیم این دو چگونه کار می‌کنند و جایگاه آن‌ها در توسعه وب چیست. ## Transpilers -A [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) is a special piece of software that can parse ("read and understand") modern code, and rewrite it using older syntax constructs, so that the result would be the same. +یک [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) در واقع قطعه‌ای نرم‌افزار است که می‌تواند کد مدرن و جدید را parse کند ("بخواند و بفهمد") و سپس همان کد را با syntax قدیمی بازنویسی کند به‌طوری که خروجی کد یکسان باشد. -E.g. JavaScript before year 2020 didn't have the "nullish coalescing operator" `??`. So, if a visitor uses an outdated browser, it may fail to understand the code like `height = height ?? 100`. +برای مثال جاوااسکریپت تا سال ۲۰۲۰ "nullish coalescing operator" `??` را نداشت. و اگر کاربری از یک مرورگر منسوخ‌شده استفاده کند، ممکن است کدی مانند `height = height ?? 100` را متوجه نشود. -A transpiler would analyze our code and rewrite `height ?? 100` into `(height !== undefined && height !== null) ? height : 100`. +یک transpiler این کد را آنالیز می‌کند و `height ?? 100` را به‌صورت `(height !== undefined && height !== null) ? height : 100` بازنویسی می‌کند. ```js -// before running the transpiler +// قبل از اجرا شدن transpiler height = height ?? 100; -// after running the transpiler -height = (height !== undefined && height !== null) ? height : 100; +// بعد از اجرا شدن transpiler +height = height !== undefined && height !== null ? height : 100; ``` -Now the rewritten code is suitable for older JavaScript engines. +کد بازنویسی شده مناسب موتورهای قدیمی‌تر جاوااسکریپت است. -Usually, a developer runs the transpiler on their own computer, and then deploys the transpiled code to the server. +معمولا برنامه‌نویس transpiler را روی کامپیوتر خودش اجرا می‌کند و سپس کد transpileشده را روی سرور deploy می‌کند. -Speaking of names, [Babel](https://babeljs.io) is one of the most prominent transpilers out there. +حالا که صحبتش شد، بهتر است بدانید [Babel](http://babeljs.io/) یکی از برجسته‌ترین transpilerها است. -Modern project build systems, such as [webpack](http://webpack.github.io/), provide means to run transpiler automatically on every code change, so it's very easy to integrate into development process. +سیستم‌های build پروژه مدرن مثل [webpack](http://webpack.github.io/) این امکان را می‌دهند که بعد از هر بار تغییر کد، transpilerبه‌صورت اتوماتیک اجرا شود و برای همین ادغام کردن آن در روند توسعه کار بسیار ساده‌ای است. ## Polyfills -New language features may include not only syntax constructs and operators, but also built-in functions. +فیچر‌ها و امکانات جدید یک زبان می‌توانند علاوه بر syntax و operatorهای جدید، فانکشن‌های جدید نیز باشند. -For example, `Math.trunc(n)` is a function that "cuts off" the decimal part of a number, e.g `Math.trunc(1.23) = 1`. +برای مثال `Math.trunc(n)` یک فانکشن است که بخش دهدهی یک عدد را حذف می‌کند. مانند `Math.trunc(1.23) = 1`. -In some (very outdated) JavaScript engines, there's no `Math.trunc`, so such code will fail. +در برخی از موتورهای (خیلی قدیمی) جاوااسکریپت فانکشن `Math.trunc` وجود ندارد و چنین کدی اجرا نمی‌شود. -As we're talking about new functions, not syntax changes, there's no need to transpile anything here. We just need to declare the missing function. +از آن‌جایی که داریم راجع‌به فانکشن‌های جدید صحبت می‌کنیم و بحث تغییر syntax نیست، اینجا چیزی برای transpile وجود ندارد. فقط باید فانکشن ناموجود را تعریف کنیم. -A script that updates/adds new functions is called "polyfill". It "fills in" the gap and adds missing implementations. +اسکریپتی که فانکشن‌های جدید آپدیت و یا اضافه می‌کند، "polyfill" نام دارد. در واقع جای خالی را پر می‌کند و پیاده‌سازی‌های لازم را انجام می‌دهد. -For this particular case, the polyfill for `Math.trunc` is a script that implements it, like this: +در این مثال خاص، polyfillی که برای `Math.trunc` وجود دارد یک اسکریپت است که آن را پیاده‌سازی کرده است. مانند زیر: ```js -if (!Math.trunc) { // if no such function - // implement it - Math.trunc = function(number) { - // Math.ceil and Math.floor exist even in ancient JavaScript engines - // they are covered later in the tutorial +if (!Math.trunc) { + // اگر چنین فانکشنی وجود ندارد + // آن زا پیاده‌سازی کن + Math.trunc = function (number) { + // Math.ceil و Math.floor جتی در موتورهای قدیمی جاوااسکریپت هم حضور دارند + // و در همین tutorial جلوتر آموزش داده می‌شوند return number < 0 ? Math.ceil(number) : Math.floor(number); }; } ``` -JavaScript is a highly dynamic language, scripts may add/modify any functions, even including built-in ones. +جاوااسکریپت یک زبان به‌شدت داینامیک است. اسکریپت‌ها می‌توانند هر فانکشنی را تغییر دهند یا اضافه کنند. حتی فانکشن‌های built-in. -Two interesting libraries of polyfills are: -- [core js](https://github.com/zloirock/core-js) that supports a lot, allows to include only needed features. -- [polyfill.io](http://polyfill.io) service that provides a script with polyfills, depending on the features and user's browser. +دو کتابخانه جالب polyfills: +- [core js](https://github.com/zloirock/core-js) که از چیزهای زیادی پشتیبانی می‌کند و اجازه می‌دهد فقط فیچرهای مورد نیاز خود را اضافه کنید. +- [polyfill.io](http://polyfill.io) سرویسی که یک اسکریپت با polyfills ارائه می‌دهد. بسته به فیچرها و مرورگر کاربر. -## Summary +## خلاصه -In this chapter we'd like to motivate you to study modern and even "bleeding-edge" language features, even if they aren't yet well-supported by JavaScript engines. +در این فصل ما می‌خواهیم به شما انگیزه بدهیم تا بروید و فیچرهای جدید زبان را یاد بگیرید. حتی اگر هنوز توسط موتورهای جاوااسکریپت به‌خوبی پشتیبانی نمی‌شوند. -Just don't forget to use transpiler (if using modern syntax or operators) and polyfills (to add functions that may be missing). And they'll ensure that the code works. +فراموش نکنید که از یک transpiler (اگر از syntax یا operatorهای مدرن استفاده می‌کنید) و polyfills (برای اضافه کردن فانکشن‌هایی که ممکن است موجود نباشند) استفاده کنید. و با این کار مطمئن خواهید بود که کد شما کار می‌کند. -For example, later when you're familiar with JavaScript, you can setup a code build system based on [webpack](http://webpack.github.io/) with [babel-loader](https://github.com/babel/babel-loader) plugin. +برای مثال، بعدها که با جاوااسکریپت آشنایی بیشتری پیدا کنید، می‌توانید یک سیستم build کد با [webpack](http://webpack.github.io/) و پلاگین [babel-loader](https://github.com/babel/babel-loader) بالا بیاورید. -Good resources that show the current state of support for various features: -- - for pure JavaScript. -- - for browser-related functions. +منابع خوبی که نشان می‌دهند فیچرهای مختلف در چه حالتی از پشتیبانی قرار دارند: -P.S. Google Chrome is usually the most up-to-date with language features, try it if a tutorial demo fails. Most tutorial demos work with any modern browser though. +- - برای جاوااسکریپت. +- - برای فانکشن‌های مربوط به مرورگر. +پانوشت گوگل کروم معمولا نسبت به فیچرهای زبان به‌روزترین است. اگر دموی یک آموزش کار نکرد، آن را امتحان کنید. البته بیشتر دموهای آموزش با هر مرورگر مدرنی کار می‌کنند. From cfa63f1fbef7d4403ea73c6741c12edf1683d0e9 Mon Sep 17 00:00:00 2001 From: Newsha Hosseiny Nik Date: Sat, 3 Apr 2021 15:58:29 +0430 Subject: [PATCH 3/5] fixed the requested changes. --- 1-js/03-code-quality/06-polyfills/article.md | 61 ++++++++++---------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/1-js/03-code-quality/06-polyfills/article.md b/1-js/03-code-quality/06-polyfills/article.md index ad1c99948..a69ea0526 100644 --- a/1-js/03-code-quality/06-polyfills/article.md +++ b/1-js/03-code-quality/06-polyfills/article.md @@ -1,65 +1,64 @@ -# Polyfills and transpilers +# پلیفیل‌ها و ترنسپایلرها -زبان جاوااسکریپت پیوسته در حال تکامل است. پیشنهادهایی برای بهتر شدن آن به‌طور منظم صورت می‌گیرد، این پیشنهاد‌ها بررسی می‌شوند و اگر ارزشمند باشند، به لیست اضافه می‌شوند و سپس به [specification](http://www.ecma-international.org/publications/standards/Ecma-262.htm) راه می‌یابند. +زبان جاوااسکریپت پیوسته در حال تکامل است. پیشنهادهایی برای بهتر شدن آن به‌طور منظم صورت می‌گیرد، این پیشنهاد‌ها بررسی می‌شوند و اگر ارزشمند باشند، به لیست اضافه می‌شوند و سپس برای [تشخیص](http://www.ecma-international.org/publications/standards/Ecma-262.htm) پیش می‌روند. -تیم‌های مسئول موتورهای جاوااسکریپت تصمیم می‌گیرند کدام یک را اول پیاده‌سازی کنند. ممکن است تصمیم بگیرند پیشنهادهایی که هنوز به‌صورت پیش‌نویس هستند را اول پیاده‌سازی کنند و چیزهایی که در spec هستند را به بعدتر موکول کنند. دلیلش هم می‌تواند این باشد که شاید بعضی جذابیت کمتری دارند یا انجام آن‌ها سخت‌تر است. +تیم‌های مسئول موتورهای جاوااسکریپت تصمیم می‌گیرند کدام یک را اول پیاده‌سازی کنند. ممکن است تصمیم بگیرند پیشنهادهایی که هنوز به‌صورت پیش‌نویس هستند را اول پیاده‌سازی کنند و پیشنهادهایی که در مرحلهٔ تشخیص هستند را به بعدتر موکول کنند، به دلیل اینکه کمتر جالب هستند و یا فقط سخت‌تر هستند. پس کاملا طبیعی است که یک موتور فقط بخشی از یک استاندارد را پیاده‌سازی کند. یک صفحه‌ی خوب برای این که ببینید در حال حاضر چه چیزهایی پشتیبانی می‌شود اینجاست (خیلی بزرگ است، ما چیزهای زیادی برای مطالعه داریم). -به عنوان برنامه‌نویس، ما همیشه دوست داریم از ویژگی‌ها و امکانات جدید استفاده کنیم. هر چه جدیدتر، بهتر! +به عنوان توسعه‌دهنده، ما همیشه دوست داریم از ویژگی‌ها و امکانات جدید استفاده کنیم. هر چه جدیدتر، بهتر! از طرف دیگر، دوست داریم کدهایمان روی مرورگرهای قدیمی‌تر که امکانات جدید را نمی‌فهمند هم کار کنند. اما چطور می‌شود این کار را انجام داد؟ دو ابزار برای این کار وجود دارد: -1. Transpilers. -2. Polyfills. +1. ترنسپایلرها (Transpilers). +2. پلیفیل‌ها (Polyfills). هدف ما در این فصل این است که درک کنیم این دو چگونه کار می‌کنند و جایگاه آن‌ها در توسعه وب چیست. -## Transpilers +## ترنسپایلرها -یک [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) در واقع قطعه‌ای نرم‌افزار است که می‌تواند کد مدرن و جدید را parse کند ("بخواند و بفهمد") و سپس همان کد را با syntax قدیمی بازنویسی کند به‌طوری که خروجی کد یکسان باشد. +یک [ترنسپایلر](https://en.wikipedia.org/wiki/Source-to-source_compiler) در واقع قطعه‌ای نرم‌افزار است که می‌تواند کد مدرن و جدید را parse کند ("بخواند و بفهمد") و سپس همان کد را با syntax قدیمی بازنویسی کند به‌طوری که خروجی کد یکسان باشد. -برای مثال جاوااسکریپت تا سال ۲۰۲۰ "nullish coalescing operator" `??` را نداشت. و اگر کاربری از یک مرورگر منسوخ‌شده استفاده کند، ممکن است کدی مانند `height = height ?? 100` را متوجه نشود. +برای مثال جاوااسکریپت تا سال ۲۰۲۰ "nullish coalescing عملگر" `??` را نداشت. و اگر کاربری از یک مرورگر منسوخ‌شده استفاده کند، ممکن است کدی مانند `height = height ?? 100` را متوجه نشود. -یک transpiler این کد را آنالیز می‌کند و `height ?? 100` را به‌صورت `(height !== undefined && height !== null) ? height : 100` بازنویسی می‌کند. +یک ترنسپایلر این کد را آنالیز می‌کند و `height ?? 100` را به‌صورت `(height !== undefined && height !== null) ? height : 100` بازنویسی می‌کند. ```js -// قبل از اجرا شدن transpiler +// قبل از اجرا شدن ترنسپایلر height = height ?? 100; -// بعد از اجرا شدن transpiler +// بعد از اجرا شدن ترنسپایلر height = height !== undefined && height !== null ? height : 100; ``` کد بازنویسی شده مناسب موتورهای قدیمی‌تر جاوااسکریپت است. -معمولا برنامه‌نویس transpiler را روی کامپیوتر خودش اجرا می‌کند و سپس کد transpileشده را روی سرور deploy می‌کند. +معمولا توسعه‌دهنده ترنسپایلر را روی کامپیوتر خودش اجرا می‌کند و سپس کد transpileشده را روی سرور deploy می‌کند. -حالا که صحبتش شد، بهتر است بدانید [Babel](http://babeljs.io/) یکی از برجسته‌ترین transpilerها است. +حالا که صحبتش شد، بهتر است بدانید [Babel](http://babeljs.io/) یکی از برجسته‌ترین ترنسپایلرها است. -سیستم‌های build پروژه مدرن مثل [webpack](http://webpack.github.io/) این امکان را می‌دهند که بعد از هر بار تغییر کد، transpilerبه‌صورت اتوماتیک اجرا شود و برای همین ادغام کردن آن در روند توسعه کار بسیار ساده‌ای است. +سیستم‌های build پروژه مدرن مثل [webpack](http://webpack.github.io/) این امکان را می‌دهند که بعد از هر بار تغییر کد، ترنسپایلر به‌صورت اتوماتیک اجرا شود و برای همین ادغام کردن آن در روند توسعه کار بسیار ساده‌ای است. -## Polyfills +## پلیفیل‌ها -فیچر‌ها و امکانات جدید یک زبان می‌توانند علاوه بر syntax و operatorهای جدید، فانکشن‌های جدید نیز باشند. +فیچر‌ها و امکانات جدید یک زبان می‌توانند علاوه بر syntax و عملگرهای جدید، تابع‌های جدید نیز باشند. -برای مثال `Math.trunc(n)` یک فانکشن است که بخش دهدهی یک عدد را حذف می‌کند. مانند `Math.trunc(1.23) = 1`. +برای مثال `Math.trunc(n)` یک تابع است که بخش دهدهی یک عدد را حذف می‌کند. مانند `Math.trunc(1.23) = 1`. -در برخی از موتورهای (خیلی قدیمی) جاوااسکریپت فانکشن `Math.trunc` وجود ندارد و چنین کدی اجرا نمی‌شود. +در برخی از موتورهای (خیلی قدیمی) جاوااسکریپت تابع `Math.trunc` وجود ندارد و چنین کدی اجرا نمی‌شود. -از آن‌جایی که داریم راجع‌به فانکشن‌های جدید صحبت می‌کنیم و بحث تغییر syntax نیست، اینجا چیزی برای transpile وجود ندارد. فقط باید فانکشن ناموجود را تعریف کنیم. +از آن‌جایی که داریم راجع‌به تابع‌های جدید صحبت می‌کنیم و بحث تغییر syntax نیست، اینجا چیزی برای transpile وجود ندارد. فقط باید تابع ناموجود را تعریف کنیم. -اسکریپتی که فانکشن‌های جدید آپدیت و یا اضافه می‌کند، "polyfill" نام دارد. در واقع جای خالی را پر می‌کند و پیاده‌سازی‌های لازم را انجام می‌دهد. +اسکریپتی که تابع‌های جدید آپدیت و یا اضافه می‌کند، «پلیفیل» نام دارد. در واقع جای خالی را پر می‌کند و پیاده‌سازی‌های لازم را انجام می‌دهد. -در این مثال خاص، polyfillی که برای `Math.trunc` وجود دارد یک اسکریپت است که آن را پیاده‌سازی کرده است. مانند زیر: +در این مثال خاص، پلیفیلی که برای `Math.trunc` وجود دارد یک اسکریپت است که آن را پیاده‌سازی کرده است. مانند زیر: ```js -if (!Math.trunc) { - // اگر چنین فانکشنی وجود ندارد +if (!Math.trunc) { // اگر چنین تابعی وجود ندارد // آن زا پیاده‌سازی کن Math.trunc = function (number) { // Math.ceil و Math.floor جتی در موتورهای قدیمی جاوااسکریپت هم حضور دارند @@ -69,24 +68,22 @@ if (!Math.trunc) { } ``` -جاوااسکریپت یک زبان به‌شدت داینامیک است. اسکریپت‌ها می‌توانند هر فانکشنی را تغییر دهند یا اضافه کنند. حتی فانکشن‌های built-in. - -دو کتابخانه جالب polyfills: +جاوااسکریپت یک زبان به‌شدت داینامیک است. اسکریپت‌ها می‌توانند هر تابعی را تغییر دهند یا اضافه کنند. حتی تابع‌های built-in. +دو کتابخانه جالب پلیفیل‌ها: - [core js](https://github.com/zloirock/core-js) که از چیزهای زیادی پشتیبانی می‌کند و اجازه می‌دهد فقط فیچرهای مورد نیاز خود را اضافه کنید. -- [polyfill.io](http://polyfill.io) سرویسی که یک اسکریپت با polyfills ارائه می‌دهد. بسته به فیچرها و مرورگر کاربر. +- [polyfill.io](http://polyfill.io) سرویسی که یک اسکریپت با پلیفیل‌ها ارائه می‌دهد. بسته به فیچرها و مرورگر کاربر. ## خلاصه در این فصل ما می‌خواهیم به شما انگیزه بدهیم تا بروید و فیچرهای جدید زبان را یاد بگیرید. حتی اگر هنوز توسط موتورهای جاوااسکریپت به‌خوبی پشتیبانی نمی‌شوند. -فراموش نکنید که از یک transpiler (اگر از syntax یا operatorهای مدرن استفاده می‌کنید) و polyfills (برای اضافه کردن فانکشن‌هایی که ممکن است موجود نباشند) استفاده کنید. و با این کار مطمئن خواهید بود که کد شما کار می‌کند. +فراموش نکنید که از یک ترنسپایلر (اگر از syntax یا عملگرهای مدرن استفاده می‌کنید) و پلیفیل‌ها (برای اضافه کردن تابع‌هایی که ممکن است موجود نباشند) استفاده کنید. و با این کار مطمئن خواهید بود که کد شما کار می‌کند. -برای مثال، بعدها که با جاوااسکریپت آشنایی بیشتری پیدا کنید، می‌توانید یک سیستم build کد با [webpack](http://webpack.github.io/) و پلاگین [babel-loader](https://github.com/babel/babel-loader) بالا بیاورید. +برای مثال، بعدها که با جاوااسکریپت آشنایی بیشتری پیدا کنید، می‌توانید یک سیستم build کد با [webpack](http://webpack.github.io/) و پلاگین [babel-loader](https://github.com/babel/babel-loader) راه‌اندازی کنید. منابع خوبی که نشان می‌دهند فیچرهای مختلف در چه حالتی از پشتیبانی قرار دارند: - - - برای جاوااسکریپت. -- - برای فانکشن‌های مربوط به مرورگر. +- - برای تابع‌های مربوط به مرورگر. پانوشت گوگل کروم معمولا نسبت به فیچرهای زبان به‌روزترین است. اگر دموی یک آموزش کار نکرد، آن را امتحان کنید. البته بیشتر دموهای آموزش با هر مرورگر مدرنی کار می‌کنند. From cc8e8121162b6c8c98b05676604779887f532e00 Mon Sep 17 00:00:00 2001 From: Newsha Hosseiny Nik Date: Sun, 4 Apr 2021 12:12:57 +0430 Subject: [PATCH 4/5] added back the line I had deleted --- 1-js/03-code-quality/06-polyfills/article.md | 1 + 1 file changed, 1 insertion(+) diff --git a/1-js/03-code-quality/06-polyfills/article.md b/1-js/03-code-quality/06-polyfills/article.md index a69ea0526..a9c5269ac 100644 --- a/1-js/03-code-quality/06-polyfills/article.md +++ b/1-js/03-code-quality/06-polyfills/article.md @@ -1,3 +1,4 @@ + # پلیفیل‌ها و ترنسپایلرها زبان جاوااسکریپت پیوسته در حال تکامل است. پیشنهادهایی برای بهتر شدن آن به‌طور منظم صورت می‌گیرد، این پیشنهاد‌ها بررسی می‌شوند و اگر ارزشمند باشند، به لیست اضافه می‌شوند و سپس برای [تشخیص](http://www.ecma-international.org/publications/standards/Ecma-262.htm) پیش می‌روند. From 01a4d812dbb17f8f1bf7a74be9c897ba96dc638d Mon Sep 17 00:00:00 2001 From: Newsha Hosseiny Nik Date: Mon, 5 Apr 2021 17:33:17 +0430 Subject: [PATCH 5/5] fixed line breaks --- 1-js/03-code-quality/06-polyfills/article.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/1-js/03-code-quality/06-polyfills/article.md b/1-js/03-code-quality/06-polyfills/article.md index a9c5269ac..b8fc72a95 100644 --- a/1-js/03-code-quality/06-polyfills/article.md +++ b/1-js/03-code-quality/06-polyfills/article.md @@ -75,6 +75,7 @@ if (!Math.trunc) { // اگر چنین تابعی وجود ندارد - [core js](https://github.com/zloirock/core-js) که از چیزهای زیادی پشتیبانی می‌کند و اجازه می‌دهد فقط فیچرهای مورد نیاز خود را اضافه کنید. - [polyfill.io](http://polyfill.io) سرویسی که یک اسکریپت با پلیفیل‌ها ارائه می‌دهد. بسته به فیچرها و مرورگر کاربر. + ## خلاصه در این فصل ما می‌خواهیم به شما انگیزه بدهیم تا بروید و فیچرهای جدید زبان را یاد بگیرید. حتی اگر هنوز توسط موتورهای جاوااسکریپت به‌خوبی پشتیبانی نمی‌شوند. @@ -88,3 +89,4 @@ if (!Math.trunc) { // اگر چنین تابعی وجود ندارد - - برای تابع‌های مربوط به مرورگر. پانوشت گوگل کروم معمولا نسبت به فیچرهای زبان به‌روزترین است. اگر دموی یک آموزش کار نکرد، آن را امتحان کنید. البته بیشتر دموهای آموزش با هر مرورگر مدرنی کار می‌کنند. +