اشتراکها
اشتراکها
آمار بصری GitHub در سال 2013
انواع دادهها، جنبهی ضروری هر زبان برنامه نویسی هستند و Rust نیز از این قاعده مستثنا نیست. در Rust از انواع داده برای تعریف نوع دادهای که یک متغیر میتواند نگه دارد استفاده میشود. این مقاله رایجترین انواع داده در Rust را پوشش میدهد، از جمله:
Boolean
در Rust، نوع داده بولین با کلمه کلیدی bool نشان داده میشود. این نوع داده، فقط میتواند دو مقدار داشته باشد: true یا false و معمولاً در دستورات شرطی و حلقهها برای کنترل جریان یک برنامه استفاده میشود.
Unsigned int
اعداد صحیح بدون علامت در Rust با کلمه کلیدی u و سپس تعداد بیتهایی که عدد صحیح باید داشته باشد، نشان داده میشوند. به عنوان مثال، u8 یک عدد صحیح بدون علامت 8 بیتی را نشان میدهد. محدودهی یک عدد صحیح بدون علامت از 0 تا 2^n - 1 است که n تعداد بیتها است.
Signed int
اعداد صحیح علامتدار در Rust با کلمهی کلیدی i و سپس تعداد بیتهایی که عدد صحیح باید داشته باشد، نشان داده میشوند. به عنوان مثال، i32، یک عدد صحیح علامتدار 32 بیتی را نشان میدهد. محدوده یک عدد صحیح علامتدار از -2^(n-1) تا 2^(n-1) - 1 است که n تعداد بیتها است.
Floating point numbers
اعداد ممیز شناور در Rust با کلمات کلیدی f32 یا f64 نشان داده میشوند که به ترتیب مخفف اعداد ممیز شناور 32 بیتی و 64 بیتی هستند. این نوع دادهها برای نمایش اعداد واقعی با اعشار استفاده میشوند.
Char
نوع داده char در Rust، نشان دهنده یک کاراکتر یونیکد است؛ برخلاف رشتههایی که با گیومههای دوتایی (") نشان داده میشوند.
String types
در Rust دو نوع رشته وجود دارد: String و str. نوع String، یک نوع رشتهای heap-allocated و قابل رشد است؛ در حالیکه str (تلفظ "string slice") یک نوع رشتهای است که به یک برش از یک رشته در حافظه اشاره میکند:
Arrays
آرایهها در Rust، مجموعههایی با اندازهی ثابت از عناصر از یک نوع هستند. آنها با براکت مربع ([]) و نوع عناصر داخل آرایه نشان داده میشوند.
Tuples
تاپلها در Rust، مجموعهای از عناصر از انواع مختلف هستند. آنها با پرانتز (()) و انواع عناصر داخل تاپل نشان داده میشوند.
Type aliasing
تایپ aliasing در Rust، به شما امکان میدهد تا نام جدیدی را به یک نوع موجود بدهید. این میتواند برای خوانایی بیشتر کد یا ساده کردن انواع پیچیده مفید باشد.
- Boolean
- Unsigned int
- Signed int
- Floating point numbers
- Char
- String types
- Arrays
- Tuples
- Type aliasing
Boolean
در Rust، نوع داده بولین با کلمه کلیدی bool نشان داده میشود. این نوع داده، فقط میتواند دو مقدار داشته باشد: true یا false و معمولاً در دستورات شرطی و حلقهها برای کنترل جریان یک برنامه استفاده میشود.
let is_rust_awesome: bool = true;
Unsigned int
اعداد صحیح بدون علامت در Rust با کلمه کلیدی u و سپس تعداد بیتهایی که عدد صحیح باید داشته باشد، نشان داده میشوند. به عنوان مثال، u8 یک عدد صحیح بدون علامت 8 بیتی را نشان میدهد. محدودهی یک عدد صحیح بدون علامت از 0 تا 2^n - 1 است که n تعداد بیتها است.
let x: u8 = 255;
Signed int
اعداد صحیح علامتدار در Rust با کلمهی کلیدی i و سپس تعداد بیتهایی که عدد صحیح باید داشته باشد، نشان داده میشوند. به عنوان مثال، i32، یک عدد صحیح علامتدار 32 بیتی را نشان میدهد. محدوده یک عدد صحیح علامتدار از -2^(n-1) تا 2^(n-1) - 1 است که n تعداد بیتها است.
let x: i32 = -2147483648;
Floating point numbers
اعداد ممیز شناور در Rust با کلمات کلیدی f32 یا f64 نشان داده میشوند که به ترتیب مخفف اعداد ممیز شناور 32 بیتی و 64 بیتی هستند. این نوع دادهها برای نمایش اعداد واقعی با اعشار استفاده میشوند.
let x: f32 = 3.14;
Char
نوع داده char در Rust، نشان دهنده یک کاراکتر یونیکد است؛ برخلاف رشتههایی که با گیومههای دوتایی (") نشان داده میشوند.
let c: char = 'a';
String types
در Rust دو نوع رشته وجود دارد: String و str. نوع String، یک نوع رشتهای heap-allocated و قابل رشد است؛ در حالیکه str (تلفظ "string slice") یک نوع رشتهای است که به یک برش از یک رشته در حافظه اشاره میکند:
let s1: String = String::from("hello"); let s2: &str = "world";
Arrays
آرایهها در Rust، مجموعههایی با اندازهی ثابت از عناصر از یک نوع هستند. آنها با براکت مربع ([]) و نوع عناصر داخل آرایه نشان داده میشوند.
let arr: [i32; 5] = [1, 2, 3, 4, 5];
Tuples
تاپلها در Rust، مجموعهای از عناصر از انواع مختلف هستند. آنها با پرانتز (()) و انواع عناصر داخل تاپل نشان داده میشوند.
let tup: (i32, f64, u8) = (500, 6.4, 1);
Type aliasing
تایپ aliasing در Rust، به شما امکان میدهد تا نام جدیدی را به یک نوع موجود بدهید. این میتواند برای خوانایی بیشتر کد یا ساده کردن انواع پیچیده مفید باشد.
type Age = u32; let age: Age = 30;
متغیرها، بخش اساسی برنامه نویسی هستند و به توسعه دهندگان اجازه میدهند، دادهها را در برنامههای خود ذخیره و دستکاری کنند. Rust که یک زبان برنامه نویسی سیستمهای مدرن است، دارای مجموعهای غنی از ویژگیها برای کار با متغیرها میباشد. در این آموزش به بررسی ایجاد، تغییرپذیری و Scope متغیرها در Rust و همچنین مفهوم Shadow میپردازیم.
ایجاد متغیرها در Rust
در Rust، متغیرها را میتوان با استفاده از کلمه کلیدی let و به دنبال آن، نام متغیر و مقدار اختصاص داده شدهی به آن ایجاد کرد. مثلا:
این یک متغیر به نام x را با مقدار 10 ایجاد میکند. Rust یک زبان استاتیکی است؛ به این معنا که متغیرها باید با نوع خود در زمان ایجاد، اعلان کنند. مثلا:
این یک متغیر به نام x را با نوع i32 (یک عدد صحیح امضاء شدهی 32 بیتی) و مقدار 10 ایجاد میکند.
متغیرهای تغییرپذیر (Mutable) و تغییرناپذیر (Immutable) در Rust
در Rust، متغیرها به طور پیش فرض تغییر ناپذیر هستند؛ به این معنا که پس از تخصیص، مقدار آنها قابل تغییر نیست؛ مثلا:
برای ایجاد یک متغیر قابل تغییر در Rust، از کلمه کلیدی mut استفاده میشود:
متغیرهای تغییرناپذیر در Rust مفید هستند زیرا میتوانند به جلوگیری از خطاهای ناشی از تغییرات ناخواستهی در دادهها کمک کنند. متغیرهای قابل تغییر، برای زمانیکه دادهها نیاز به اصلاح دارند، مانند یک حلقه، مفید هستند.
Scope متغیرها در Rust
متغیرها در Rust دارای دامنه خاصی هستند که توسط curly braces که بیانیه آنها را احاطه کردهاند، تعریف میشود. مثلا
در Rust، متغیرهایی که خارج از یک تابع یا بلوک، با استفاده از کلمهی کلیدی static اعلام میشوند، global scope هستند و از هر نقطهای در برنامه قابل دسترسی هستند. با این حال، متغیرهای global در Rust با ملاحظاتی همراه هستند. از آنجائیکه میتوان به آنها از هر جایی در برنامه دسترسی داشت، ردیابی مکان و زمان تغییر متغیر ممکن است دشوار باشد که میتواند رفتار برنامه را چالش برانگیز کند. این امر به ویژه در برنامههای بزرگتر که ممکن است متغیرهای زیادی در آن در حال استفاده باشند، صادق است. علاوه بر این، استفاده از متغیرهای global میتواند آزمایش و اشکالزدایی کد را سختتر کند؛ زیرا وضعیت آنها میتواند توسط هر بخشی از برنامه تغییر کند.
به این دلایل، به طور کلی توصیه میشود که از متغیرهای global به مقدار کم در Rust استفاده کنید. در عوض، اغلب بهتر است از متغیرهایی استفاده شود که در تابع یا بلوکی که در آن مورد استفاده قرار میگیرند، تعریف و scope شدهاند. این مورد میتواند درک رفتار برنامه را آسانتر کند و از عوارض جانبی ناخواسته ناشی از متغیرهای سراسری جلوگیری کند.
Shadowing Variables in Rust
Shadowing یک مفهوم برنامه نویسی است که به شما امکان میدهد یک متغیر را در یک scope، دوبار اعلام کنید و به طور موثر متغیر اصلی را با متغیر جدیدی به همین نام shadow کنید. وقتی متغیری را shadow میکنید، متغیر جدید، متغیر قبلی را در scope داخلی، "shadow" میکند و هر ارجاعی به این متغیر در آن محدوده، به متغیر جدید اشاره میکند.
در این کد، متغیر x دوبار با مقادیر مختلف اعلان میشود؛ اما اعلان دوم، دوباره از کلمهی کلیدی let استفاده میکند و عملاً متغیر اول را shadow میاندازد. این یعنی println دوم، مقدار متغیر دوم را که یک رشته است، به جای متغیر اول که یک عدد صحیح است، خروجی میدهد.
سایه زدن زمانی میتواند مفید باشد که بخواهید مقدار، یا نوع یک متغیر را در یک scope، بدون اینکه نام آن را تغییر دهید. همچنین میتواند کد را با استفادهی مجدد از یک نام متغیر، برای اهداف مختلف خواناتر کند. با این حال، همچنین میتواند کد را پیچیدهتر و درک آن را سختتر کند؛ بنابراین باید با دقت و با دلیل موجه از آن استفاده کنید .
ایجاد متغیرها در Rust
در Rust، متغیرها را میتوان با استفاده از کلمه کلیدی let و به دنبال آن، نام متغیر و مقدار اختصاص داده شدهی به آن ایجاد کرد. مثلا:
let x = 10;
let x: i32 = 10;
متغیرهای تغییرپذیر (Mutable) و تغییرناپذیر (Immutable) در Rust
در Rust، متغیرها به طور پیش فرض تغییر ناپذیر هستند؛ به این معنا که پس از تخصیص، مقدار آنها قابل تغییر نیست؛ مثلا:
let x = 10; x = 20; //compile-time error
let mut x = 10; x = 20;
Scope متغیرها در Rust
متغیرها در Rust دارای دامنه خاصی هستند که توسط curly braces که بیانیه آنها را احاطه کردهاند، تعریف میشود. مثلا
{ let x = 10; } // این متغیر خارج از این محدوده در دسترس نخواهد بود
به این دلایل، به طور کلی توصیه میشود که از متغیرهای global به مقدار کم در Rust استفاده کنید. در عوض، اغلب بهتر است از متغیرهایی استفاده شود که در تابع یا بلوکی که در آن مورد استفاده قرار میگیرند، تعریف و scope شدهاند. این مورد میتواند درک رفتار برنامه را آسانتر کند و از عوارض جانبی ناخواسته ناشی از متغیرهای سراسری جلوگیری کند.
Shadowing Variables in Rust
Shadowing یک مفهوم برنامه نویسی است که به شما امکان میدهد یک متغیر را در یک scope، دوبار اعلام کنید و به طور موثر متغیر اصلی را با متغیر جدیدی به همین نام shadow کنید. وقتی متغیری را shadow میکنید، متغیر جدید، متغیر قبلی را در scope داخلی، "shadow" میکند و هر ارجاعی به این متغیر در آن محدوده، به متغیر جدید اشاره میکند.
fn main() { let x = 5; println!("The value of x is: {}", x); // خروجی برابر 5 است let x = "hello"; println!("The value of x is: {}", x); // خروجی برابر hello }
سایه زدن زمانی میتواند مفید باشد که بخواهید مقدار، یا نوع یک متغیر را در یک scope، بدون اینکه نام آن را تغییر دهید. همچنین میتواند کد را با استفادهی مجدد از یک نام متغیر، برای اهداف مختلف خواناتر کند. با این حال، همچنین میتواند کد را پیچیدهتر و درک آن را سختتر کند؛ بنابراین باید با دقت و با دلیل موجه از آن استفاده کنید .
اشتراکها
بهتر است فعلا از توزیعهای روزانهی EF Core 8 استفاده کنید یا تا انتشار نگارش 8.0.2 آن صبر کنید
If you are updating to EF Core 8, consider using the daily builds, or wait for the 31 fixes coming in 8.0.2 in Februrary 2024
مسیرراهها
آموزش زبان Rust
- زبان برنامه نویسی Rust چیست و چرا باید از آن استفاده کنیم؟
- نصب Rust و ایجاد یک پروژهی جدید
- متغیرها در زبان برنامه نویسی Rust
- انواع دادهها
- Constants and Statics در Rust
- Fuctions
- Control Flow
- Rust-Based CS Masterclass
- Memory Management در Rust از طریق Ownership
- مفهوم Borrowing در Rust
- Structs
- Implementation Blocks
- Enum
5 JavaScript Security Best Practices for 2024
Any JavaScript web application needs to have a Content Security Policy (CSP), a browser security standard that dictates what the browser is allowed to load — whether that be a domain, subdomain, or resource. Without a CSP, hackers can exploit cross-site scripting vulnerabilities, potentially resulting in a data breach.
اشتراکها
دوره 4 ساعته مقدماتی ASP.NET Core
اشتراکها