From 3e687f1a8ccb1cd0d52a966005551d528ca141df Mon Sep 17 00:00:00 2001 From: Boris Verkhovskiy Date: Sat, 6 Apr 2024 08:33:50 -0700 Subject: Remove leading and trailing empty lines in code blocks --- fa-ir/css-fa.html.markdown | 5 ++- fa-ir/java-fa.html.markdown | 1 - fa-ir/javascript-fa.html.markdown | 82 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 3 deletions(-) (limited to 'fa-ir') diff --git a/fa-ir/css-fa.html.markdown b/fa-ir/css-fa.html.markdown index 93af9132..56a43967 100644 --- a/fa-ir/css-fa.html.markdown +++ b/fa-ir/css-fa.html.markdown @@ -52,6 +52,7 @@ selector { property: value; /* more properties...*/ } ```html
``` +

شما میتوانید با استفاده از نام کلاس آنرا انتخاب کنید

@@ -150,6 +151,7 @@ div.some-parent.class-name {} ```css .i-am-any-before ~ .this-element {} ``` +

در زیر چند نمونه از شبه کلاسها را معرفی میکنیم که به شما اجازه میدهد عناصر را بر اساس رفتار آنها در صفحه انتخاب کنید.

برای مثال زمانی که اشاره گر ماوس روی عنصری بر روی صفحه قرار دارد.

@@ -262,7 +264,6 @@ p {} /*E*/ p { property: value !important; } - ```

و همچنین به کد زیر:

@@ -270,8 +271,8 @@ p { property: value !important; } ```html

- ``` + ‍‍

حق تقدم یا اولویت برای مثال بالا به این صورت است:

توجه داشته باشید که حق تقدم برای هر کدام از ویژگیها است نه برای کل مجموعه.

diff --git a/fa-ir/java-fa.html.markdown b/fa-ir/java-fa.html.markdown index cb965fc4..a834afcd 100644 --- a/fa-ir/java-fa.html.markdown +++ b/fa-ir/java-fa.html.markdown @@ -854,7 +854,6 @@ public class EnumTest { // Enum types are much more powerful than we show above. // The enum body can include methods and other fields. // You can see more at https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html - ``` ## مطالب بیشتر diff --git a/fa-ir/javascript-fa.html.markdown b/fa-ir/javascript-fa.html.markdown index d4d3a657..16b18a7c 100644 --- a/fa-ir/javascript-fa.html.markdown +++ b/fa-ir/javascript-fa.html.markdown @@ -34,21 +34,26 @@ lang: fa-ir /* and multiline comments start with slash-star and end with star-slash */ ``` +

گزاره ها را میتوانید با نقطه ویرگول پایان دهید ;

+ ```js doStuff(); ``` +

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

وقتی که خط جدیدی شروع میشود. مگر در موارد خاص.

+ ```js doStuff() ``` +

برای اینگه درگیر آن موارد خاص نشویم، در اینجا از اون ها

صرف نظر میکنیم.

@@ -57,97 +62,133 @@ doStuff()

جاوااسکریپت فقط یک نوع عدد دارد و آن عدد اعشاری 64 بیتی IEEE 754 است.

نترسید! و نگران اعداد صحیح نباشید! این اعداد اعشاری دارای 54 بیت مانتیس هستند که قابلیت ذخیره ی

دقیق اعداد صحیح تا مقدار تقریبی 9x10¹⁵ را دارند.

+ ```js 3; // = 3 1.5; // = 1.5 ``` +

تمامی عملگر های محاسباتی آن طوری که انتظارش را دارید عمل خواهند کرد.

+ ```js 1 + 1; // = 2 8 - 1; // = 7 10 * 2; // = 20 35 / 5; // = 7 ``` +

و این حتی شامل تقسیم هم میشود.

+ ```js 5 / 2; // = 2.5 ``` +

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

به عدد صحیح علامت دار *تا 32 بیت* تبدیل میشود.

+ ```js 1 << 2; // = 4 ``` +

عملیات داخل پرانتز تقدم بالاتری دارند.

+ ```js (1 + 3) * 2; // = 8 ``` +

سه مقدار خاص وجود دارند که در واقع مقادیر عددی نیستند:

+ ```js Infinity; // result of e.g. 1/0 -Infinity; // result of e.g. -1/0 NaN; // result of e.g. 0/0 ``` +

مقادیر بولی هم تعریف شده هستند:

+ ```js true; false; ``` +

رشته ها با آپستروف و یا گیومه تعریف میشوند.

+ ```js 'abc'; "Hello, world"; ``` +

و منفی کردن شرط با علامت تعجب

+ ```js !true; // = false !false; // = true ``` +

تساوی دو مقدار با ==

+ ```js 1 == 1; // = true 2 == 1; // = false ``` +

و عدم تساوی با !=

+ ```js 1 != 1; // = false 2 != 1; // = true ``` +

و سایر عمیلات های مقایسه

+ ```js 1 < 10; // = true 1 > 10; // = false 2 <= 2; // = true 2 >= 2; // = true ``` +

رشته ها با علامت جمع به یکدیگر متصل میشوند

+ ```js "Hello " + "world!"; // = "Hello world!" ``` +

و با علامت برگتر و یا کوچکتر با یکدیگر مقایسه میشوند.

+ ```js "a" < "b"; // = true ``` +

نوع متغیر برای عملیات مقایسه تطبیق داده میشود

+ ```js "5" == 5; // = true ``` +

مگر اینکه از سه مساوی استفاده شود!

+ ```js "5" === 5; // = false ``` +

با استفاده از charAt میتوانید به کارکتر های یک رشته دسترسی پیدا کنید.

+ ```js "This is a string".charAt(0); ``` +

از null برای نشان دادن عمدی مقدار هیج استفاده میشود.

و از undefined برای نشان دادن اینکه در حال حاظر مقدار موجود نمی باشد، هرچند خود undefined یک مقدار محسوب میشود.

+ ```js null; // used to indicate a deliberate non-value undefined; // used to indicate a value is not currently present (although undefined // is actually a value itself) ``` +

false, null, undefined, NaN, 0 و "" مقدار نادرست و هر چیز دیگر مقدار درست طلقی میشوند.

توجه داشته باشید که 0 نادرست و "0" درست طلقی میشوند حتی در عبارت 0=="0".

@@ -156,11 +197,13 @@ undefined; // used to indicate a value is not currently present (although undefi

متغیر ها با کلید واژه var تعریف میشوند. اشیا در جاوااسکریپت دارای نوع پویا هستند،

بدین شکل که برای تعریف نیازی به مشخص کردن نوع متعیر نیست.

برای مقدار دهی از علامت مساوی استفاده میشود.

+ ```js var someVar = 5; ```

اگر کلید واژه var را قرار ندهید، هیچ خطایی دریافت نخواهید کرد...

+ ```js someOtherVar = 10; ``` @@ -168,34 +211,40 @@ someOtherVar = 10;

در عوض متغیر شما در گستره ی کل برنامه تعریف شده خواهد بود.

متغیر هایی که تعریف شده ولی مقدار دهی نشوند، دارای مقدار undefined خواهند بود.

+ ```js var someThirdVar; // = undefined ```

برای اعمال عملگر های محاسباتی، میانبر هایی وجود دارند:

+ ```js someVar += 5; // equivalent to someVar = someVar + 5; someVar is 10 now someVar *= 10; // now someVar is 100 ```

حتی از این هم کوتاهتر برای اضافه یا کم کردن یک عدد با مقدار یک.

+ ```js someVar++; // now someVar is 101 someVar--; // back to 100 ```

آرایه ها در واقع لیستی مرتب شده از مقادیر مختلف از هر نوعی هستند.

+ ```js var myArray = ["Hello", 45, true]; ```

به اعضای یک آرایه میتوان از طریق قرار دادن کروشه در جلوی نام آن دسترسی پیدا کرد.

نمایه ی آرایه از صفر شروع میشود.

+ ```js myArray[1]; // = 45 ```

آرایه ها ناپایدار و دارای طول قابل تغییر هستند

+ ```js myArray.push("World"); myArray.length; // = 4 @@ -203,31 +252,37 @@ myArray.length; // = 4

در جاوااسکریپت، اشیاء چیزی شبیه دیکشنری و یا نقشه در زبان های دیگر هستند:

یک مجموعه ی نامرتب از جفت های کلید-مقدار.

+ ```js var myObj = {key1: "Hello", key2: "World"}; ```

کلید ها از نوع رشته هستند ولی در صورتی که مقدار معتبری برای اسم گزاری باشند نیازی به آوردن آنها درون گیومه نیست.

+ ```js var myObj = {myKey: "myValue", "my other key": 4}; ```

اعضای یک شئ را نیز میتوانید با استفاده از کروشه در مقابل نام آنها استخراج کنید.

+ ```js myObj["my other key"]; // = 4 ```

...و یا از طریق نقطه در صورتی که اسم عضو مورد نظر اسم معتبری برای اسم گزاری باشد.

+ ```js myObj.myKey; // = "myValue" ```

اشیاء ناپایدار و قابل اضافه کردن عضو جدید هستند.

+ ```js myObj.myThirdKey = true; ```

اگر سعی کنید عضوی را که وجود ندارد استخراج کنید، مقدار undefined را دریافت خواهید کرد.

+ ```js myObj.myFourthKey; // = undefined ``` @@ -235,6 +290,7 @@ myObj.myFourthKey; // = undefined

3. منطق و ساختار کنترل

ساختار if به شکلی که انتظارش را دارید کار میکند.

+ ```js var count = 1; if (count == 3){ @@ -247,6 +303,7 @@ if (count == 3){ ```

و همینطور حلقه while

+ ```js while (true) { // An infinite loop! @@ -254,6 +311,7 @@ while (true) { ```

حلقه do-while شبیه while است با این تفاوت که حداقل یکبار اجرا میشود.

+ ```js var input do { @@ -263,6 +321,7 @@ do {

حلقه for همانند زبان C و جاوا کار می کند.

مقدار دهی اولیه; شرط ادامه; چرخش حلقه

+ ```js for (var i = 0; i < 5; i++){ // will run 5 times @@ -270,6 +329,7 @@ for (var i = 0; i < 5; i++){ ```

عملگر && و || به ترتیب "و" و "یا" ی منطقی هستند.

+ ```js if (house.size == "big" && house.colour == "blue"){ house.contains = "bear"; @@ -280,6 +340,7 @@ if (colour == "red" || colour == "blue"){ ```

از || همچنین میتوان برای تعیین مقدار پیشفرض استفاده کرد.

+ ```js var name = otherName || "default"; ``` @@ -287,6 +348,7 @@ var name = otherName || "default";

4. توابع و مفاهیم گستره و بستار

توابع در جاوااسکریپت با استفاده از کلیدواژه ی function تعریف میشوند.

+ ```js function myFunction(thing){ return thing.toUpperCase(); @@ -297,6 +359,7 @@ myFunction("foo"); // = "FOO"

توابع در جاوااسکریپت نوعی شئ پایه محسوب میشوند، بنابر این می توانید آنها را به اشیاء مختلف

اضافه کنید و یا به عنوان پارامتر به توابع دیگر ارسال کنید.

- برای مثال وقتی که با یک رویداد کار میکنید.

+ ```js function myFunction(){ // this code will be called in 5 seconds' time @@ -309,6 +372,7 @@ setTimeout(myFunction, 5000);

توابع نیازی به داشتن اسم ندارند. برای مثال وقتی تابعی را به تابعی دیگر ارسال میکنید

میتوانید آنرا به صورت بینام تعریف کنید.

+ ```js setTimeout(function(){ // this code will be called in 5 seconds' time @@ -317,6 +381,7 @@ setTimeout(function(){

توابع دارای محدوده ی متغیر های خود هستند.

بر خلاف دیگر ساختار ها - مانند if

+ ```js if (true){ var i = 5; @@ -326,6 +391,7 @@ i; // = 5 - not undefined as you'd expect in a block-scoped language

به همین دلیل الگوی خاصی به نام "تابعی که بلافاصله صدا زده میشود" پدید آمده

تا از اضافه شدن متغیر های قسمتی از برنامه به گستره ی کلی برنامه جلوگیری شود.

+ ```js (function(){ var temporary = 5; @@ -341,6 +407,7 @@ permanent; // = 10

یکی از برترین ویژگی های جاوااسکریپت مفهومی با نام بستار است

بدین شکل که اگر تابعی درون تابع دیگری تعریف شود، تابع درونی به تمام متغیر های تابع خارجی دسترسی

خواهد داشت، حتی بعد از اینکه تابع خارجی به اتمام رسیده باشد.

+ ```js function sayHelloInFiveSeconds(name){ var prompt = "Hello, " + name + "!"; @@ -359,6 +426,7 @@ sayHelloInFiveSeconds("Adam"); // will open a popup with "Hello, Adam!" in 5s

5. دیگر اشیاء، سازنده ها و پیش‌نمونه ها

اشیاء میتوانند تابع داشته باشند.

+ ```js var myObj = { myFunc: function(){ @@ -370,6 +438,7 @@ myObj.myFunc(); // = "Hello world!"

وقتی تابع یک شی صدا زده می شود، تابع میتواند به سایر مقادیر درون آن شی

از طریق کلید واژه ی this دسترسی داشته باشد.

+ ```js myObj = { myString: "Hello world!", @@ -384,6 +453,7 @@ myObj.myFunc(); // = "Hello world!"

اینکه مقدار this چه باشد بستگی به این دارد که تابع چگونه صدا زده شود

نه اینکه تابع کجا تعریف شده است.

بنابر این تابع بالا اگر بدین شکل صدا زده شود کار نخواهد کرد

+ ```js var myFunc = myObj.myFunc; myFunc(); // = undefined @@ -392,6 +462,7 @@ myFunc(); // = undefined

به همین شکل، تابعی که در جای دیگر تعریف شده را میتوانید به یک شی الحاق کنید

و بدین ترتیب تابع میتواند به مقادیر درون شی از طریق this دسترسی پیدا کند.

+ ```js var myOtherFunc = function(){ return this.myString.toUpperCase(); @@ -403,6 +474,7 @@ myObj.myOtherFunc(); // = "HELLO WORLD!"

اگر تابعی با کلید new صدا زده شوند، شی جدیدی ایجاد شده و تابع در گستره ی آن صدا زده میشود.

توابعی که بدین شکل صدا زده شوند در واقع نقش سازنده را ایفا می کنند.

+ ```js var MyConstructor = function(){ this.myNumber = 5; @@ -420,6 +492,7 @@ myNewObj.myNumber; // = 5

طریق عضو جادویی __proto__ میدهند.

هرچند این به شناخت پیش نمونه ها کمک میکند ولی در حیطه ی جاوااسکریپت استاندارد قرار نمیگیرد.

در ادامه شکل استاندارد پیش نمونه ها مورد بررسی قرار میگیرند.

+ ```js var myObj = { myString: "Hello world!", @@ -435,12 +508,14 @@ myObj.meaningOfLife; // = 42 ```

این موضوع در مورد توابع نیز صدق میکند.

+ ```js myObj.myFunc(); // = "hello world!" ```

اگر عضو مورد نظر در پیش نمونه ی شی یافت نشود، پیش نمونه ی پیش نمونه جستجو شده و الی آخر

+ ```js myPrototype.__proto__ = { myBoolean: true @@ -451,6 +526,7 @@ myObj.myBoolean; // = true

توجه داشته باشید که پیش نمونه ها کپی نمی شوند و هر شی جدید به پیش نمونه موجود اشاره میکند

بدین ترتیب اگر تابعی به پیش نمونه اضافه شود تمامی اشیاء میتوانند به آن دسترسی پیدا کنند.

+ ```js myPrototype.meaningOfLife = 43; myObj.meaningOfLife; // = 43 @@ -460,6 +536,7 @@ myObj.meaningOfLife; // = 43

ولی دو راه برای ارائه پیش نمونه برای اشیاء جدید وجود دارد.

اولی وقتیست که از تابع Object.create استفاده میشود - که اخیرا به زبان اضافه شده است و بنابراین بر روی همه ی پیاده سازی های آن وجود ندارد.

+ ```js var myObj = Object.create(myPrototype); myObj.meaningOfLife; // = 43 @@ -469,6 +546,7 @@ myObj.meaningOfLife; // = 43

راه دوم - که همه جا قابل استفاده است - مربوط به سازنده ها می شود.

سازنده ها دارای عضوی با نام prototype هستند. این پیش نمونه ی خود سازنده نیست

بلکه پیش نمونه ایست که به تمامی اشیاء ساخته شده توسط این سازنده الحاق میشود.

+ ```js MyConstructor.prototype = { myNumber: 5, @@ -484,6 +562,7 @@ myNewObj2.getMyNumber(); // = 6

رشته ها و سایر سازنده های پیش ساخته ی زبان نیز دارای این ویژگی هستند.

+ ```js var myNumber = 12; var myNumberObj = new Number(12); @@ -492,6 +571,7 @@ myNumber == myNumberObj; // = true

به جز این که این سازنده ها دقیقا مانند سازنده های دیگر نیستند.

+ ```js typeof myNumber; // = 'number' typeof myNumberObj; // = 'object' @@ -508,6 +588,7 @@ if (0){

گاها به از این خاصیت با عنوان پلی فیل و برای اضافه کردن ویژگی های جدید به مجموعه ای از اشیاء فعلی زبان استفاده میشود

که کاربرد فراوانی در پشتیبانی از نسخه های قدیمیتر مرورگر ها دارد.

+ ```js String.prototype.firstCharacter = function(){ return this.charAt(0); @@ -518,6 +599,7 @@ String.prototype.firstCharacter = function(){

برای مثال، پیشتر اشاره کردیم که Object.create در نسخه های جدید پشتیبانی نشده است

ولی میتوان آن را به صورت پلی فیل استفاده کرد.

+ ```js if (Object.create === undefined){ // don't overwrite it if it exists Object.create = function(proto){ -- cgit v1.2.3