برنامه نویسی

زنگ برای توسعه دهندگان تایپ اسکریپت: توابع

Summarize this content to 400 words in Persian Lang
سلام من راهول هستم و rust را برای ساخت Loadjitsu.io یاد گرفتم. این چهارمین پست از مجموعه من در مورد “Rust for typescript devs” است.بخش سوم در مورد رشته ها را اینجا بخوانید.پست معرفی را اینجا بخوانید.

توابع بلوک های سازنده هر زبان برنامه نویسی هستند که به شما این امکان را می دهند که منطق را کپسوله کنید و از کدها به طور موثر استفاده مجدد کنید. به عنوان یک توسعه دهنده TypeScript، شما با نحوه عملکرد توابع آشنا هستید، اما Rust چند تفاوت در نحو و عملکرد معرفی می کند. در این بخش، با استفاده از مثال‌هایی برای برجسته کردن شباهت‌ها و تفاوت‌ها، بررسی خواهیم کرد که چگونه توابع در Rust با عملکردهای TypeScript مقایسه می‌شوند.

نحو تابع پایه

TypeScript:

در TypeScript، یک تابع را با استفاده از عبارت تعریف می کنید function کلمه کلیدی و به دنبال آن نام تابع، پارامترها و نوع بازگشت. نحو تابع TypeScript برای هر کسی که با جاوا اسکریپت کار کرده است ساده و آشنا است.

function add(a: number, b: number): number {
return a + b;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

در Rust، توابع با استفاده از عبارت تعریف می شوند fn کلمه کلیدی و به دنبال آن نام تابع، پارامترها و نوع بازگشت. در حالی که نحو متفاوت است، مفهوم اساسی مشابه است.

fn add(a: i32, b: i32) -> i32 {
a + b
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: هر دو زبان از شما می خواهند که پارامترهای تابع و نوع بازگشت را تعریف کنید. در Rust نوع بازگشت پس از یک فلش مشخص می شود ->، و آخرین عبارت در تابع به طور پیش فرض، بدون نیاز به a برگردانده می شود return کلمه کلیدی (اگرچه می توانید استفاده کنید return در صورت تمایل به صراحت).

پارامترهای تابع و انواع بازگشت

TypeScript:

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

function greet(name: string): string {
return `Hello, ${name}!`;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

Rust همچنین از شما می‌خواهد که انواع پارامترهای تابع و مقادیر بازگشتی را مشخص کنید تا ایمنی نوع را تضمین کنید.

fn greet(name: &str) -> String {
format!(“Hello, {}!”, name)
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تفاوت کلیدی: زنگ greet عملکرد استفاده می کند &str برای نوع پارامتر (یک برش رشته) و String برای نوع برگشتی این تمایز بین برش‌های رشته و رشته‌های متعلق به بخش کلیدی سیستم نوع Rust است که استفاده کارآمد از حافظه و ایمنی را تضمین می‌کند.

توابع بدون مقادیر بازگشتی

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

TypeScript:

در TypeScript، چنین توابعی معمولاً با یک نوع بازگشتی حاشیه نویسی می شوند void.

function logMessage(message: string): void {
console.log(message);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

در Rust، توابعی که مقداری را بر نمی‌گردانند، نوع بازگشتی دارند () (نوع واحد)، که مشابه است void در TypeScript.

fn log_message(message: &str) {
println!(“{}”, message);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: در هر دو زبان، می توانید توابعی ایجاد کنید که بدون برگرداندن مقداری، اقداماتی را انجام دهند. در Rust، عدم وجود نوع برگشتی با نوع واحد نشان داده می شود ().

عملکرد بیش از حد

TypeScript:

TypeScript از بارگذاری بیش از حد تابع پشتیبانی می کند و به شما امکان می دهد چندین امضا برای یک تابع تعریف کنید. این زمانی مفید است که یک تابع را بتوان با انواع یا تعداد آرگومان های مختلف فراخوانی کرد.

function display(value: string): void;
function display(value: number): void;
function display(value: string | number): void {
console.log(value);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

Rust از بارگذاری بیش از حد عملکرد سنتی پشتیبانی نمی کند. با این حال، شما می توانید با استفاده از رفتار مشابه دست پیدا کنید صفات یا enum برای رسیدگی به انواع مختلف ورودی

fn display(value: &str) {
println!(“{}”, value);
}

fn display_number(value: i32) {
println!(“{}”, value);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تفاوت کلیدی: در Rust، معمولاً توابع جداگانه تعریف می‌کنید یا از ویژگی‌ها برای مدیریت انواع مختلف ورودی‌ها استفاده می‌کنید. در حالی که بارگذاری بیش از حد تابع TypeScript به تعاریف عملکرد انعطاف‌پذیرتر اجازه می‌دهد، رویکرد Rust بر وضوح و وضوح تأکید دارد.

بسته شدن

هر دو نوع اسکریپت و Rust از بسته شدن ها پشتیبانی می کنند، که توابعی هستند که در یک تابع دیگر تعریف شده اند. بسته ها می توانند متغیرها را از محیط اطراف خود جذب کنند.

TypeScript:

در TypeScript، بستن معمولاً با توابع ناشناس یا توابع پیکان استفاده می شود.

function makeAdder(x: number) {
return function(y: number): number {
return x + y;
};
}

const add5 = makeAdder(5);
console.log(add5(10)); // Output: 15

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

در Rust، بسته ها با استفاده از تعریف می شوند || نحو، و آنها می توانند متغیرها را از محدوده اطراف ضبط کنند.

fn make_adder(x: i32) -> impl Fn(i32) -> i32 {
move |y| x + y
}

let add5 = make_adder(5);
println!(“{}”, add5(10)); // Output: 15

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: هر دو نوع اسکریپت و Rust به شما این امکان را می دهند که بسته هایی ایجاد کنید که متغیرهای محیط اطراف خود را گرفته و استفاده می کنند. در Rust، move از کلمه کلیدی می توان برای در اختیار گرفتن مالکیت متغیرهای گرفته شده استفاده کرد.

توابع مرتبه بالاتر

توابع درجه بالاتر، که توابع دیگر را به عنوان آرگومان می گیرند یا آنها را برمی گردانند، هم در TypeScript و هم در Rust پشتیبانی می شوند.

TypeScript:

function applyFunction(f: (x: number) => number, value: number): number {
return f(value);
}

function square(x: number): number {
return x * x;
}

console.log(applyFunction(square, 5)); // Output: 25

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

fn apply_functionF>(f: F, value: i32) -> i32
where
F: Fn(i32) -> i32,
{
f(value)
}

fn square(x: i32) -> i32 {
x * x
}

println!(“{}”, apply_function(square, 5)); // Output: 25

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: هر دو زبان به شما اجازه می دهند توابع را به عنوان آرگومان به توابع دیگر منتقل کنید. در Rust، Fn از ویژگی برای تعریف نوع آرگومان تابع استفاده می شود و ایمنی نوع را تضمین می کند.

سلام من راهول هستم و rust را برای ساخت Loadjitsu.io یاد گرفتم. این چهارمین پست از مجموعه من در مورد “Rust for typescript devs” است.
بخش سوم در مورد رشته ها را اینجا بخوانید.
پست معرفی را اینجا بخوانید.

توابع بلوک های سازنده هر زبان برنامه نویسی هستند که به شما این امکان را می دهند که منطق را کپسوله کنید و از کدها به طور موثر استفاده مجدد کنید. به عنوان یک توسعه دهنده TypeScript، شما با نحوه عملکرد توابع آشنا هستید، اما Rust چند تفاوت در نحو و عملکرد معرفی می کند. در این بخش، با استفاده از مثال‌هایی برای برجسته کردن شباهت‌ها و تفاوت‌ها، بررسی خواهیم کرد که چگونه توابع در Rust با عملکردهای TypeScript مقایسه می‌شوند.

نحو تابع پایه

TypeScript:

در TypeScript، یک تابع را با استفاده از عبارت تعریف می کنید function کلمه کلیدی و به دنبال آن نام تابع، پارامترها و نوع بازگشت. نحو تابع TypeScript برای هر کسی که با جاوا اسکریپت کار کرده است ساده و آشنا است.


function add(a: number, b: number): number {
    return a + b;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

در Rust، توابع با استفاده از عبارت تعریف می شوند fn کلمه کلیدی و به دنبال آن نام تابع، پارامترها و نوع بازگشت. در حالی که نحو متفاوت است، مفهوم اساسی مشابه است.


fn add(a: i32, b: i32) -> i32 {
    a + b
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: هر دو زبان از شما می خواهند که پارامترهای تابع و نوع بازگشت را تعریف کنید. در Rust نوع بازگشت پس از یک فلش مشخص می شود ->، و آخرین عبارت در تابع به طور پیش فرض، بدون نیاز به a برگردانده می شود return کلمه کلیدی (اگرچه می توانید استفاده کنید return در صورت تمایل به صراحت).

پارامترهای تابع و انواع بازگشت

TypeScript:

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


function greet(name: string): string {
    return `Hello, ${name}!`;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

Rust همچنین از شما می‌خواهد که انواع پارامترهای تابع و مقادیر بازگشتی را مشخص کنید تا ایمنی نوع را تضمین کنید.


fn greet(name: &str) -> String {
    format!("Hello, {}!", name)
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تفاوت کلیدی: زنگ greet عملکرد استفاده می کند &str برای نوع پارامتر (یک برش رشته) و String برای نوع برگشتی این تمایز بین برش‌های رشته و رشته‌های متعلق به بخش کلیدی سیستم نوع Rust است که استفاده کارآمد از حافظه و ایمنی را تضمین می‌کند.

توابع بدون مقادیر بازگشتی

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

TypeScript:

در TypeScript، چنین توابعی معمولاً با یک نوع بازگشتی حاشیه نویسی می شوند void.


function logMessage(message: string): void {
    console.log(message);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

در Rust، توابعی که مقداری را بر نمی‌گردانند، نوع بازگشتی دارند () (نوع واحد)، که مشابه است void در TypeScript.


fn log_message(message: &str) {
    println!("{}", message);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: در هر دو زبان، می توانید توابعی ایجاد کنید که بدون برگرداندن مقداری، اقداماتی را انجام دهند. در Rust، عدم وجود نوع برگشتی با نوع واحد نشان داده می شود ().

عملکرد بیش از حد

TypeScript:

TypeScript از بارگذاری بیش از حد تابع پشتیبانی می کند و به شما امکان می دهد چندین امضا برای یک تابع تعریف کنید. این زمانی مفید است که یک تابع را بتوان با انواع یا تعداد آرگومان های مختلف فراخوانی کرد.


function display(value: string): void;
function display(value: number): void;
function display(value: string | number): void {
    console.log(value);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

Rust از بارگذاری بیش از حد عملکرد سنتی پشتیبانی نمی کند. با این حال، شما می توانید با استفاده از رفتار مشابه دست پیدا کنید صفات یا enum برای رسیدگی به انواع مختلف ورودی


fn display(value: &str) {
    println!("{}", value);
}

fn display_number(value: i32) {
    println!("{}", value);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تفاوت کلیدی: در Rust، معمولاً توابع جداگانه تعریف می‌کنید یا از ویژگی‌ها برای مدیریت انواع مختلف ورودی‌ها استفاده می‌کنید. در حالی که بارگذاری بیش از حد تابع TypeScript به تعاریف عملکرد انعطاف‌پذیرتر اجازه می‌دهد، رویکرد Rust بر وضوح و وضوح تأکید دارد.

بسته شدن

هر دو نوع اسکریپت و Rust از بسته شدن ها پشتیبانی می کنند، که توابعی هستند که در یک تابع دیگر تعریف شده اند. بسته ها می توانند متغیرها را از محیط اطراف خود جذب کنند.

TypeScript:

در TypeScript، بستن معمولاً با توابع ناشناس یا توابع پیکان استفاده می شود.


function makeAdder(x: number) {
    return function(y: number): number {
        return x + y;
    };
}

const add5 = makeAdder(5);
console.log(add5(10)); // Output: 15

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:

در Rust، بسته ها با استفاده از تعریف می شوند || نحو، و آنها می توانند متغیرها را از محدوده اطراف ضبط کنند.


fn make_adder(x: i32) -> impl Fn(i32) -> i32 {
    move |y| x + y
}

let add5 = make_adder(5);
println!("{}", add5(10)); // Output: 15

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: هر دو نوع اسکریپت و Rust به شما این امکان را می دهند که بسته هایی ایجاد کنید که متغیرهای محیط اطراف خود را گرفته و استفاده می کنند. در Rust، move از کلمه کلیدی می توان برای در اختیار گرفتن مالکیت متغیرهای گرفته شده استفاده کرد.

توابع مرتبه بالاتر

توابع درجه بالاتر، که توابع دیگر را به عنوان آرگومان می گیرند یا آنها را برمی گردانند، هم در TypeScript و هم در Rust پشتیبانی می شوند.

TypeScript:


function applyFunction(f: (x: number) => number, value: number): number {
    return f(value);
}

function square(x: number): number {
    return x * x;
}

console.log(applyFunction(square, 5)); // Output: 25

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

زنگ زدگی:


fn apply_functionF>(f: F, value: i32) -> i32
where
    F: Fn(i32) -> i32,
{
    f(value)
}

fn square(x: i32) -> i32 {
    x * x
}

println!("{}", apply_function(square, 5)); // Output: 25

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شباهت: هر دو زبان به شما اجازه می دهند توابع را به عنوان آرگومان به توابع دیگر منتقل کنید. در Rust، Fn از ویژگی برای تعریف نوع آرگومان تابع استفاده می شود و ایمنی نوع را تضمین می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا