بایگانی

بایگانیِ دستهٔ ‘LINQ’

stackoverflow و سایت‌های هم‌خانواده آن

نوامبر 16, 2010 ۱ دیدگاه

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

این نرم‌افزار بسیار خلاقانه و با کارایی بالا نوشته شده است. برای نوشتن این برنامه از تکنولوژی ASP.Net MVC نوشته شده است. سناریوی تهیه شده برای پرسش و پاسخ در این وب سایت به قدری عالی و خلاقانه طراحی شده که تمام کاربران آن را به دادن پاسخ‌های سریع و دقیق ترغیب می‌کند. معمولا هر سوالی که در آن از بقیه کاربران بپرسید پس از چند دقیقه به پاسخ‌های خوبی دست خواهید یافت. این سایت مورد توجه متخصصان زیادی از سراسر دنیا می‌باشد.

نحوه کار در این سایت به گونه‌ای است که برای هر فعالیتی امتیازاتی از طرف کاربران و خود سایت به شما داده می‌شود. به عنوان مثال برای هر سوالی که بپرسید و سوال شما سوال خوبی باشد، کاربران می‌توانند به سوال شما رای بدهند به ازای هر رای برای سوال خوب ۵ امتیاز، برای هر پاسخ مناسب ۱۰ امتیاز و برای هر جوابی که از طرف شخص سوال‌کننده به عنوان پاسخ سوالش انتخاب شود ۱۵ امتیاز کسب می‌شود. خود سایت هم دارای مدال‌هایی با رنگ‌های طلایی، نقره‌ای و برنزی می‌باشد. این موارد به صورت خودکار محاسبه می‌شود و به شما مدال‌هایی با نام‌های مختلف داده می‌شود. به عنوان مثال اگر سوالی بپرسید که بیش از ۱۰۰۰ بار دیده شود، یک مدال برنز با عنوان popular question به شما داده می‌شود. به همین ترتیب مدال‌های دیگری با رنگ‌های دیگر به شما اعطا خواهد شد.

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

از آنجا که کارایی و ایده این سایت بسیار جالب بوده است، سایت‌های هم خانواده‌ای برای آن ساخته شده است که لزوما در زمینه برنامه‌نویسی نیستند. از جمله این ساایت‌ها می‌توان به موارد زیر اشاره کرد :

 

۱- http://serverfault.com : این سایت از اولین نمونه‌هاست، اگر مشکلاتی در رابطه با پیکربندی سرورهای مختلف دارید می‌توانید در این سایت به پاسخی دست یابید و مشکل خود را حل کنید.

۲- http://superuser.com : این سایت مربوط است به پرسش و پاسخ برای تمام مشتاقان کامپیوتر در هر ضمینه و در هم پلتفرمی.

۳- http://webapps.stackexchange.com : این سایت برای متخصصینی که در ضمینه طراحی و پیاده‌سازی نرم‌افزارهای تحت وب کار می‌کنند، پیاده سازی شده است.

۴- http://area51.stackexchange.com : این سایت برای کسانی است که علاقه دارند که سایت‌هایی از خانواده stackoverflow بسازند. در این سایت می‌توان پیشنهاداتی را برای ساخت سایت‌های هم خانواده ارائه داد.

۵- http://webmasters.stackexchange.com : این سایت به وب‌مسترها کمک می‌کند تا سوالات خود را در رابطه با نگهداری و پیشبرد وب سایت خود بپرسند.

۶- http://gamedev.stackexchange.com : اگر سوالی در رابطه با توسعه بازی‌های کامپیوتری داشتید، می‌توانید از این سایت استفاده کنید.

۷- http://askubuntu.com : در این سایت هر سوالیکه در ضمینه کار با سیستم عامل اوبونتو داشته باشید پاسخ داده می‌شود. دوستانی که از ایم سیستم عامل متن‌باز استفاده می‌کنند می‌توانند کمک زیادی از این سایت بگیرند.

۸- http://math.stackexchange.com : این سایت یکی از موارد مورد علاقه بنده است. در این سایت متخصصین زیادی گرد هم آمده‌اند و به سوالات ریاضی پاسخ می‌دهند و در ضمینه‌های گوناگون علم شیرین ریاضیات تبادل نظر می‌کنند.

۹- http://stats.stackexchange.com : این هم سایتی برای بچه‌های رشته آمار و ریاضی. در این سایت سوالات مربوط به تحلیل‌های آماری پاسخ داده می‌شوند.

۱۰- http://photo.stackexchange.com : جمعی از متخصصین عکاسی این سایت را راه‌اندازی کرده‌اند که بتوانند به آموزش این هنر بسیار زیبا بپردازند. من یکی از علاقه‌مندان پر و پا قرص عکاسی هستم.

۱۱- http://english.stackexchange.com : اگر سوالی در رابطه با زبان انگلیسی و کاربرد آن دارید این سایت به شما توصیه می‌شود. سوالات گرامری، معناشناسی، نوشتاری و … در رابطه با زبان انگلیسی را در این سایت بپرسید. از آنجا که آموزش زبان انگلیسی در کشور ما، طرفداران زیادی دارد لذا این سایت یکی از پرکاربردترین این سایت‌ها می‌تواند باشد.

۱۲- http://cooking.stackexchange.com : این هم سایتی برای آموزش آشپزی که از هم خانواده‌های سایت‌های بالا می‌باشد.

۱۳- http://gaming.stackexchange.com : اگر از علاقه‌مندان بازی‌های کامپیوتری هستید و در جایی از بازی به مشکلی برخورد کردید، این سایت را به خاطر داشته باشید.

۱۴- http://www.danatarin.com : این هم یک عضو فارسی زبان این خانواده که به پرسش و پاسخ درباره بحث‌های مختلف مربوط به حوزه IT می‌پردازد.

 

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

نکاتی مختصر و مفید برای معرفی LINQ

سپتامبر 13, 2010 3 دیدگاه

سوال ۱) انگیزه اصلی برای به وجود آمدن LINQ چه بوده است؟

۱- یکپارچگی عمیق بین زبان برنامه‌نویسی و داده‌ها

۲-پیدا کردن راه حلی برای مشکل Object Relational Mapping علاوه بر ساده‌سازی تعامل بین آبجکت‌ها و منابع داده‌ای

۳- یکی کردن و یکپارچگی دسترسی به داده‌ها

سوال ۲) انواع LINQ از لحاظ دسترسی به منابع اطلاعاتی کدامند؟

۱- کار با داده‌های حافظه (LINQ to Dataset , LINQ to Object)

۲- کار با پایگاه داده (LINQ to SQL)

۳- کار با مستندات XML

۴- کار با file system و منابع دیگر مانند Active Directory

نکته ۱ : LINQ در عمل چندین دنیای مختلف را به هم چسباند. استفاده XML با آبجکتها، آبجکتها با داده های به هم مرتبط و داده‌های به هم مرتبط با XML از جمله وظایفی است که LINQ آنها را ساده کرده است.

نکته ۲ : گرامر (syntax) و مفاهیم مربوط به LINQ در تمامی انواع استفاده آن مشترک است.

نکته ۳ : زمانی که با LINQ کار می‌کنیم در دنیایی با انواع strong کار می‌نماییم که دارای فواید زیر است :

الف – قابلیت چک شدن در زمان compile و کم شدن امکان بروز exception

ب – استفاده از خصوصیت Intellisense در محیط Visual Studio

نکته ۴ : LINQ شامل دو بخش مکمل می‌باشد، اول مجموعه‌ای از ابزارها که با داده‌ها کار می‌کنند و دوم مجموعه‌ای از extesion ها برای زبان برنامه‌نویسی

نکته ۵ : مبانی LINQ شامل چند بلوک می‌شود که به آن امکان گسترش‌پذیر بودن را می‌دهد :

الف – query operator    ب – query expression    پ – expression tree

نکته ۶ : ما میتوانیم پیاده‌سازی خودمان را برای LINQ داشته باشیم که این باعث گسترش‌پذیری آن است درست مانند LINQ to NHibernate که توسط توسعه‌دهندگان NHibernate نوشته شده است.

نکته ۷ : می‌توان انواع گسترده‌ای از datasource ها را به LINQ متصل کرد مانند سیستم فایل، Active Directory ، WMI ، Windows Event Log و یا API های دیگر.

ساختار LINQ

نکته ۸ : LINQ رویکردی اعلانی (declerative) دارد یعنی به مراحل انجام کار، کاری ندارد و فقط نتیجه را می‌خواهد.

نکته ۹ : سه روش برای نوشتن کوئری‌های LINQ وجود دارد که عبارتند از :

الف – قالب Query Expression

ب – قالب Extension Method

پ – ترکیبی از دو روش قبل

لازم به ذکر است که معمولا روش اول به روش‌های دیگر ترجیح داده می‌شود.

مثال برای روش اول )

int[] nums = new int[] {0,4,2,6,3,7,9}

var result = from n in nums

where n < 5

orderby n

select n;

مثال برای روش دوم)

var result2 = nums

.Where ( n => n<5)

.OrderBy ( n => n);

مثال برای روش سوم)

var result3 = ( from n in nums

where n < 5

orderby n

select n).Distinct();

نکته ۱۰ : کامپایلر #C تمام کوئری‌ها را به Extension Method تبدیل می‌کند و آن را اجرا می‌نماید بنابراین روش اول فقط برای کاربرپسند بودن و قابل فهم‌تر بودن به #C اضافه شده است.

نکته ۱۱ : هر جایی که استفاده از Query Expression مقدوراست بهتر است که از آن روش استفاده شود. لازم به ذکر است که این روش تمامی عملگرهای استاندارد کوئری موجود را پشتیبانی نمی‌کند و در این مواقع لاجرم باید از روش دوم استفاده نماییم.

نکته ۱۲ : یکی از لغزش‌های LINQ ترتیب نوشتن عملگرها بر خلاف SQL است، یعنی به جای اینکه به ترتیب select-from-where باشد به صورت from-where-select است. البته دلیل این کار این است که این روش پشتیبانی بهتری از Intellisense در جایی که نیاز به آن است انجام می‌دهد، در ضمن در #C نوع متغیر در سمت راست آن تعریف می‌شود.

نکته ۱۳ : اگر نیازی برای استفاده از روش سوم یا به عبارتی ترکیبی از دو روش اصلی دارید، بهتر است که Extension Method ها را به انتهای عبارت انتقال دهید.

نکته ۱۴ : مایکروسافت مجموعه‌ای از Extension Method ها را تعریف کرده (به standard query operator معروف است) که این ها متدها را به هر نوعی که IEnumerable را پیاده‌سازی کرده باشد، معرفی می‌شود تا به ما اجازه دهد تا عملگرهای کوئری را بنویسیم.

نکته ۱۵ : تمامی انواع مجموعه‌ای (collection type) توکار NET. واسط IEnumerable را پیاده‌سازی کرده است بنابراین روی تمام آن‌ها می‌توان کوئری‌های موردنظر را اجرا کرد.

نکته ۱۶ : فرم کلی گرامر Extension Method ها به صورت زیر است :

[Source Collection].[Extension Method].[Extension Method]…;

به عنوان مثال :

[Source].Where([Lambda Expression]).Select([Lambda Expression]);

————————————————————————————

در ادامه بد ندیدم مطالبی را که دوست عزیز آقای علی اقدم در بخش نظرات نوشته‌اند را در پست نوشته شده بیفزایم :

یک نکته راجب نکته ۱۴ وجود دارد و اون هم اینه که عملگرهای استاندارد پرس و جو به انواعی که واسط IEnumerable و یاIQueryable را پیاده سازی کرده باشند،معرفی می شوند.

همچنین بهتر است نکات زیر به لیست اضافه شود

نکته ۱۷ : وقتی یک پرس و جو، یک مقدار واحد را برمی گرداند مثل جمع (Sum) و یا میانگین (Average) نتیجه پرس و جو در همان لحظه برگردانده می شود ولی زمانی که خروجی پرس وجو توالی از اطلاعات است،اجرای پرس و جو به عقب می افتد مثلا یک شئ IEnumerable.

نکته ۱۸ : به قابلیت چک شدن دستورات لینک در زمان کد نویسی Language-Level گفته می شود که جان توسعه دهندگان را از خطایابی خلاص می کند.

نکته ۱۹ : شاید شما فکر کنید که LINQ ابزاری است که بتوان با آن کوئری های برای آرایه و مجموعه ها ، پایگاه داده و یا XML پیاده سازی کرد ولی این تعریف درستی از LINQ نیست بلکه یک تکنولوژی است که بتوان Provider های را پیاده سازی کرد تا بوسیله آن با پایگاه داده های مختلف به یک صورت ثابت ارتباط برقرار کرد به طور مثال Provider های مانند LINQ to SQL و یا LINQ to XML که توسط تیم توسعه .NET پیاده سازی شده اند که به این مدل ، مدل Provider اطلاق می شود (LINQ provider model).برای مشاهده انواع مختلفی از این Provider ها به لینک زیر مراجعه کنید :
http://aliaghdam.blogspot.com/2010/08/linq.html

نکته ۲۰ : توجه داشته باشید که LINQ را به صورت لینک (Link) تلفط کنید چون به وفور دیده می شود که الفاظی مانند لینکیو و… تلفط میشود.

دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.