مطالب
آموزش زبان Rust - قسمت 4 - انواع داده‌ها
انواع داده‌ها، جنبه‌ی ضروری هر زبان برنامه نویسی هستند و Rust نیز از این قاعده مستثنا نیست. در Rust از انواع داده برای تعریف نوع داده‌ای که یک متغیر می‌تواند نگه دارد استفاده می‌شود. این مقاله رایج‌ترین انواع داده در 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 - قسمت 3 - متغیرها در زبان برنامه نویسی Rust
متغیرها، بخش اساسی برنامه نویسی هستند و به توسعه دهندگان اجازه می‌دهند، داده‌ها را در برنامه‌های خود ذخیره و دستکاری کنند. Rust که یک زبان برنامه نویسی سیستم‌های مدرن است، دارای مجموعه‌ای غنی از ویژگی‌ها برای کار با متغیرها می‌باشد. در این آموزش به بررسی ایجاد، تغییرپذیری و Scope متغیرها در Rust و همچنین مفهوم Shadow می‌پردازیم.


ایجاد متغیرها در Rust

در Rust، متغیرها را می‌توان با استفاده از کلمه کلیدی let و به دنبال آن، نام متغیر و مقدار اختصاص داده شده‌ی به آن ایجاد کرد. مثلا:
let x = 10;
این یک متغیر به نام x را با مقدار 10 ایجاد می‌کند. Rust یک زبان استاتیکی است؛ به این معنا که متغیرها باید با نوع خود در زمان ایجاد، اعلان کنند. مثلا:
let x: i32 = 10;
این یک متغیر به نام x را با نوع i32 (یک عدد صحیح امضاء شده‌ی 32 بیتی) و مقدار 10 ایجاد می‌کند.


متغیرهای تغییرپذیر (Mutable) و تغییرناپذیر (Immutable) در Rust

در Rust، متغیرها به طور پیش فرض تغییر ناپذیر هستند؛ به این معنا که پس از تخصیص، مقدار آنها قابل تغییر نیست؛ مثلا:
let x = 10;
x = 20; //compile-time error
برای ایجاد یک متغیر قابل تغییر در Rust، از کلمه کلیدی mut استفاده می‌شود:
let mut x = 10;
x = 20;
متغیرهای تغییرناپذیر در Rust مفید هستند زیرا می‌توانند به جلوگیری از خطاهای ناشی از تغییرات ناخواسته‌ی در داده‌ها کمک کنند. متغیرهای قابل تغییر، برای زمانیکه داده‌ها نیاز به اصلاح دارند، مانند یک حلقه، مفید هستند.


Scope متغیرها در Rust

متغیرها در Rust دارای دامنه خاصی هستند که توسط curly braces که بیانیه آنها را احاطه کرده‌اند، تعریف می‌شود. مثلا
{
   let x = 10;
} // این متغیر خارج از این محدوده در دسترس نخواهد بود
در Rust، متغیرهایی که خارج از یک تابع یا بلوک، با استفاده از کلمه‌ی کلیدی static اعلام می‌شوند، global scope هستند و از هر نقطه‌ای در برنامه قابل دسترسی هستند. با این حال، متغیرهای global در Rust با ملاحظاتی همراه هستند. از آنجائیکه می‌توان به آنها از هر جایی در برنامه دسترسی داشت، ردیابی مکان و زمان تغییر متغیر ممکن است دشوار باشد که می‌تواند رفتار برنامه را چالش برانگیز کند. این امر به ویژه در برنامه‌های بزرگتر که ممکن است متغیرهای زیادی در آن در حال استفاده باشند، صادق است. علاوه بر این، استفاده از متغیرهای global می‌تواند آزمایش و اشکال‌زدایی کد را سخت‌تر کند؛ زیرا وضعیت آنها می‌تواند توسط هر بخشی از برنامه تغییر کند.

به این دلایل، به طور کلی توصیه می‌شود که از متغیرهای 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
}
در این کد، متغیر x دوبار با مقادیر مختلف اعلان می‌شود؛ اما اعلان دوم، دوباره از کلمه‌ی کلیدی let استفاده می‌کند و عملاً متغیر اول را shadow می‌اندازد. این یعنی println دوم، مقدار متغیر دوم را که یک رشته است، به جای متغیر اول که یک عدد صحیح است، خروجی می‌دهد.
سایه زدن زمانی می‌تواند مفید باشد که بخواهید مقدار، یا نوع یک متغیر را در یک scope، بدون اینکه نام آن را تغییر دهید. همچنین می‌تواند کد را با استفاده‌ی مجدد از یک نام متغیر، برای اهداف مختلف خواناتر کند. با این حال، همچنین می‌تواند کد را پیچیده‌تر و درک آن را سخت‌تر کند؛ بنابراین باید با دقت و با دلیل موجه از آن استفاده کنید . 
اشتراک‌ها
طراحی Entity پایه برای کلاس های Domain

How you shouldn’t implement base classes

public class Entity<T>
{

  public T Id { get; protected set; }

}

Motivation for such code it pretty clear: you have a base class that can be reused across multiple projects. For instance, if there is a web application with GUID Id columns in the database and a desktop app with integer Ids, it might seem a good idea to have the same class for both of them. In fact, this approach introduces accidental complexity because of premature generalization. 

There is no need in using a single base entity class for more than one project or bounded context. Each domain has its unique path, so let it grow independently. Just copy and paste the base entity class to a new project and specify the exact type that will be used for the Id property. 

طراحی Entity پایه برای کلاس های Domain
اشتراک‌ها
Notepad++ v8 منتشر شد

A new version of Notepad++ has been released. The updated version of the text editor adds support for ARM64 systems, as well as extending its range beyond x86 and x64 systems. 

Notepad++ v8 منتشر شد
اشتراک‌ها
24.Visual Studio 2017 15.9 منتشر شد

Issues Fixed in 15.9.24

  • Fixed a bug in the C++ linker missing imports when using umbrella LIBs with difference casing on postfix of DLL name.
  • Fixed a bug in the ARM64 C++ compiler where the wrong values could be restored after setjmp.
  • Fixed C++ compiler bug for proper folding of inline variable dynamic initializers.
  • Made a change that enables Enterprise IT administrators and deployment engineers to configure tools like Microsoft Update client & SCCM to determine applicability of VS2017 updates hosted on Microsoft Update Catalog & WSUS.

Security Advisory Notices

24.Visual Studio 2017 15.9 منتشر شد
اشتراک‌ها
NET Core 3 Preview 3. منتشر شد

Today, we are announcing .NET Core 3.0 Preview 3. We would like to update you on the .NET Core 3.0 schedule and introduce you to improvements in .NET Core SDK installers, Docker containers, Range, and Index. We also have updates on the Windows Desktop and Entity Framework projects. 

NET Core 3 Preview 3. منتشر شد