اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
سؤال: آیا شما بدون مراجعه به مستندات شیء FormsAuthenticationTicket میتوانید پاسخ دهید هر کدام از آرگومانهای ذکر شده در سازندهی این کلاس چه کاربرد و معنایی دارند؟
الان چطور؟!
گاهی از اوقات ویژگیهایی که به یک زبان برنامه نویسی اضافه میشوند راه و روش برنامه نویسی را ممکن است کاملا تحت تاثیر قرار دهند؛ برای مثال استفاده از Generics . اما گاهی از اوقات این ویژگیهای جدید syntax sugar یا nice to have هستند(!) مانند Named arguments .
Named arguments یا آرگومانهای نامگذاری شده خوانایی کدهای شما را با بیان اینکه هر آرگومان چه معنایی دارد، افزایش میدهند. برای مثال به نظر شما کدام روش فراخوانی متد Copy در ذیل خواناتر است؟
و یا؟
هر دو یک کار را انجام میدهند اما درک عملکرد روش اول حتما نیاز به بررسی مستندات متد Copy را خواهد داشت.
نکات تکمیلی:
متد ساده زیر را در نظر بگیرید:
الف) در حالت معمولی و بدون استفاده از named argument ، پارامترهای یک متد، positional parameters هم نامیده میشوند. به این معنا که محل ذکر یک پارامتر مهم است و برای مثال در روش متداول فراخوانی ذیل، پارامتر دوم همیشه همان y است و پارامتر اول همواره همان x درنظر گرفته میشود:
اما زمانیکه از named parameters استفاده میکنید، این ترتیب دیگر اهمیتی نداشته و هر دو فراخوانی ذیل مجاز میباشند و به یک معنا هستند:
ب) همواره positional parameters باید پیش از named parameters ذکر شوند. برای مثال فراخوانی ذیل مجاز است:
اما فراخوانی زیر مجاز نبوده و برنامه کامپایل نخواهد شد:
var ticket = new FormsAuthenticationTicket ( 1, principal.Identity.Name, DateTime.Now, DateTime.Now.AddMinutes(30), true, string.Empty, FormsAuthentication.FormsCookiePath );
الان چطور؟!
//using named parameters of C# 4.0 var ticket = new FormsAuthenticationTicket ( version: 1, name: principal.Identity.Name, issueDate: DateTime.Now, expiration: DateTime.Now.AddMinutes(30), isPersistent: true, userData: string.Empty, cookiePath: FormsAuthentication.FormsCookiePath );
گاهی از اوقات ویژگیهایی که به یک زبان برنامه نویسی اضافه میشوند راه و روش برنامه نویسی را ممکن است کاملا تحت تاثیر قرار دهند؛ برای مثال استفاده از Generics . اما گاهی از اوقات این ویژگیهای جدید syntax sugar یا nice to have هستند(!) مانند Named arguments .
Named arguments یا آرگومانهای نامگذاری شده خوانایی کدهای شما را با بیان اینکه هر آرگومان چه معنایی دارد، افزایش میدهند. برای مثال به نظر شما کدام روش فراخوانی متد Copy در ذیل خواناتر است؟
File.Copy("source.txt", "destination.txt", true);
File.Copy("source.txt", "destination.txt", overwrite: true);
نکات تکمیلی:
متد ساده زیر را در نظر بگیرید:
static void Foo(int x, int y) {}
Foo(1,2);
Foo(x:4, y:2);
Foo(y:2, x:4);
Foo(4, y:2);
Foo(x:4, 2); // Compile time error