برنامه نویسی

نکات و ترفندهای زنگ زدگی #PartOne

جلد مقاله

Rust یک زبان برنامه نویسی است که به دلیل ویژگی های استثنایی خود از نظر قابلیت اطمینان، سرعت و لذت کلی برای برنامه نویس شهرت یافته است. با این حال، مهم است که در نظر داشته باشید که Rust نیز به عنوان زبانی با سطح پیچیدگی نسبتاً بالایی شناخته می شود.

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

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

از کلون های غیر ضروری خودداری کنید

هنگامی که یک متغیر با استفاده از روش .clone() کلون می شود، داده های آن کپی می شود که به منابع اضافی نیاز دارد. در نتیجه، کلون‌ها معمولاً تأثیر مضری بر عملکرد دارند و باید به‌طور کم استفاده شوند. در بسیاری از موارد، امکان انتقال ارجاع به متغیرهای یکسان به توابع مختلف وجود دارد که نیاز به شبیه سازی را از بین می برد. مثلا :

اجتناب از شبیه سازی غیر ضروری کدها تصویر

استفاده از Cow به عنوان نوع بازگشت

گاهی اوقات، ممکن است لازم باشد روش هایی بنویسید که یک قطعه رشته (&str) را به عنوان ورودی بپذیرند و احتمالاً نسخه تغییر یافته ورودی یا رشته اصلی را برگردانند.

در چنین شرایطی، نوع Cow می تواند مفید باشد زیرا به شما امکان می دهد از تخصیص بی مورد حافظه جدید خودداری کنید. با استفاده از Cow، می‌توانید رشته ورودی را در صورت نیاز تغییر دهید، اما در صورت عدم نیاز به تغییر، می‌توان رشته اصلی را بدون متحمل شدن هزینه تخصیص حافظه اضافی برگرداند.

1680966562 416 نکات و ترفندهای زنگ زدگی PartOne codesnap” loading=”lazy” width=”800″ height=”614″/>

اندازه Enum با بزرگترین عضو محدود می شود

برای اطمینان از اینکه Enum می تواند بزرگترین نوع خود را در خود جای دهد، اندازه آن بر این اساس تعیین می شود. برای بهینه‌سازی استفاده از حافظه، توصیه می‌شود که انواع مختلف را در یک Enum با اندازه‌های مشابه نگه دارید. با این حال، در صورت لزوم، انواع بزرگتر را می توان جعبه کرد. این مثال را در نظر بگیرید:

تصویر Enum codesnap

استفاده از ماکرو dbg!() به جای println!()

ماکرو dbg می تواند برای چاپ مقدار و همچنین کد منبع یک Express در stderr استفاده شود. مثال استفاده:

dbg!() تصویر کدهای ماکرو

کد بالا چاپ خواهد شد:

2
[src/main.rs:5] var1 = 2
Output: [src/main.rs:6] var1 * 2 = 4
وارد حالت تمام صفحه شوید

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

کانال های پرتو متقاطع به جای کانال های استاندارد

جعبه متقاطع با پشتیبانی از عملکرد انتخاب، زمان‌بندی و موارد دیگر، جایگزینی قدرتمند برای کانال‌های استاندارد ارائه می‌کند.

تصویر کدهای تصویر کانال های متقاطع

سفارشی سازی و زنجیر کنترل کننده های پانیک

کنترل‌کننده‌های هراس (که هوک نامیده می‌شوند) را می‌توان نادیده گرفت و زنجیره‌ای کرد، که به ویژه هنگام تنظیم گزارش خطای سفارشی و ثبت گزارش برای برنامه شما مفید است.

سفارشی کردن و زنجیر Panic handlers codesnap تصویر

خروجی:

custom error reporting logic panicked at 'test', src/main.rs:20:5
custom logging logic panicked at 'test', src/main.rs:20:5
وارد حالت تمام صفحه شوید

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

تابع مبادله استاندارد

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

تصویر کدهای تابع مبادله استاندارد

هنگام کار با Closures از impl Trait استفاده کنید

هنگام ارسال یک بسته به یک تابع، به طور کلی بهتر است از رویکرد “impl Fn/FnOnce/FnMut” به جای یک رویکرد عمومی استفاده کنید. این رویکرد، همچنین به عنوان “Impl Trait” شناخته می شود، به حفظ امضای تابع کمک می کند. با این حال، در سناریوهای پیچیده‌تر، ممکن است لازم باشد درب را با “Box” جعبه کنید تا کار کند. مهم است که به خاطر داشته باشید که بوکس یک بسته می تواند هزینه های اضافی ایجاد کند که ممکن است در برخی موارد نامطلوب باشد.

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

impl Trait with Closures codesnap illustration

خروجی:

setting up...
Action!
tearing down...
وارد حالت تمام صفحه شوید

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

Clippy و Rustfmt

آنها دو مورد از ابزارهای Rust مورد علاقه من هستند. اگر هنوز آنها را امتحان نکرده اید، به شدت توصیه می کنم آنها را امتحان کنید. Clippy می تواند پرزهای مختلفی را در کد شما تشخیص دهد و شما را به سمت نوشتن کد اصطلاحی تر راهنمایی کند. برای نصب Clippy، به سادگی کامپوننت rustup add clippy را اجرا کنید و برای اجرای آن در فضای کاری خود، کارگو clippy را اجرا کنید. برای جزئیات بیشتر، از مخزن Clippy’s GitHub دیدن کنید.

Rustfmt ابزاری است که کدهای Rust را مطابق با دستورالعمل های سبک قالب بندی می کند. نام آن دقیقاً نشان دهنده هدف آن است. برای نصب rustfmt می توانید rustup component add rustfmt را اجرا کنید. پس از نصب، می توانید cargo fmt را برای قالب بندی کد Rust در فضای کاری خود اجرا کنید. اگر به اطلاعات بیشتری نیاز دارید، می توانید از مخزن rustfmt’s GitHub دیدن کنید.

مدیریت خطای زنگ زدگی خود را با آن ساده کنید “این خطا” و “در هر صورت”

وقتی صحبت از رسیدگی به خطاها در Rust می شود، اغلب بهتر است از آن استفاده کنید “این خطا” و “در هر صورت” جعبه برای یک رویکرد اصطلاحی. “این خطا” زمانی مفید است که مصرف کننده خطا باید بر اساس شرایط خطای خاص اقدامی انجام دهد.

نتیجه

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


☞ من را دنبال کنید توییتر & لینکدین

☞ لطفا برای مقالات آینده من مشترک شوید

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

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

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

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