Codespian | کدسپین – Telegram
Codespian | کدسپین
66 subscribers
22 photos
2 videos
12 files
82 links
Codespian Official Community Channel
Admin: @AMIRALI_H0SSEINI
Download Telegram
اینجا کلی تم Vscode هست که می‌تونی بنا به سلیقت انتخاب کنی 👌🏻

https://vscodethemes.com
🔥1
In another world 🌚🧑‍💻
👍3
تو این پست میخوایم راجب یک قابلیت خیلی فوق العاده که تایپ اسکریپت بوجود اورده صحبت کنیم ، متادیتا !

متادیتا (Metadata) در TypeScript مثل یادداشت‌های نامرئی روی کد هامونه که به سیستممون میگه چطور با اجزای مختلف برنامه رفتار کنه. این ویژگی، به خصوص وقتی با Decoratorها ترکیب میشه، می‌تونه برنامه‌نویسی رو حرفه‌ای‌تر و شیرین تر کنه !

چرا متادیتا مهمه؟
انعطاف‌پذیری: بدون تغییر منطق اصلی کد، رفتارش رو اصلاح می‌کنه.
کاهش کد تکراری: مثلاً برای اعتبارسنجی، دیباگ یا لاگینگ.
قابلیت استفاده در فریمورک‌ها: مثل NestJS یا Angular که از متادیتا برای Routeها و Dependency Injection استفاده میشه .

چه موقع از متادیتا استفاده کنیم؟
• ساخت کتابخانه/فریمورک
• اعتبارسنجی خودکار داده‌ها
• پیاده‌سازی AOP (برنامه‌نویسی جنبه‌گرا)

اگه میخوای بیشتر راجبش بدونی راجب reflect metadata api بخون.
👍1
در جاوا اسکریپت، داده‌ها به دو دسته اصلی تقسیم می‌شوند: داده‌های اولیه (Primitive) و داده‌های غیر اولیه (Non-Primitive).

1. داده‌های اولیه (Primitive Data Types)

داده‌های اولیه شامل نوع‌هایی هستند که به صورت مستقیم مقدار را ذخیره می‌کنند و غیرقابل تغییر (immutable) هستند. در جاوا اسکریپت، انواع داده‌های اولیه عبارتند از:

Number: برای ذخیره اعداد (مثلاً 10، 15.5).

String: برای ذخیره رشته‌ها (مثلاً "Hello", 'World').

Boolean: برای ذخیره مقادیر منطقی (true یا false).

Undefined: وقتی که یک متغیر تعریف شده باشد اما مقداری به آن اختصاص داده نشده باشد.

Null: نمایان‌گر عدم وجود مقدار است.

Symbol: نوعی از داده که برای ایجاد شناسه‌های منحصر به فرد استفاده می‌شود (از ES6 به بعد).

BigInt: برای کار با اعداد بزرگ‌تر از محدوده Number.

مثال:

let num = 10;               // Number
let str = "Hello"; // String
let isTrue = true; // Boolean
let notDefined; // Undefined
let emptyValue = null; // Null
let uniqueSymbol = Symbol('unique'); // Symbol
let bigIntValue = BigInt(9007199254740991); // BigInt


2. داده‌های غیر اولیه (Non-Primitive Data Types)

داده‌های غیر اولیه شامل نوع‌هایی هستند که می‌توانند شامل مجموعه‌ای از مقادیر باشند و قابل تغییر (mutable) هستند. در جاوا اسکریپت، انواع داده‌های غیر اولیه عبارتند از:

Object: برای ذخیره مجموعه‌ای از کلید-مقدارها. می‌تواند شامل انواع مختلف داده‌ها باشد.

Array: نوع خاصی از شیء که برای ذخیره مجموعه‌ای از مقادیر استفاده می‌شود.

Function: توابع نیز نوعی از اشیاء هستند.

مثال:

// Object
let person = {
name: "Ali",
age: 30,
isStudent: false
};

// Array
let fruits = ["apple", "banana", "cherry"];

// Function
function greet() {
console.log("Hello!");
}


جمع‌بندی

• داده‌های اولیه به صورت مستقیم مقدار را نگه می‌دارند و غیرقابل تغییر هستند.

• داده‌های غیر اولیه می‌توانند شامل مجموعه‌ای از مقادیر باشند و قابل تغییر هستند.

این دو دسته اصلی داده‌ها در جاوا اسکریپت به شما کمک می‌کنند تا برنامه‌های خود را به طور مؤثرتر مدیریت کنید.
1👍1
در جاوا اسکریپت، Template Literals (یا الگوهای متنی) یک ویژگی جدید از ES6 (ECMAScript 2015) هستند که به شما اجازه می‌دهند رشته‌ها را به شیوه‌ای ساده‌تر و خواناتر بسازید. این ویژگی به شما امکان می‌دهد تا:

1. رشته‌ها را در چند خط بنویسید.

2. متغیرها و عبارات را به راحتی درون رشته‌ها قرار دهید.

3. از توابع و عبارات پیچیده درون رشته‌ها استفاده کنید.

نحوه استفاده از Template Literals

برای استفاده از Template Literals، به جای علامت‌های نقل قول معمولی (' یا ") از بک‌تیک‌ها ( `) استفاده می‌کنید.

1. چند خطی بودن رشته‌ها

با استفاده از Template Literals، می‌توانید رشته‌ها را در چند خط بنویسید:

const multiLineString = این یک رشته
در چند خط است
که با Template Literal نوشته شده است.;

console.log(multiLineString);


2. قرار دادن متغیرها و عبارات

شما می‌توانید متغیرها و عبارات را با استفاده از ${} درون Template Literals قرار دهید:

const name = "علی";
const age = 25;

const greeting = سلام، نام من ${name} است و من ${age} سال دارم.;

console.log(greeting);


3. استفاده از توابع و عبارات

شما می‌توانید توابع و عبارات پیچیده را نیز درون Template Literals استفاده کنید:

const a = 5;
const b = 10;

const result = جمع ${a} و ${b} برابر است با ${a + b}.;

console.log(result);


مزایای Template Literals

خوانایی بهتر: با استفاده از Template Literals، کد شما خواناتر و مرتب‌تر خواهد بود.

کاهش نیاز به کاراکترهای فرار: در مقایسه با رشته‌های معمولی، نیاز به کاراکترهای فرار (مانند \n برای خط جدید) کمتر است.

استفاده آسان از عبارات: می‌توانید به راحتی متغیرها و عبارات را درون رشته‌ها قرار دهید.

جمع‌بندی

Template Literals یک ویژگی قدرتمند در جاوا اسکریپت هستند که به شما امکان می‌دهند تا رشته‌ها را به شیوه‌ای ساده‌تر و مؤثرتر بسازید. با استفاده از بک‌تیک‌ها، شما می‌توانید رشته‌های چند خطی ایجاد کنید و به راحتی متغیرها و عبارات را درون آن‌ها قرار دهید.
در جاوااسکریپت، مانند هر زبان برنامه‌نویسی دیگری، رعایت بهترین شیوه‌ها (Best Practices) و اجتناب از شیوه‌های بد (Bad Practices) می‌تواند به بهبود کیفیت کد، افزایش کارایی و تسهیل نگهداری آن کمک کند. در ادامه به برخی از بهترین و بدترین شیوه‌ها در جاوااسکریپت اشاره می‌شود.

بهترین شیوه‌ها (Best Practices)

1. استفاده از const و let به جای var:

• استفاده از const برای متغیرهای غیرقابل تغییر و let برای متغیرهای قابل تغییر، به جلوگیری از مشکلات مربوط به دامنه متغیرها کمک می‌کند.
   const PI = 3.14; // ثابت
let age = 25; // متغیر قابل تغییر


2. استفاده از Arrow Functions:

• توابع فلش (Arrow Functions) به شما کمک می‌کنند تا کد را مختصرتر و خواناتر بنویسید.
   const add = (a, b) => a + b;


3. استفاده از Template Literals:

• برای ساخت رشته‌های چند خطی و درج متغیرها، از Template Literals استفاده کنید.
   const name = "علی";
const greeting = سلام، ${name}!;


4. مدیریت خطا:

• از بلوک‌های try...catch برای مدیریت خطاها استفاده کنید تا از بروز مشکلات غیرمنتظره جلوگیری کنید.
   try {
// کد ممکن است خطا بدهد
} catch (error) {
console.error("خطا:", error);
}


5. استفاده از ماژول‌ها:

• کد خود را به ماژول‌های کوچک تقسیم کنید تا نگهداری و استفاده مجدد از آن آسان‌تر شود.

6. نوشتن مستندات:

• مستندات مناسب برای کد خود بنویسید تا دیگران (و خودتان در آینده) بتوانند به راحتی بفهمند که کد چه کاری انجام می‌دهد.

7. استفاده از linting tools:

• ابزارهایی مانند ESLint را برای شناسایی و اصلاح مشکلات کدنویسی استفاده کنید.

شیوه‌های بد (Bad Practices)

1. استفاده از var:

• استفاده از var می‌تواند منجر به مشکلات دامنه و تداخل نام‌ها شود.
   var x = 10; // بهتر است از let یا const استفاده شود


2. عدم مدیریت خطا:

• نادیده گرفتن مدیریت خطا می‌تواند باعث بروز مشکلات جدی در برنامه شود.

3. نوشتن کد غیرقابل فهم:

• استفاده از نام‌های متغیر نامناسب یا نوشتن کد پیچیده بدون توضیحات می‌تواند فهم کد را دشوار کند.

4. استفاده بیش از حد از Globals:

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

5. عدم استفاده از Strict Mode:

• عدم استفاده از "Strict Mode" می‌تواند منجر به بروز مشکلاتی در کد شود.
   'use strict'; // استفاده از حالت سخت


6. عدم استفاده از Async/Await:

• نادیده گرفتن الگوهای مدرن مدیریت Promise مانند async/await می‌تواند کد را پیچیده‌تر کند.
   async function fetchData() {
const response = await fetch(url);
const data = await response.json();
return data;
}


7. عدم توجه به عملکرد:

• نوشتن کد بدون توجه به کارایی و بهینه‌سازی می‌تواند منجر به کاهش سرعت برنامه شود.

جمع‌بندی

رعایت بهترین شیوه‌ها و اجتناب از شیوه‌های بد در جاوااسکریپت به شما کمک می‌کند تا کدی تمیزتر، قابل نگهداری‌تر و کارآمدتر بنویسید. با پیروی از این نکات، می‌توانید کیفیت پروژه‌های خود را بهبود ببخشید و تجربه بهتری در برنامه‌نویسی داشته باشید.
در جاوااسکریپت، تابع eval() یک تابع داخلی است که به شما این امکان را می‌دهد که رشته‌هایی از کد جاوااسکریپت را اجرا کنید. به عبارت دیگر، eval() می‌تواند یک رشته را به عنوان کد جاوااسکریپت تفسیر و اجرا کند.

نحوه استفاده از eval()

ساختار کلی استفاده از eval() به شکل زیر است:

eval(string);


مثال ساده

let x = 10;
let y = 20;
let result = eval("x + y");
console.log(result); // خروجی: 30


در این مثال، eval() رشته "x + y" را تفسیر کرده و مقدار متغیرهای x و y را محاسبه می‌کند.

نکات مهم

1. امنیت: استفاده از eval() می‌تواند خطرناک باشد، زیرا اگر ورودی به آن از منبعی غیرقابل اعتماد باشد، ممکن است کد مخرب اجرا شود. بنابراین، استفاده از eval() معمولاً توصیه نمی‌شود.

2. عملکرد: eval() می‌تواند بر روی عملکرد برنامه تأثیر منفی بگذارد، زیرا موتور جاوااسکریپت نمی‌تواند بهینه‌سازی‌های لازم را برای کدی که با eval() اجرا می‌شود انجام دهد.

3. دامنه متغیرها: کدی که در eval() اجرا می‌شود می‌تواند به متغیرهای محلی و سراسری دسترسی داشته باشد، که می‌تواند باعث بروز مشکلاتی در مدیریت دامنه‌ها شود.

مثال پیشرفته‌تر

function calculate(expression) {
return eval(expression);
}

console.log(calculate("3 * (4 + 5)")); // خروجی: 27


نتیجه‌گیری

به طور کلی، اگرچه eval() می‌تواند مفید باشد، اما باید با احتیاط استفاده شود و در صورت امکان، از روش‌های دیگر برای اجرای کد یا ارزیابی عبارات استفاده کنید.
👍1
تابع IIFE (Immediately Invoked Function Expression) یک الگوی طراحی در جاوااسکریپت است که به شما این امکان را می‌دهد که یک تابع را به محض تعریف آن، بلافاصله اجرا کنید. این الگو معمولاً برای ایجاد یک دامنه محلی (scope) جدید و جلوگیری از آلودگی فضای نام جهانی (global namespace) استفاده می‌شود.

ساختار IIFE

ساختار کلی IIFE به صورت زیر است:

(function() {
// کد شما در اینجا
})();


یا می‌توانید از علامت + یا ! برای اطمینان از اینکه تابع به عنوان یک عبارت تابع تفسیر می‌شود، استفاده کنید:

!function() {
// کد شما در اینجا
}();


مثال ساده

در این مثال، یک IIFE تعریف می‌کنیم که یک پیام را در کنسول چاپ می‌کند:

(function() {
console.log("این یک IIFE است!");
})();


استفاده از پارامترها

تابع IIFE می‌تواند پارامترهایی نیز داشته باشد:

(function(name) {
console.log("سلام " + name + "!");
})("علی");


در این مثال، نام "علی" به عنوان پارامتر به تابع ارسال می‌شود و در نتیجه پیام "سلام علی!" در کنسول چاپ می‌شود.

ایجاد دامنه محلی

تابع IIFE معمولاً برای ایجاد یک دامنه محلی استفاده می‌شود. به عنوان مثال:

var globalVar = "این یک متغیر جهانی است";

(function() {
var localVar = "این یک متغیر محلی است";
console.log(localVar); // خروجی: این یک متغیر محلی است
})();

console.log(globalVar); // خروجی: این یک متغیر جهانی است
// console.log(localVar); // این خط خطا خواهد داد، زیرا localVar در دسترس نیست


نتیجه‌گیری

تابع IIFEها ابزارهای مفیدی برای مدیریت دامنه‌ها و جلوگیری از آلودگی فضای نام جهانی هستند. با استفاده از آنها، می‌توانید کد خود را سازماندهی کنید و متغیرهایی که فقط درون تابع نیاز دارید را به راحتی پنهان کنید.
👍1
متد setInterval در جاوااسکریپت برای اجرای یک تابع یا کد مشخص به صورت مکرر با یک فاصله زمانی معین استفاده می‌شود. این متد به شما این امکان را می‌دهد که یک تابع را در فواصل زمانی مشخص (به میلی‌ثانیه) اجرا کنید.

ساختار متد setInterval

let intervalID = setInterval(callback, delay[, ...args]);


• بخش callback: تابعی که قرار است به صورت مکرر اجرا شود.

• بخش delay: زمان تاخیر (در میلی‌ثانیه) بین هر بار اجرای تابع.

• بخش ...args (اختیاری): آرگومان‌هایی که به تابع callback ارسال می‌شوند.

• بخش intervalID: شناسه‌ای که برای متوقف کردن اجرای مکرر تابع استفاده می‌شود.

مثال ساده

در اینجا یک مثال ساده از استفاده از setInterval آورده شده است:

let count = 0;

const intervalID = setInterval(function() {
count++;
console.log(count);

// اگر شمارش به 5 رسید، متوقف کن
if (count === 5) {
clearInterval(intervalID);
}
}, 1000); // هر یک ثانیه (1000 میلی‌ثانیه)


در این مثال، تابع هر یک ثانیه یک بار اجرا می‌شود و مقدار count را افزایش می‌دهد. وقتی که count به ۵ رسید، با استفاده از clearInterval اجرای مکرر متوقف می‌شود.

استفاده از Arrow Function

می‌توانید از Arrow Function نیز برای نوشتن کد خود استفاده کنید:

let count = 0;

const intervalID = setInterval(() => {
count++;
console.log(count);

if (count === 5) {
clearInterval(intervalID);
}
}, 1000);


متوقف کردن setInterval

برای متوقف کردن setInterval، باید از تابع clearInterval استفاده کنید و شناسه‌ای که setInterval برمی‌گرداند را به آن پاس دهید:

clearInterval(intervalID);


نتیجه‌گیری

متد setInterval ابزاری قدرتمند برای اجرای کد در فواصل زمانی مشخص است. با استفاده از این متد، می‌توانید کارهایی مانند به‌روزرسانی صفحه، انیمیشن‌ها و یا هر نوع عملیات مکرر دیگری را انجام دهید. توجه داشته باشید که استفاده نادرست از setInterval می‌تواند منجر به بارگذاری بیش از حد CPU شود، بنابراین همیشه باید اطمینان حاصل کنید که شرایطی برای متوقف کردن آن وجود دارد.
👍1