<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های p.kalantar.n</title><link>https://virgool.ir/feed/@p.kalantar.n</link><description>در این جا آموزشهای تصویری رایگان مربوط به برنامه نویسی از جمله آموزشهای طراحی سایت , موبایل را برای دوست داران برنامه نویسی و عزیزانی که نمیتوانند حضوری کلاسی شرکت کنند قرار میدهم</description><language>fa</language><pubDate>2026-11-10 16:34:49</pubDate><image><url>https://files.virgool.ir/upload/users/67887/avatar/w0TJiU.png</url><title>p.kalantar.n</title><link>https://virgool.ir/@p.kalantar.n</link></image><item><title>آموزش جاوا-آموزش رشته ها در JAVA</title><link>https://virgool.ir/@p.kalantar.n/آموزش-رشته-ها-در-جاوا-fbjvgdajn1ri</link><description>سلام با آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با آرایه ها Array Lists در جاوا آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآموزش رشته ها در جاوادر مورد رشته های جاوا موارد بیشتری از آنچه با چشم دیده می شود وجود دارد. بر خلاف متغیرهای int یا متغیرهای double، رشته ها آبجکت می باشند. و این در عمل به این معناست که با رشته های متن کارهایی می توانید انجام دهید که با متغیرهای double یا int نمی توانید انجام دهید. ( همین مورد برای انواع داده ی boolean، byte، single، char، float، long و short نیز به کار می رود: آنها مانند رشته ها آبجکت نیستند)قبل از اجرای رشته های متن، در اینجا اطلاعات اصلی مربوط به رشته ها را مشاهده خواهید کرد.چگونگی ذخیره ی رشته ها در جاواآموزش جاوایک رشته مجموعه ای از کاراکترهای Unicode می باشد که تحت عنوان نام یک متغیر حفظ می شوند. رشته ی زیر را در نظر بگیرید.String someText = &#34;Bill&#34;‎این خط به جاوا می گوید که یک رشته آبجکت با چهار کاراکتر &#34;B&#34;، &#34;i&#34;، &#34;l&#34;و یک &#34;l&#34; دیگر برقرار کند. در مجموعه کاراکتر Unicode، این مقادیر عبارتند از: \u0042، \u0069، \u006c،\u006c . مقادیر Unicode به عنوان اعداد هگزادسیمال ذخیره می شوند. حروف بزرگ ( A تا Z) با استفاده از مقادیر \u0041 تا \u005a ذخیره می شوند، در حالیکه حروف کوچک ( a تا z ) با استفاده از مقادیر هگزادسیمال \u0061 تا \u007a ذخیره می شوند.در بخش قبل یک array وجود داشت که رشته های متن را حفظ می کرد. سپس array را مرتب سازی کردیم.وقتی که برنامه اجرا می شود، خروجی مانند تصویر زیر می باشد.قبلا ذکر کردیم که لغت &#34;This&#34; در ابتدا قرار می گیرد. اگر قرار است array به ترتیب حروف الفبا مرتب شود، انتظار می رود که لغت &#34;a&#34; در ابتدا قرار بگیرد. این به این خاطر است که لغت &#34;a&#34; با حرف کوچک دارای مقدار هگزادسیمال u\0061 می باشد، که عدد دهدهی 97 می باشد. اما حرف بزرگ &#34;T&#34; دارای یک مقدار هگزادسیمال u\0054 می باشد که عدد دهدهی 84 است. 84 کمتر از 97 می باشد، بنابراین &#34;T&#34; در ابتدا قرار می گیرد.بسیار خود، اجازه بدهید در موزد اجرای رشته های متن کارهایی انجام دهیم. رشته متدهایی که مورد بررسی قرار خواهیم داد، عبارتند ازtoUpperCasse toLowerCase compareTo IndexOf endWith, startsWith Substring Equals charAt trim valueOfمتدهای اول در بالا متدهای آسانی می باشند، که به حروف بزرگ و کوچک تبدیل می شوند. در بخش بعد در مورد آنها فرا خواهید گرفت.آموزش جاواآموزش تغییر به حروف بزرگ و کوچک در جاواتبدیل رشته های خود به حروف بزرگ و کوچک کار آسانی می باشد: تنها از متودهای داخلی toUpperCase و toLowerCase استفاده کنید.برای این کار یک پروژه ی جدید را شروع کرده و کد زیر را به آن اضافه کنید:دو خط اول از کد یک متغیر String برای حفظ متن &#34;text to change&#34; تنظیم می کنند و سپس آن را چاپ می کنیم. خط سوم یک متغیر دوم String به نام نتیجه را تنظیم می کند. و خط چهارم می باشد که در آن تبدیل را انجام می دهیم:result = changeCase.toUpperCase( );برای استفاده از یک متود string ابتدا رشته ی مورد نظر را تایپ کنید. برای ما این رشته در متغیر changeCase نامیده می شود. پس از نام متغیر یک نقطه تایپ کنید، سپس لیستی از متودهای موجود را مشاهده می کنید که می توانید در رشته ی خود از آنها استفاده کنید. toUpperCase را انتخاب کنید. ( متود پس از آن نیاز به پرانتز دارد.)پس از اینکه جاوا لغت را به حروف بزرگ تغییر داده است، ما رشته ی جدید را به متغیر نتیجه ی خود مرتب می کنیم.وقتی برنامه اجرا می شود، پنجره ی Output نتیجه ی زیر را نمایش خواهد داد:اما شما مجبور نیستید که لغت تغییر یافته را در یک متغیر جدید ذخیره کنید. این کار نیز انجام می شود:System.out.println( changeCase.toUpperCase( ) );در اینجا جاوا تنها با تغییر رشته و بدون نیاز به اختصاص دادن نتیجه به یک متغیر جدید، به کار خود ادامه خواهد داد.در عوض اگر می خواهید فقط به حروف کوچک تغییر دهید، از متود toLowerCase استفاده کنید. این متود درست به روش متود toUpperCase استفاده می شود.در بخش بعدی چگونگی مقایسه ی رشته ها را در جاوا مشاهده خواهید کرد.آموزش جاواآموزش مقایسه ی رشته هاشما می توانید یک متود را با متود دیگر مقایسه کنید. ( در هنگام مقایسه جاوا از مقادیر هگزادسیمال به جای خود حروف استفاده خواهد کرد.). به عنوان مثال اگر بخواهید لغت &#34;Ape&#34; را با لغت &#34;App&#34; مقایسه کنید تا ببینید کدامیک نخست قرار می گیرد، می توانید از یک رشته متود داخلی به نام compareTo استفاده کنید. اجازه بدهید چگونگی کار آن را بررسی کنیم.برای این کار نیازی به شروع یک پروژه ی جدید ندارید: به راحتی روی کدی که دارید کامنت بگذارید یا آن را حذف کنید. اکنون کد زیر را به آن اضافه کنید:ما دو رشته متغیر تنظیم کرده ایم که حاوی لغا ت &#34;Ape&#34; و &#34;App&#34; می باشند. متود compareTo در کد بالا خط زیر می باشد:result = Word1.compareTo( Word2 );متود compareTo یک مقدار را گزارش می دهد. مقدار گزارش شده یا کمتر از 0 یا بیشتر از 0 و یا مساوی 0 می باشد. اگر Word1 قبل از Word2 قرار بگیرد، مقدار گزارش شده کمتر از 0 خواهد بود. اگر Word1 بعد از Word2 قرار بگیرد، مقدار گزارش شده بزگتر از 0 خواهد بود. اگر هر دو لغت یکشان باشند، مقدار 0 گزارش خواهد شد.بنابراین لازم است کقداری را اختصاص دهید که compareTo به یک متغیر بازمی گرداند. ما مقدار را در یک متغیر صحیح به نام نتیجه قرار می دهیم. عبارات IF در کد به سادگی تست می کنند تا مورد را در متغیر نتیجه مشاهده کنند.آموزش جاوابه هرحال وقتی یک رشته از متن را با رشته ای دیگر مقایسه می کنید، جاوا به جای حروف واقعی، مقادیر هگزادسیمال تاکید شده را مقایسه می کند. از آنجایی که حروف بزرگ دارای مقدار هگزادسیمال کمتری نسبت به حروف کوچک هستند، حرف بزرگ A در App قبل از حرف کوچ a در ape قرار خواهد گرفت. می توانید این مورد را امتحان کنید. در کد خود &#34;Ape&#34; را به &#34;ape&#34; تغییر دهید. خروجی &#34;Word1 is more than Word2&#34; خواهد بود، به این معنا که از لحاظ الفبایی جاوا لغت ape را بعد از app قرار خواهد داد.برای حل مشکل یک متود مرتبط به نام compareToIgnoreCase وجود دارد. همانطور که از نام آن پیداست حروف بزرگ و کوچک نادیده گرفته می شوند. با استفاده از این متود از لحاظ الفبایی لغت ape قبل از App قرار خواهد گرفت.آموزش استفاده از متد  indexOfمتد indexOf برای قرار دادن یک کاراکتر یا یک رشته در داخل یک رشته ی دیگر استفاده می شود. به عنوان مثال می توانید از آن برای بررسی وجود کاراکتر @ در یک آدرس ایمیل استفاده کنید. اجازه بدهید از این مثال در کد استفاده کنیم.مجددا می توانید روی کد خود کامنت بگذارید یا آن را حذف کنید. اما کد جدیدی برای امتحان کردن وجود دارد:میخواهیم وجود نماد @ را در آدرس ایمیل بررسی کنیم، بنابراین ابتدا یک متغیر char تنظیم کرده و به آن مقدار &#39;@&#39; اختصاص می دهیم. ( به نماد علامت نقل قول متغیر char دقت داشته باشید.). پس از تنظیم یک آدرس ایمیل، یک متغیر نتیجه داریم، این یک متغیر int می باشد. دلیل این که نتیجه یک عدد صحیح می باشد این است که متود indexOf یک مقدار گزارش خواهد داد. این مقدار عدد مربوط به موقعیت کاراکتر علامت را در رشته ی آدرس ایمیل باز خواهد گرداند. در اینجا خط مربوطه را مشاهده می کنید:result = email_address.indexOf( ampersand );رشته ای که در حال جستجوی آن هستید در ابتدا قرار می گیرد. پس از یک نقطه، indexOf را تایپ کنید. بین پرانتزهای indexOf گزینه های زیادی دارید: یکی از این گزینه ها تایپ کردن یک کاراکتر مجزا ( یا نام متغیر char) می باشد. ما متغیر علامت خود را (ampersand) بین پرانتزهای indexOf قرار داده ایم. جاوا موقعیت کاراکتر @ را در آدرس ایمیل به ما خواهد گفت. این مقدار را در متغیر نتیجه ذخیره خواهد کرد.وقتی کد را اجرا می کنید خروجی 4 خواهد بود. ممکن است تصور کنید که علامت @ پنجمین کاراکتر در آدرس ایمیل می باشد، اما indexOf شمارش را از 0 شروع می کند.به هرحال اگر کاراکتر در لغتی که آن را جستجو می کنید وجود نداشته باشد، indexOf مقدار 1- را گزارش می دهد. برای امتحان این مورد نماد @ را از آدرس ایمیل خود حذف کنید. سپس مجددا کد خود را اجرا کنید که 1- را به عنوان خروجی مشاهده خواهید کرد.می توانید از مقدار گزارش شده ی 1- به نفع خود استفاده کنید. در اینجا مجددا کدی را مشاهده می کنید با یک عبارت IF که مقدار متغیر نتیجه را امتحان می کند:بنابراین اگر نتیجه ی indexOf عدد 1- باشد، می توانیم به یوزر اجازه ی ادامه ی کار بدهیم.می توانید از indexOf برای تست کردن بیشتر از یک کاراکتر استفاده کنید. کد زیر آدرس ایمیل را چک می کند اگر با &#34;.com&#34; تمام می شود:آموزش جاواکد تقریبا یکسان می باشد، به جز اینکه اکنون در حال استفاده از متغیر String برای حفظ متنی هستیم که می خواهیم برای وجود (.com) و نه متغیر char آن را بررسی کنیم.اگر متنی که در جستجوی آن هستیم در string که قبل از نقطه ی مربوط به indexOf یافت نشد، مجددا نتیجه ی 1- گزارش داده خواهد شد. در غیر این صورت indexOf موقعیت اولین کاراکتر هماهنگ سازی را گزارش خواهد داد. در کد فوق وقتی شمارش را از 0 شروع می کنید، نقطه هفتمین کاراکتر در آدرس ایمیل می باشد.می توانید یک موقعیت شروع نیز برای جستجوهای خود تعیین کنید. در مثال آدرس ایمیل می توانیم جستجو برای &#34;.com&#34; را پس از نماد @ آغاز کنیم. در اینجا کدی را می بینید که موقعیت نماد @ را تعیین می کند و سپس از آن به عنوان موقعیت آغازین برای جستجوی &#34;.com&#34; استفاده می کند.خط زیر در واقع خط جدید کد می باشد:result = email_address.indexOf( dotCom, atPos );تنها تفاوت افزودن یک متغیر اضاقه بین پرانتزهای indexOf می باشد. ما هنوز رشته ای داریم که در جستجوی آن هستیم ( که متنی است که در متغیر dotcom قرار می گیرد)، اما اکنون یک موقعیت ابتدایی برای جستجو داریم. این موقعیت مقدار متغیری به نام atPos می باشد. مقدار atPos با استفاده از indexOf برای تعیین موقعیت نماد @ در آدرس ایمیل به دست می آید. بنابراین جاوا به جای شروع از 0، جستجو را از این موقعیت آغاز خواهد کرد که پیش فرض می باشد.Ends With … Starts Withبرای برنامه ی فوق می توانید از متود داخلی endsWith استفاده کنید:آموزش جاواBoolean ending = email_address.endsWith( dotcom );لازم است یک متغیر Boolean برای endsWith تنظیم کنید، زیرا متود پاسخ true یا false را گزارش خواهد داد. رشته ای که سعی در تست کردن آن دارید، بین پرانتزهای endsWith قرار می گیرد و متنی که در جستجوی آن هستید قبل از آن می آید. اگر متن در جستجوی رشته باشد، یک مقدار true گزارش داده می شود، در غیر اینصورت false خواهد بود. برای بررسی مقدار می توانید یک عبارت if … else اضافه کنید:System.out.println( &#34;Invalid Email Address&#34; );}else {System.out.println( &#34;Email Address OK &#34; );}if (ending == false ) {متود startsWith به روشی مشابه استفاده می شود.Boolean startVal = email_address.startsWith( dotcom );مجددا مقدار گزارش شده یک مقدار true یا false از Boolean می باشد.در بخش بعدی چگونگی استفاده از متودی به نام substring را فرا خواهید گرفت.</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Tue, 02 Jun 2020 11:40:09 +0430</pubDate></item><item><title>آموزش جاوا-آموزش آرایه های چند بعدی در java</title><link>https://virgool.ir/@p.kalantar.n/آموزش-جاوا-آرایه-ymyobngo0zoh</link><description>سلام با آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با آرایه ها در جاوا آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآرایه Array هایی که تاکنون استفاده کرده اید تناه یک ستون داده دارند. اما می توانید یک array برای نگهداری بیشتر از یک ستون تنظیم کنید. این array ها چند بعدی نامیده می شوند. به عنوان مثال یک صفحه ی گسترده را با ردیف ها و ستون ها در نظر بگیرید. اگر 6 ردیف و 5 ستون داشته باشید، صفحه ی گسترده ی شما می تواند 30 عدد را در خود داشته باشد، که ممکن است مانند تصویر زیر به نظر برسد:یک array چند بعدی موردی است که می تواند همه ی مقادیر بالا را در خود داشته باشد، که آنها را مانند زیر تنظیم کرده اید:int[ ][ ] aryNumbers = new int[6][5];این array به روش تنظیم یک array عادی تنظیم می شود، به جز اینکه در این مورد دو مجموعه کروشه دارید. اولین مجموعه از کروشه ها برای ردیف ها می باشد و دومین مجموعه نیز برای ستون ها می باشد. در خط بالا به جاوا اعلام کرده ایم که یک array با 6 ردیف و 5 ستون تنظیم کند. برای حفظ مقادیر در یک array چند بعدی، باید مراقب دنبال کردن ردیف ها و ستون ها باشید. در اینجا کدهایی را برای پر کردن اولین ردیف های اعداد از تصویر صفحه ی گسترده ی ما مشاهده می کنید:aryNumbers[0][0] = 10;aryNumbers[0][1] = 12;aryNumbers[0][2] = 43;aryNumbers[0][3] = 11;aryNumbers[0][4] = 22;بنابراین اولین ردیف، ردیف 0 می باشد. سپس ستون ها از 0 تا 4 می باشند که 5 آیتم هستند. برای پر کردن دومین ردیف کد زیر لازم می باشد:آموزش جاواaryNumbers[1][0] = 20;aryNumbers[1][1] = 45;aryNumbers[1][2] = 56;aryNumbers[1][3] = 1;aryNumbers[1][4] = 33;اعداد ستون همان است، اما اعداد مربوط به ردیف همه 1 نی باشند.تکنیک مورد نیاز برای دسترسی به همه ی آیتم ها در یک array چند بعدی، استفاده از یک loop داخل یکی دیگر می باشد. در اینجا کدی را مشاهده می کنید برای دسترسی به همه ی اعداد در بالا. این برنامه از یک double برای loop استفاده می کند:اولین for loop برای ردیف ها استفاده می شود و دومین for loop برای ستون ها. در اولین چرخش از اولین loop، مقدار متغیر i عدد 0 خوهد شد. کد داخل for loop یک loop دیگر می باشد. تمام این loop دوم هنگامی که مقدار متغیر i عدد 0 باشد، اجرا خواهد شد. for loop دوم از یک متغیر به نام j استفاده خواهد کرد. متغیرهای i و j برای دسترسی به array قابل استفاده می باشند.آموزش جاواaryNumbers[ i ][ j ]بنابراین سیستم دو loop برای وارد کردن همه ی مقادیر به یک array چند بعدی استفاده می شود، ردیف به ردیف.تمرین: برنامه ی فوق در جایی به پایان می رسد که در آن در حال نوشتن برنامه ای برای چاپ تمام مقادیر از صفحه ی گسترده هستیم. وقتی که این کار انجام می شود، پنجره ی Output چیزی شبیه به تصویر زیر خواهد بود:آرایه Array های چندبعدی می توانند گول زننده نیز باشند، اساسا به این دلیل که حفظ مسیر ستون ها و ردیف های شما سخت می باشد! در بخش بعدی در مورد لیست های array فرا خواهید گرفت.آموزش استفاده از Array Lists در جاواآموزش جاوااگر از تعداد آیتم هایی که قرار است در array قرار بگیرند، اطلاعی ندارید، ممکن ست بهتر باشد از چیزی به نام ArrayList استفاده کنید. یک ArrayList در واقع یک ساختار دینامیک داده می باشد، به این معنا که آیتم ها قابل حذف و اضافه از لیست می باشند. یک array معمولی در جاوا یک ساختار استاتیک داده می باشد، زیرا شما اندازه ی اولیه ی array خود را دارید.برای تنظیم یک ArrayList، ابتدا باید پوشه ای از java.util library وارد کنید:import java.util.ArrayList;سپس می توانید یک آبجکت ArrayList جدید ایجاد کنید:ArrayList listTest = new ArrayList( );توجه کنید که این بار نیازی به کروشه ندارید.زمانی که آبجکت ArrayList جدید داشته باشید، می توانید با متود add، عناصری به آن اضافه کنید:listTest.add( &#34;first item&#34; );listTest.add( &#34;second item&#34; );listTest.add( &#34;third item&#34; );listTest.add( 7 );بین پرانتزهای add آنچه را که می خواهید به ArrayList اضافه کنید، قرار دهید. به هرحال فقط می توانید آبجکت ها را اضافه کنید. سه آیتم اولی که به لیست بالا اضافه کرده ایم، آبجکت های String می باشند. چهارمین آیتم یک عدد می باشد. اما این عدد یک آبجکت از نوع صحیح خواهد بود.آیتم ها در لیست می توانند توسط یک عدد Index و با استفاده از یک متود get مورد اشاره قرار بگیرند:listTest.get( 3 )این خط آیتم را روی لیست در Index position 3 خواهد گرفت. اعداد ایندکس شمارش را از 0 شروع می کنند، بنابراین این آیتم چهارمین آیتم خواهد بود.شما می توانید آیتم ها را از یک ArrayList حذف هم بکنید:آموزش جاواlistTest.remove(2);یا می توانید از مقدار روی لیست استفاده کنید:listTest.remove( &#34;second item&#34; );حذف یک آیتم باعث تغییر اندازه ی ArrayList خواهد شد، بنابراین وفتی از عدد شاخص استفاده می کنید، وقتی سعی در به دست آوردن یک آیتم روی لیست دارید، باید مراقب باشید. اگر آیتم شماره ی 2 را حذف کرده ایم، بنابراین لیست فوق فقط حاوی 3 آیتم خواهد بود. سعی در به دست آوردن با عدد شاخص 3، منجر به بروز خطا خواهد شد.برای وارد شدن به هر آیتم در ArrayList، می توانید چیزی به نام یک Iterator را تنظیم کنید. ایک گروه در کتابخانه ی java.util نیز یافت می شود:import java.util.Iterator;می توانید ArrayList را به یک آبجکت Iterator جدید ضمیمه کنید:Iterator it = listTest.iterator( );این خط یک آبجکت Iterator جدید تنظیم می کند که می تواند برای وارد شدن به آیتم ها در ArrayList به نام listTest استفاده شود. دلیل استفاده از یک آبجکت Iterator این است که این آبجکت دارای متودهایی به نام next و hasNext می باشد. می توانید از اینها در یک loop استفاده کنید:while ( it.hasNext( ) ) {System.out.println( it.next( ) );}متود hasNext یک مقدار Boolean را گزارش می دهد. اگر آیتمی در ArrayList وجود نداشته باشد، مقدار false خواهد بود. متود بعدی می تواند برای وارد شدن همه ی آیتم ها در لیست استفاده شود.برای تست کردن همه ی این تئوری کد زیر را امتحان کنید:آموزش جاوابه خطی که همه ی لیست را چاپ می کند، دقت داشته باشید:System.out.println( &#34;Whole list=&#34; + listTest );این خط به شما یک روش سریع برای مشاهده ی آیتم های روی لیستتان ارائه می دهد. وقتی کد اجرا می شود، پنجره ی Output موارد زیر را نمایش خواهد داد:first item second item third item 7 Whole list=[first item, third item, 7] Position 1=third itemبه طور خلاصه، وفتی از تعداد عناصری که قرار است در لیستی از آیتم ها قرار بگیرند، مطمئن نیستید، از ArrayList استفاده کنید. اکنون بررسی array ها را رها می کنیم. در بخش بعدی به بررسی رشته ها خواهیم پرداخت.این آموزش ادامه دارد</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Mon, 01 Jun 2020 16:32:27 +0430</pubDate></item><item><title>آموزش جاوا-آموزش آرایه ها و رشته ها در java</title><link>https://virgool.ir/coderlife/دوره-آموزش-جاوا-java-kugvnakvgrrc</link><description>سلام با آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با While و آرایه ها در جاوا آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآموزش استفاده از آرایه هاآرایه Array ها با loop ها در جای خود می آیند. در the previous section that مشاهده کردید که برای اختصاص دادن مقادیر به موقعیت های array از کد زیر استفاده می کردید:آموزش جاواaryNums[0] = 10;اما اگر اعداد زیادی برای اختصاص دادن به یک array دارید، این کار اصلا عملی نمی باشد. به عنوان مثال یک برنامه ی قرعه کشی را در نظر بگیرید که باید اعداد 1 تا 49 را به موقعیت های یک array اختصاص دهد. به جای تایپ یک لیست طولانی از موقعیت ها و مقادیر array ، می توانید از یک loop استفاده کنید. در اینجا کدی را مشاهده می کنید که این کار را انجام می دهد:بنابراین یک array تنظیم می کنیم تا 49 مقدار صحیح را در خود حفظ کند. سپس کد loop قرار می گیرد. به شرط نهایی loop دقت داشته باشید.i &lt; lottery_numbers.lengthدر Length یک پراپرتی از آبجکت های array می باشد که می توانید برای به دست آوردن اندازه ی array از آن استفاده کنید ( تعداد موقعیت هایی که دارد.). بنابراین، زمانی که مقدار در متغیر i کمتر از اندازه ی array می باشد، این loop به چرخش متداول خود ادامه خواهد داد.آموزش جاوابرای اختصاص دادن مقادیر به موقعیت ها در array، می توان از خط زیر استفاده کرد:lottery_numbers[i] = i + 1;به جای مقدار hard-code بین کروشه های مربوط به نام array، متغیری به نام i داریم. به یاد داشته باشید که این متغیر هر بار با چرخش loop یک واحد افزایش می یابد. بنابراین هر موقعیت فقط با استفاده از مقدار loop قابل دسترسی می باشد. مقداری که به هر موقعیت اختصاص داده شده i + 1 می باشد. بنابراین مجددا مقدار افزایش یافته ی loop را داریم، این بار با یک واحد افزوده به آن. از آنجایی که مقدار loop از 0 شروع می شود، این برنامه اعداد 1 تا 49 را به شما ارائه خواهد داد.خط دیگر در loop تنها مقداری را که در هر موقعیت قرار دارد، چاپ می کند. ( اگر تمایل داشتید می توانید کدی بنویسید که اعداد را در یک array قرار دهید. زمانی که مقادیر را در یک ردیف قرار دادید می توانید از 6 عدد اول به عنوان شماره های قرعه کشی استفاده کنید. از کد دیگری استفاده کنید برای مقایسه ی 6 شماره ی یک یوزر با شماره های برنده، اکنون یک برنامه ی قرعه کشی در اختیار دارید.)آموزش مرتب سازی آرایه ها در جاوامتدهای داخلی دیگر جاوا به شما اجازه می دهند تا array های خود را مرتب سازید. برای استفاده از متود مرتب سازی array ها، ابتدا نیاز به مراجعه به یک کتابخانه ی جاوا به نام Arrays دارید. شما این کار را با عبارت import انجام می دهید. می توانید آن را با your aryNums programme امتحان کنید. عبارت import زیر را اضافه کنید:import java.util.Arrays;کد شما باید مشابه کد ارائه شده ی ما در زیر باشد:اکنون که کتابخانه ی Arrays را وارد کرده اید، می توانید از متود مرتب سازی استفاده کنید. این کار بسیار ساده می باشد.Arrays.sort( aryNums );ابتدا لغت Array را تایپ کرده و سپس یک نقطه تایپ کنید. به محض اینکه نقطه را تایپ کردید، NetBeans لیستی از مواردی را نمایش خواهد داد که می توانید با array ها انجام دهید. لغت &#34;sort&#34; را تایپ کنید. سپس نام ردیف مورد نظر را که می خواهید مرتب کنید، بین یک جفت پرانتز قرار دهید. ( توجه کنید که نیازی به کروشه بعد از نام array ندارید.)آموزش جاواو این برای مرتب سازی array کافی نمی باشد؛ در اینجا کدی را مشاهده می کنید که می توانید امتحان کنید:چرخش for loop در انتها ادامه پیدا می کند تا اینکه مقادیر را در هر موقعیت چاپ کند. وقتی کد اجرا می شود، خروجی مانند شکل زیر خواهد بود:همانطور که مشاهده می کنید، array با یک ترتیب صعودی مرتب شده است.به هرحال مرتب سازی با ترتیب نزولی فقط با نوشتن کد مرتب سازی خودتان یا تغییر array به آبجکت های صحیح ( Integer objects) و سپس وارد کردن از کتابخانه ی Collections امکان پذیر می باشد. اگر نیاز به یک مرتب سازی نزولی داشته باشید، در اینجا کدی را مشاهده می کنید که فقط این کار را انجام می دهد ( اگر تمایل دارید می توانید از این کد رد شوید.):آموزش رشته ها در آرایه هاآموزش جاواشما می توانید رشته هایی از متن را در داخل array ها قرار دهید. این کار درست به روش اعداد صحیح انجام می شود:String[ ] aryString = new String[5] ;aryString[0] = &#34;This&#34;aryString[1] = &#34;is&#34;aryString[2] = &#34;a&#34;aryString[3] = &#34;string&#34;aryString[4] = &#34;array&#34;کد بالا یک رشته array را با 5 موقعیت تنظیم می کند. سپس متن به هر موقعیت در array اختصاص داده می شود.در اینجا یک loop را مشاهده می کنید که در همه ی موقعیت های array قرار گرفته و هر چیزی را که در موقعیت ها وجود دارد، چاپ می کند:int i;for ( i=0; i &lt; aryString.length; i++ ) {System.out.println( aryString[i] );}هنگامی که مقدار متغیری به نام I کمتر از طول array به نام aryString باشد، loop به چرخش خود ادامه می دهد.وقتی که برنامه ی بالا اجرا می شود، پنجره ی Output به شکل زیر خواهد بود:شما می توانید یک مرتب سازی روی رشته ی array ها اجرا کنید، درست مانند کاری که می توانید با اعداد صحیح انجام دهید. اما مرتب سازی یک ترتیب صعودی براساس حروف الفبا می باشد، به این معنا که aa قبل از ab قرار می گیرد. به هرحال جاوا برای مقایسه ی یک حرف در رشته ی شما با یک رشته ی دیگر از کاراکترهای یونیکد (Unicode) استفاده می کند. این به این معناست که حروف بزرگ قبل از حروف کوچک قرار می گیرند. کد زیر را امتحان کنید:وقتی که برنامه اجرا می شود، پنجره ی Output تصویر زیر را نمایش خواهد داد:گرچه ما array را مرتب کرده ایم، اما لغت This در ابتدا قرار می گیرد. اگر یک مرتب سازی الفبایی باشد، انتظار دارید که لغت a در ابتدا قرار بگیرد. این اتفاق می افتد اگر تمام حروف کوچک باشند. در کد برنامه نویسی خود T بزرگ از لغت This را به t کوچک تغییر دهید. اکنون برنامه را مجددا اجرا کنید. پنجره ی Output به شکل زیر نمایش داده می شود:همانطور که مشاهده می کنید، لغت this اکنون در پایین قرار دارد. در بخش بعد نگاه دقیق تری به رشته ها خواهیم داشت. بنابراین اکنون زیاد نگران این مورد نباشید. در عوض تمرین های زیر را بررسی کنید.تمرین: یک array را تنظیم کنید تا مقادیر زیر را در خود داشته باشد: 23, 6, 47, 35, 2, 14. برنامه ای بنویسید تا میانگین این 6 عدد را به دست آورید. ( می توانید ار اعداد صحیح برای این تمرین استفاده کنید که پاسخ شما را گرد خواهد کرد. ) تمرین: با استفاده از مقادیر بالا، می توانید کاری کنید که برنامه ی شما بالاترین عدد را در array چاپ کند. تمرین: با استفاده از همان array در بالا می توانید کاری کنید که برنامه ی شما فقط اعداد فرد را چاپ کند. در بخش بعدی در مورد array های چند بعدی در جاوا فرا خواهید گرفت.</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Thu, 14 May 2020 11:28:39 +0430</pubDate></item><item><title>آموزش سی شارپ-آموزش اشکال زدایی در C# قسمت 2</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-آموزش-اشکال-زدایی-در-c-قسمت-2-dd883biqwklz</link><description>سلام با آموزش برنامه نویسی سی شارپ در خدمت شما عزیزان هستیملينك قسمت اول آموزش سی شارپ : آموزش #Cلينك قسمت اول آموزش اشکال زدایی: قسمت اول آموزش کار با پنجره Tool Window در ویژوال استودیودر هنگام انجام عمل اشکال زدایی کدها یا Debugging در ویژوال استودیو، پنجره tool window در قسمت پایین برنامه عوض شده و پنجره های جدیدی ظاهر می شوند (علی رغم این که شما آن ها را خاموش یا غیر فعال کرده باشید). پنجره های جدید باز شده با نام “Locals”، “Watch”، “Call Strack” و “Immediate window” بوده، که مرتبط با عملیات Debugging هستند. در این بخش به بررسی هریک از ابزارها خواهیم پرداخت. https://www.aparat.com/v/s6AOp پنجره Locals :این پنجره، ساده ترین ابزار این بخش می باشد. هنگامی که برنامه به یک Breakpoint می رسد، تمامی متغیرهای محلی کد یا variables local در این پنجره لیست شده و به شما امکان می دهد تا با یک نگاه سریع اطلاعاتی مثل نام، نوع و مقدار آنها را مشاهده نمایید. شما حتی می توانید بر روی نام متغیر مورد نظر خود در جدول کلیک نموده و با انتخاب آیتم “Edit Value”، به متغیر انتخاب شده یک مقدار جدید بدهید. این کار امکان امتحان کردن کدهای برنامه را در شرایط مختلف دیگر می دهد.پنجره Watch :آموزش سی شارپپنجره Watch Window تا حدودی شبیه پنجره Locals است. با این تفاوت که در این پنجره می توانید تصمیم بگیرید کدام یک از متغیرها به عنوان محلی local یا سراسری global تعیین شوند. شما می توانید متغیر مورد نظر خود را به محل درگ کردن از کد صفحه، یا پنجره Locals و یا نوشتن نام آن در آخرین خط خالی، تحت نظر گرفته و به پنجره Watch اضافه کنید. متغیرهای لیست Watch تا زمانی که آن ها را حذف نکنید، در پنجره باقی خواهند ماند، اما مقدارشان فقط در زمانی که وارد محدوده کد مرتبط با آن ها بشوید، به روز می شود. برای مثال، یک متغیر متعلق به تابع A در زمانی که درون کد تابع B باشید، Update نمی شود. همانند پنجره Locals می توانید بر روی متغیر مورد نظر خود کلیک راست کرده و با انتخاب گزینه “Edit Value”، مقدار آن را تغییر دهید. https://www.aparat.com/v/yo4ST پنجره Call Stack :پنجره Call Stack ، سلسله مراتب یا hierarchy اجرای توابع برنامه را نشان می دهد. برای مثال اگر تابع A تابع B را فراخوانی کرده و تابع B تابع C را فراخوانی می کند، این ارتباطات را می توانید در پنجره Call stack مشاهده کرده و بر روی کد هر یک از تابع ها در صورت تمایل پرش کنید. شما همچنین می توانید ببینید چه پارامترهایی به هر تابع پاس داده می شوند.کد مثال های این درس، بسیار ساده بودند و به راحتی می توانید مسیر پیمایش تابع را مشاهده کنید. اما در پروژه های بزرگ، فهمیدن ترتیب اجرای توابع و پارامترهای هریک از آن ها، امر ضروری بوده که با Call stack می توان انجام داد.پنجره Immediate Window :آموزش سی شارپپنجره Immediate Window می تواند کاربردی ترین پنجره عملیات Debug باشد. این پنجره به شما امکان می دهد، بخش های مورد نظر خود را از کد برنامه انتخاب کرده و اجرا نمایید. همچنین می توانید مقادیر متغیرهای آن ها را چک کرده و یا تغییر دهید.فقط کافی است کد مورد نظر خود را در پنجره نوشته و با زدن دکمه Enter آن را اجرا نمایید. نام هر متغیر را تایپ نموده و مقدار آن را در خروجی چاپ کنید. مقدار متغیر مورد نظر خود را با نوشتن a=5 تغییر داده و همان لحظه نتیجه تغییر را در کد مشاهده کنید. پنجره Immediate Window همانند یک ترمینال در C# است، به محض نوشتن کد یا تغییر در برنامه، خروجی را مشاهده خواهید کرد.آموزش پیشرفته تر کار با Breakpoint در Debug کدهای C#در درس های قبل، یک Breakpoint ساده را ایجاد کردیم. اما امکانات بسیار بیشتری در هنگام کار با Breakpoint ها، به خصوص در محیط ویژوال استودیو وجود دارد. البته به نظر می رسد، مایکروسافت برخی از این قابلیت ها را در نسخه های Express ویژوال استودیو، غیر فعال کرده است، اما این امکانات در نسخه فوق همچنان در دسترس است.قابلیت Condition :این Condition به شما امکان می دهد تا یک شرط را تعیین کرده و زمانی که آن شرط درست یا true شد یا مقدارش تغییر کرد، breakpoint رخ دهد. این قابلیت، در زمانی که با کدهای سطح بالاتر در تعامل هستید، بسیار کاربردی است. برای مثال هنگامی که می خواهید عملیات اجرای برنامه تحت شرایط خاصی متوقف شود. برای مثال، فرض کنید که یک حلقه loop دارید که تا قبل از رسیدن به کد مورد نظر، چندین بار تکرار می شود. در چنین شرایطی می توانید با تعیین یک شرط یا Condition مورد نظر و اضافه کردن آن به breakpoint، شرایط را کنترل کنید. مثال زیر را برای نشان دادن قابلیت Condition ایجاد کرده ایم :static void Main(string[] args){    for(int i = 0; i &lt; 10; i++)        Console.WriteLine(&#34;i is &#34; + i);}برک Breakpoint را برروی خط کدی که خروجی را بر روی Console نمایش می دهد، قرار دهید. سپس برنامه را اجرا کنید. Breakpoint هر بار که حلقه تکرار می شود، رخ می دهد. اما این چیزی نیست که ما دنبال آن هستیم. ممکن است بخواهیم breakpoint فقط در زمانی که i برابر با 4 است (دفعه 5 ام تکرار حلقه) فعال شود. بنابراین شرط i==4 را به Breakpoint اضافه می کنیم.اکنون Breakpoint با یک دایره سفید درون آن نشان داده شده و می گوید که برای اجرا دارای یک شرط است و زمانی اجرا می شود که مقدار متغیر i برابر 4 شود.شما همچنین می توانید گزینه “has changed” را اضافه کرده تا به debugger بگویید فقط در زمانی که نتیجه عبارت فوق تغییر کرد، breakpoint را فعال کند، مثلا وقتی که مقدار آن از true به false عوض شد.قابلیت Hit Count :با استفاده از قابلیت Hit Count می توانید شرط دیگری را برای اجرای Breakpoint تعیین کرده که بر حسب تعداد دفعاتی خواهد بود که Breakpoint در کد روی می دهد.برای مثال، می توانید تصمیم بگیرید که Breakpoint، تعداد دفعات مشخصی در کد تکرار نشده باعث توقف اجرای برنامه شود. تنظیمات مختلفی برای این شرط وجود دارد که می توانید در هنگام کار عملی، آن ها را در سطح برنامه تغییر دهید.قابلیت When hit :آموزش سی شارپبه وسیله این پنجره می توان رفتار متفاوتی را برای برنامه در هنگام رسیدن Breakpoint تعیین کنید. این امکان، بیشتر در مواردی کاربرد دارد که نمی خواهید برنامه با رسیدن به Breakpoint متوقف شده، به جای آن یک پیام خاصی منتشر شده یا یک macro اجرا شود. این قابلیت به شما امکان می دهد تا یک پیام دلخواه را تعیین کرده و اطلاعات خاصی را در برنامه روند اجرا برنامه چاپ کنید. در کدهای پیشرفته تر، می توانید یک macro را تعیین نموده تا به محض رسیدن برنامه به نقطه Breakpoint، اجرا شود.&amp;lt;br/&amp;gt; </description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Thu, 14 May 2020 11:17:31 +0430</pubDate></item><item><title>آموزش جاوا-آموزش While و آرایه ها در java</title><link>https://virgool.ir/@p.kalantar.n/آموزش-جاوا-java-oanhcigpdenm</link><description>سلام با آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با حلقه for در جاوا آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآموزش حلقه Whileنوع دیگری از loop که می توانید در آموزش Java استفاده کنید While loop می باشد. درک While loop ها بسیار راحت تر از for loop می باشد. در اینجا مشاهده می کنید که چگونه به نظر می رسند:while ( condition ) {}بنابراین با لغت while با حروف کوچک، آغاز می کنید. شرایطی را که می خواهید امتحان کنید بین پرانتز قرار می گیرد. یک جفت آکولاد نیز پس از آن قرار می گیرد و کدی را که می خواهید اجرا کنید بین آکولادها قرار می گیرد. به عنوان مثال در اینجا یک while loop را مشاهده می کنید که متنی را چاپ می کند:int loopVal = 0;while ( loopVal &lt; 5) {System.out.println(&#34;Printing Some Text&#34;);loopVal++;}شرایط مورد امتحان بین پرانتزها قرار گرفته است. ما می خواهیم در حالیکه متغیری به نام loopVal کمتر از 5 می باشد، looping را ادامه دهیم. کد ما ابتدا در داخل آکولادها یک خط از متن را چاپ می کند. سپس نیاز به افزایش متغیر loopVal داریم. اگر این کار را انجام ندهیم یک loop نامحدود خواهیم داشت، همانطور که راهی برای loopVal وجود ندارد تا بیشتر از مقدار اصلی خود از 0 شود.گرچه ما از یک شمارنده استفاده کرده ایم تا به شرایط نهایی برسیم، در حالیکه loop ها به بهترین شکل استفاده می شوند وقتی که شما واقعا نیازی به محاسبه ی مقدار ندارید، اما در عوض فقط در حال بررسی مقدار می باشد. برای مثال هنگامی که هیچ کدام از کلیدهای صفحه کلید استفاده نمی شوند، می توانید looping را ادامه دهید. این مورد در بازیها متداول می باشد. برای خروج از while loop و همچنین خود بازی، می توان از حرف &#34;X&#34; استفاده کرد. مثال دیگر looping دور یک فایل متنی می باشد، در حالیکه هنوز انتهای فایل نرسیده است.آموزش جاواحلقه Do ... Whileحلقه do … while loop در ارتباط با while loop می باشد. این مورد مانند زیر می باشد:int loopVal = 0;do {System.out.println(&#34;Printing Some Text&#34;);loopVal++;}while ( loopVal &lt; 5 );مجددا جاوا آنقدر loop را می چرخاند تا به شرایط نهایی برسد. این بار بخش &#34;while&#34; در قسمت پایین قرار دارد. اما شرایط همان است – looping انجام شود، در حالیکه مقدار داخل متغیر loopVal کمتر از می باشد. تفاوت بین این دو کد بین آکولادهای do … while است که نهایتا یک بار اجرا خواهد شد. با while loop شرایط حاصل خواهد شد. سپس Java از loop شما آزاد خواهد شد و حتی کد داخل آکولاد را اجرا نخواهد کرد. برای امتحان این مورد، ابتدا while loop را امتحان کنید. مقدار متغیر loopVal را به تغییر داده و سپس کد را اجرا کنید. باید متوجه شوید که متن چاپ نشده است. اکنون انجام loop را با مقدار5 برای loopVal امتحان کنید. متن یک بار چاپ خواهد شد و سپس جاوا از loop آزاد خواهد شد.بسیار خوب، در اینجا looping را رها می کنیم. این موضوعی می باشد که نیاز است بیشتر به آن بپردازید. اما اگر هنوز در این موضوع کامل نیستید، نگران نباشید – در ادامه بیشتر فرا خواهید گرفت. در بخش بعدی نگاهی به موردی به نام array خواهیم داشت.آموزش آرایه ها در جاوااگر می خواهید که به طور موثر کد گذاری کنید، مفهومی که در برنامه نویسی باید به آن عادت کنید array می باشد. در این بخش در مورد array ها و چگونگی استفاده از آنها فراخواهید گرفت.یک Array چیست؟تاکنون با متغیرهایی کار کردید که فقط یک مقدار را در خود حفظ می کنند. متغیرهای صحیح که تنظیم کرده اید، فقط یک عدد را حفظ می کنند و متغیرهای رشته نیز فقط یک رشته از متن را در خود دارند. یک array (ردیف) روشی برای حفظ بیشتر از یک مقدار در یک زمان می باشد که در واقع شبیه لیستی از آیتم ها می باشد. یک array را می توان به عنوان ستون هایی در یک صفحه ی گسترده در نظر گرفت. شما می توانید یک صفحه ی گسترئه تنها با یک ستون و یا تعداد زیادی ستون داشته باشید. داده ای که در یک ردیف مجزا حفظ می شود می تواند مشابه تصویر زیر باشد:مانند یک صفحه ی گسترده، array ها برای هر ردیف دارای یک موقعیت عددی می باشند. این موقعیت ها در یک array از شروع شده و متداولا افزایش می یابند. هر موقعیت نیز در یک array می تواند یک مقدار در خود حفظ کند. در تصویر بالا موقعیت 0 دارای مقدار 10 و موقعیت 1 دارای 14، موقیت 2 دارای مقدار 36 و غیره می باشد.آموزش جاوابرای برقراری یک array از اعداد، مشابه تصویر بالا، باید به Javaاعلام کنید که چه نوع داده ای قرار است وارد array شود ( اعداد صحیح، رشته ها، مقادیر Boolean و غیره). سپس لازم است که اعلام کنید که array دارای چند موقعین می باشد:int[ ] aryNums;تنها تفاوت بین برقراری یک متغیر عدد صحیح طبیعی و یک array یک جفت کروشه ای است که بعد از نوع داده قرار می گیرد. کروشه ها برای اعلام به Javaدر مورد این که شما قصد برقراری یک array را دارید، کافی هستند. نام array مربوط به تصویر بالا aryNums می باشد. درست مانند متغیرهای طبیعی، می توانید آنها را هر چیزی که می خواهید نام گذاری کنید ( با همان استثنائاتی که قبلا ذکر کردیم.)اما این مورد فقط به Javaمی گوید که شما قصد تنظیم یک array عدد صحیح را دارید. این برنامه تعداد موقعیت هایی را که array باید حفظ کند، اعلام نمی کند. برای انجام این کار باید یک array object جدید تنظیم کنید:aryNums = new int[6];شما با نام array شروع کرده اید که با علامت تساوی دنبال می شود. پس از علامت تساوی به لغت کلیدی new و سپس مجددا نوع داده ی خود، نیاز دارید.پس از نوع داده یک جفت کروشه قرار می گیرد. بین کروشه ها نیاز به اندازه ی array دارید. اندازه در واقع تعداد موقعیت هایی است که array باید حفظ کند.اگر تمایل دارید، می توانید همه ی آنها را روی یک قرار دهید:int[ ] aryNums = new int[6];بنابراین ما به جاوا اعلام می کنیم که یک array را با 6 موقعیت در آن تنظیم کند. پس از اجرای این خط، جاوا مقادیر پیش فرض را برای array اختصاص خواهد داد. از آنجایی که ما یک array مقدار صحیح تنظیم کرده ایم، مقادیر پیش فرض برای همه ی 6 موقعیت 0 خواهد بود.برای اینکه در یک array مقادیر را به موقعیت های مختلف اختصاص دهید، این کار را به یک روش طبیعی انجام می دهید:aryNums[0] = 10;در اینجا مقدار 10 به موقعیت 0 در یک array به نام aryNums اختصاص داده می شود. مجددا کروشه ها برای اشاره به هر موقعیت استفاده می شوند. اگر بخواهید مقدار 14 را به یک array با موقعیت 1 اختصاص دهید، کد مربوط مانند زیر خواهید بود:aryNums[1] = 14;و کد مربوط به مقدار 36 برای موقعیت 2 مانند زیر خواهد بود:aryNums[2] = 36;فراموش نکنید که از آنجایی که array ها از 0 شروع می شوند، سومین موقعیت در یک array دارای عدد شاخص 2 می باشد.اگر بدانید که چه مقادیری قرار است در یک array قرار گیرند، می توانید آنها را مانند زیر تنظیم کنید:int[ ] aryNums = { 1, 2, 3, 4 };این متود در حال تنظیم یک array با استفاده از کروشه ها بعد از علامت تساوی، می باشد.در بین کروشه ها مقادیری را تایپ می کنید که array خواهد گرفت. اولین مقدار در موقعیت 0 و دومین مقدار در موقعیت 1 و غیره خواهد بود. توجه داشته باشید که هنوز پس از int نیاز به کروشه دارید، اما نیازی به لغت کلیدی new یا تکرار نوع داده و یا کروشه ها ندارید. اما این فقط مربوط می شود به نوع داده های مقادیر int، رشته و مقادیر char. به عبارت دیگر نیاز به لغت کلیدی new دارید. بنابراین می توانید این کار را انجام دهید:String[ ] aryStrings = {&#34;Autumn&#34;, &#34;Spring&#34;, &#34;Summer&#34;, &#34;Winter&#34; };اما این کار را نمی توانید انجام دهید:boolean[ ] aryBools = {false, true, false, true};برای تنظیم یک boolean array هنوز نیاز به لغت کلیدی new دارید:boolean[ ] aryBools = new boolean[ ] {false, true, false, true};برای به دست آوردن مقادیر مربوط به array، نام array را تایپ کنید که با موقعیت array در یک کروشه دنبال می شود. مانند زیر:System.out.println( aryNums[2] );کد بالا هر مقداری که در ردیفی با موقعت 2 در یک array به نام aryNums باشد را چاپ می کند. اما اجازه بدهید کمی کدگذاذی تمرین کنیم.یک پروژه ی جدید آغاز کرده و آن را به میل خود نامگذاری کنید. فراموش نکنید که نام گروه را به یک مورد واضح تغییر دهید.کد زیر را در متود جدید Main تایپ کنید:وقتی برنامه را اجرا می کنید باید تصویر زیر را در پنجره ی Output مشاهده کنید:موقعیت عددی array را در print line از 2 به 5 تغییر دهید و در عوض 18 باید چاپ شود. در بخش بعدی نگاهی به چگونگی استفاده از array ها با loop ها خواهیم انداخت.این آموزش ادامه دارد</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Mon, 11 May 2020 16:13:29 +0430</pubDate></item><item><title>آموزش سی شارپ-آموزش اشکال زدایی Debugging در C#</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-debugging-csharp-ei0san3z4cb0</link><description>سلام با آموزش برنامه نویسی سی شارپ در خدمت شما عزیزان هستیملينك قسمت اول : آموزش #Cآموزش اشکال زدایی Debugging در پروژه های C#در پروژه های بزرگ، معمولا حجم کدنویسی به اندازه ای زیاد می شود که گاهی اوقات برنامه نویسان خودشان هم کاملا بر روی کد پروژه تسلط نداشته و جز با اجرای آن نمی توانند موفقیت برنامه را در عمل متوجه بشوند.چیزی که شما به آن نیاز دارید، تقریبا همانند کلاه شعبده بازهاست تا به وسیله آن بتوانید درون برنامه خود را باز کرده و در هنگام اجرا، ببندید واقعا چه پروسه ای در جریان است؟! https://www.namasha.com/v/yMKK6b9l عمل اشکال زدایی کدها یا Debugging همان کلاه شعبده بازی مورد نظر است. ابزاری که پس از آشنا شدن و یادگیری کار با آن، تقریبا دیگر نمی توان بدون استفاده از Debugging کد بنویسید. Debugging ابزاری است که هر برنامه نویس بایستی آن را به خوبی شناخته و کار با آن را یاد بگیرید. زیرا عملا بدون استفاده از ابزار، اصلاح اشکالات یا bug های کدتان غیر ممکن است.ساده ترین حالت اشکال زدایی یا Debugging، که هنوز حتی توسط کد نویسان حرفه ای مورد استفاده قرار می گیرد، روش “print debugging” است. روشی که در آن برنامه نوشته یا عددی را در جاهای مختلف کد نشان می دهد تا متوجه شوید که در هر زمان چه بخشی از کد در حال اجراست و هر متغیر در هر مرحله دارای چه مقداری است.آموزش سی شارپدر زبان C#، می توانید از متد CONSOLE.write برای نمایش مقدار یک متغیر در خروجی و یا چاپ یک عبارت متنی استفاده کنید. این متن ها و مقادیر بر روی صفحه یا Console ظاهر می شوند. این کار در برخی موارد کافی به نظر می رسد. اما اگر شما یک نرم افزار IDE خوب مثل Visual Studio کار می کنید، ابزارهای بسیار کاربردی تر و ساده ای را برای انجام اشکال زدایی و کنترل کد در اختیار خواهید داشت.در درس های بعدی به آموزش تکنیک های اشکال زدایی و نحوه کار با کنترل کننده کدها در ابزارهای برنامه نویسی IDE مثل ویژوال استودیو خواهیم پرداخت. https://www.namasha.com/v/wRiRithL آموزش استفاده از Break Points در Debugging کدهای C#اولین چیزی که بایستی در عملیات اشکال زدایی کدهای C# یا Debugging بایستی بیاموزید، استفاده از BreakPoints ها است. BreakPoints دقیقا همان کاری را انجام می دهد که از نام آن می توان فهمید. BreakPoint نقطه ای در کد شما را تعیین می کند که در آنجا کامپایلر توقف نموده و اجرای برنامه موقتا استپ می شود. در این مکان می توانید به بررسی کدهای خود پرداخته و مقادیر متغیرها و عبارات را در برنامه چک کنید.برای قرار دادن BreakPoint در محیط ویژوال استودیو، بایستی بر روی لبه کناری برنامه و هم ردیف با کدی که می خواهید اشکال زدایی کنید، کلیک راست نموده و برنامه برای شما یک دایره قرمز رنگ به نشانه BreakPoint قرار می دهد.آموزش سی شارپبرای درک بهتر، قطعه کد زیر را در محیط ویژوال استودیو کپی کرده و در کنار آن یک BreakPoint ایجاد نمایید namespace DebugTest{    class Program    {        static void Main(string[] args)        {            int a = 5, b = 8, c = 233;            int d = a + c - b;            Console.WriteLine(d);        }    }}کد مثال فوق، کد بسیار ساده ای بوده و شما حتی با یک ماشین حساب می توانید مقدار متغیر را در هر لحظه حساب کرده و کد خود را چک نمایید. اما در پروژه های بزرگ، انجام این کار به صورت دستی تقریبا غیر ممکن است.همانند تصویر زیر، یک BreakPoint در کنار خط کد نشان داده شده، ایجاد نمایید :اکنون شما آماده اید تا اولین عملیات اشکال زدایی صفحات یا Debugging خود در C# را انجام دهید. با زدن دکمه F5 برنامه را اجرا نمایید. چیزی که رخ خواهد داد این است که برنامه مثل حالت طبیعی اجرا شده و زمانی که به خط کد دارای Breakpoint برسد، عملیات پردازش برای چک کردن کد متوقف می شود. در کد فوق، متغیرهای a و b و c دارای مقدار هستند، ولی در خط مشخص شده متغیر d هنوز مقداردهی نشده و مقدار پیش فرض برای integer یعنی صفر را دارا می باشد. پس از اجرای این خط کد است که متغیر d مقدار جدید خود را کسب می کند.حالا می رسیم به قسمت هیجان انگیز برنامه، موس را بر روی نام متغیرهای مختلف کد ببرید. یک tooHip باز می شود که به شما اعلام می کند هر متغیر در آن لحظه، دارای چه مقداری است.همان طور که اشاره کردیم، متغیر d تا اجرای این خط، دارای مقدار پیش فرض صفر است. اما با حرکت و به جلو رفتن اجرای برنامه، می توان مقدار آن را تغییر داد. در درس بعدی، به آموزش نحوه حرکت در کدهای برنامه و بررسی بیشتر عملیات Debugging خواهیم پرداخت.آموزش سی شارپآموزش حرکت بین کدها در هنگام Debug برنامه های C#در این درس، به آموزش نحوه حرکت بین کدها در زمان Debug برنامه های C# خواهیم پرداخت. برای این منظور، برنامه ای با کد زیر را نوشته ایم :namespace DebugTest{    class Program    {        static void Main(string[] args)        {            int a = 5;            a = a * 2;            a = a - 3;            a = a * 6;            Console.WriteLine(a);        }    }}کد مثال فوق، چندین بار بر روی متغیر a عملیات ریاضی انجام داده و سپس نتیجه نهایی را در خروجی چاپ می کند. همان گونه که در درس قبل نشان دادیم، در کنار خطی اولی که متغیر a تعریف و مقداردهی شده است، یک Breakpoint قرار دهید. سپس پروژه را اجرا نمایید. در خط اول ای که Breakpoint قرار داده اید، اجرای برنامه متوقف شده و می توانید با بردن موس بر روی متغیر a، مقدار آن را در لحظه مشاهده نمایید. در این مرحله، متغیر a دارای مقدار پیش فرض متغیرهای عددی یعنی صفر است، زیرا هنوز کد آن خط اجرا نشده است. اما بیایید کمی روند را تغییر دهیم.از منوی Debug ، گزینه “Step over” را انتخاب کرده و یا دکمه F10 را فشار دهید. در این حالت، خط کد بعدی برنامه اجرا شده و می توانید با حرکت موس بر روی کد ببینید که اکنون متغیر a دارای مقدار است. مجددا با زدن دکمه F10 به حرکت در خط های کد ادامه داده و هر خط را یک به یک اجرا کرده و مقدار متغیر آن را در آن خط بسنجید، تا این که به انتهای کد برسید.مثال فوق بسیار ساده ولی در عین حال کاربردی بود، اکنون می توانیم وارد مراحل پیشرفته تر بشویم.در کد مثال زیر، یک برنامه پیچیده تر از مثال قبلی طراحی کرده ایم. در کد مثال قبل، جریان حرکت برنامه بسیار ساده و خطی بود. اما اگر کد ما در بین توابع و کلاس های مختلف حرکت کند، چه؟ برای این منظور به کد مثال زیر دقت کنید :namespace DebugTest{    class Program    {        static void Main(string[] args)        {            int a = 5;            int b = 2;            int result = MakeComplicatedCalculation(a, b);            Console.WriteLine(result);        }         static int MakeComplicatedCalculation(int a, int b)        {            return a * b;        }    }}در خط اول متد Main برنامه یک Breakpoint قرار داده و آن را اجرا نمایید. سپس از دکمه F10 برای حرکت بین خطوط برنامه و اجرای کدها استفاده کنید. همانطور که مشاهده خواهید کرد، برنامه از روی کد فراخوانی تابع بدون توجه عبور می کند. این حالت روش پیش بینی فرض Debugger است. اما بار دیگر اجرای کد را از اول شروع کرده و هنگام رسیدن به خط کد فراخوانی تابع Make Calculation()، از منوی Debug گزینه Step into را انتخاب کرده یا کلید میانبر F11 را فشار دهید. در این هنگام، برنامه وارد عملیات فراخوانی تابع شده و بدنه تابع را به صورت کامل پیمایش می کند. بنابراین با زدن دکمه F11 می توانید ریزعملیات اجرایی برنامه را هم بررسی کنید.اما اگر وارد یک تابع شدید و در میانه راه خط هستید از مشاهده ادامه روند اجرای تابع صرف نظر کرده و به کد اصلی برنامه باز گردید، می توانید از منوی Debug گزینه “step out” را انتخاب کرده و یا دکمه shift +F11 را همزمان فشار دهید. در این حالت برنامه به ادامه کد پس از تابع بازگشته و به این صورت می توانید هرچند بار که خواستید وارد فراخوانی یک تابع شده و سپس در هنگام لزوم از آن خارج شوید.</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Mon, 11 May 2020 13:09:27 +0430</pubDate></item><item><title>آموزش سی شارپ در ویژوال استودیو</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-r1vhx9cxoshs</link><description>سلام با آموزش برنامه نویسی سی شارپ در خدمت شما عزیزان هستیملينك قسمت اول : آموزش #Cمعرفی ساختار پروژه های C#هر پروژه نرم افزاری دارای یک ساختار استاندارد است که بایستی رعایت شود. در سی شارپ نیز ساختار استانداردی وجود دارد که برای نوشتن یک برنامه کارآمد و مطمئن لازم است تا هر چه دقیق تر و کامل تر این ساختار رعایت گردد. در این بخش از سری آموزش سی شارپ به بررسی ساختار یک پروژه سی شارپ خواهیم پرداخت. https://www.aparat.com/v/s6AOp از زبان برنامه نویسی برای دادن دستور انجام کار خاصی به کامپیوتر استفاده می شود. زبان برنامه نویسی مانند زبان محاوره از کلمات معنی دار، گرامر، فرمول ها و قوانین خاص تشکیل شده که برای ساختن جملات و مفاهیم معنادار باید از آن قوانین پیروی کرد.زبان های برنامه نویسی متعددی وجود دارند. برخلاف زبان انسان ها، زبان های برنامه نویسی کامپیوتر بسته به اهداف یا نقش هایی که ایفا می کنند، طبقه بندی می شوند.سخت افزار عبارتند از مجموعه قطعاتی که دستور را از زبان برنامه نویسی دریافت می کنند. برخی زبان های برنامه نویسی برای بخش (سخت افزاری) خاصی تعبیه شده اند و یا محیط خاصی را هدف دستورات خود قرار می دهند. چنین محیطی از سیستم عامل خاصی استفاده می کند که از یک وسیله (مثل موبایل) به وسیله ی دیگر (کامپیوتر) قابل انتقال نمی باشد. برخی زبان های برنامه نویسی هم بخش یا قطعه ی خاصی را هدف نمی گیرند.آموزش سی شارپبرخی زبان ها برای رفع یک مسئله ی خاص طراحی شده اند و توانایی انجام وظایف معمول (زبان های دیگر) را ندارند. برای مثال، زبان هایی وجود دارند که فقط قادر به نشان دادن محتویات وب هستند و از آن ها نمی توان برای انجام محاسبات ریاضی و هندسی بهره گرفت. برخی برنامه ها طوری تعبیه شده اند که تنها با مقدارهای (value) خاصی مثل (true یا false) کار می کنند. تعدادی زبان برنامه نویسی هم داریم که به حل تمام مسائل می پردازند.سی شارپ C# از آن دسته زبان هایی است که علاوه بر اجرای دستورات، به حل مسائل نیز می پردازد. این زبان بر روی تمام سیستم عامل ها از جمله ویندوز قابل اجرا است. C# از جمله زبان هایی است که در Microsoft .NET Framework به کار می رود. Microsoft .NET Framework کتابخانه ای از اشیاء است که به کمک آن می توان برنامه های مختلفی برای اجرا در وب، ویندوز، موبایل و خیلی محیط های دیگر تولید کرد.پروژه ی کامپیوتری عبارتند از گروهی فایل و شئ که دستورهای مورد نظر را برای انجام عملکرد های معین تعبیه می کند. پروژه ی C# متشکل از چند فایل است که دستورهای برنامه را در بر دارند. یک پروژه ی ساده ی C# در بر دارنده ی یک فایل است که تمام دستورات مورد نیاز برنامه را در خود جای داده است. این در حالی است که پروژه های ی پیشرفته C# حاوی بیش از یک فایل است.برنامه های کاربردی کنسولزبان برنامه نویسی C# به منظور طراحی و نوشتن برنامه های کاربردی DOS به کار می رود. برای طراحی چنین برنامه ای باید دستورات مورد نظر را در برنامه ی Notepad یا محیط برنامه نویسی مانند Visual Studio نوشت.برای راه اندازی برنامه Microsoft Visual C# Express، دستورالعمل زیر را دنبال کنید : Start -&gt; (All) Programs -&gt; Microsoft Visual Studio Express -&gt; Microsoft Visual C# 2019راه اندازی پروژهبرنامه ی Microsoft Visual C# Express را اجرا کنید.به منظور ایجاد برنامه ی کاربردی جدید (app)، در فهرست گزینه ی اصلی (main menu) روی گزینه ی File -&gt; New Project... کلیک کنید.در لیست وسطی نیز گزینه ی Console Application را کلیک کنید.اسم مورد نظر را به gdcs1 تغییر دهید.روی گزینه ی ok کلیک کنید.ایجاد فایل برای کد مورد نظرآموزش سی شارپهدف از نوشتن برنامه، دادن دستور (اجرای عملکرد خاص) به کامپیوتر است. البته، این برنامه را با زبان عادی ( مثلاً انگلیسی) و جملات معنی دار می نویسیم. به عبارت دیگر، یک دستور معمولی از متن ساده استفاده می کند ( که شامل حروف الفبا، ارقام و علامت های ناخوانا می باشد).می توان این دستورات را با کمک برنامه های ویرایشگر متن (text editor) از قبیل Notepad، Microsoft word، wordpad و wordperfect نیز نوشت. در برنامه نویسی، قوانین و دستور هایی وجود دارد که پیروی از آن ها الزامی است. به دستورات مزبور کد هم گفته می شود.در برنامه های Microsoft Visual C# Express و Microsoft Visual Studio Professional، ویرایشگر متنی وجود دارد که از آن با نام code editor یاد می شود. چناچه، پروژه ی خود را با فرمت console application بنویسید، فایل پیش فرضی به وجود می آید که می توان آن را تنظیم (customize) کرد. اما اگر برنامه ی خود را به عنوان پروژه ای تهی آغاز کنید، لازم است خود یک فایل به آن اضافه کنید. برای این منظور دستورات زیر را انجام دهید.منو Main menu را باز کرده و روی گزینه های Project -&gt; Add New Item... کلیک کنید.حال، در قسمت Solution Explorer، روی اسم پروژه ی مورد نظر راست کلیک کرده و مکان نمای موس را روی گزینه ی Add قرار دهید، سپس New Item را انتخاب کنید.هریک از دستورهای مذکور، پنجره ی محاوره Add new item را نشان می دهد. حال، در لیست میانی، روی گزینه ی Code File کلیک کنید. می توانید اسم فایل مذکور را بپذیرید یا آن را مطابق میل تغییر دهید. پس از کلیک روی گزینه ی ok، پنجره ی سیاهی نمایان می گردد. به همین شیوه، می توانید هر تعداد فایل که مایلید به پروژه اضافه کنید.ایجاد فایلبه منظور افزودن فایل جدید به کد مورد نظر، به فهرست گزینه ی اصلی (main menu) مراجعه کرده و روی Project -&gt; Add New Item... کلیک کنید.در صورت استفاده از visual studio، باید آیتم های visual C# (در لیست سمت چپ) را انتخاب کرده و در بخش وسط روی code کلیک کنید.در پایین این پنجره نام موردنظر را به CleaningOrder تغییر دهید.اکنون، گزینه ی Add را انتخاب کنید.کد اصلی C#آموزش سی شارپبه منظور ایجاد ساده ترین نوع برنامه ی کاربردی C#، کافی است تنها یک کد پایه (basic) بنویسید. کد مذکور به این صورت است.class Exercise        {‎                    static void Main()‎                ‎    {‎                      System.Console.WriteLine(&#34;Hello world&#34;);‎                ‎    }‎        ‎}واژه ی Exercise تنها یک اسم است.این کد را تا حد امکان ساده معرفی کرده ایم. تک تک کلمات و عملگرها در این کد وظیفه ی خاصی را انجام می دهد ولی می توان آن ها را به شیوه های مختلف به کاربرد.class Order        ‎{‎                    static void Main()‎                ‎    {‎                       System.Console.WriteLine(&#34;Georgetown Dry Cleaning Services&#34;);‎                       System.Console.ReadKey();‎                ‎    }‎        }Commentsکامنت یا توضیحات به خط یا پاراگرافی از متن گفته می شود که جزو کد محسوب نمی گردد. در زبان C# دو نوع comment وجود دارد. برای نشان دادن / قرار دادن comment در (خطی از) متن، خط مورد نظر را با علامت // آغاز کنید. هر چه در سمت راست این علامت قرار بگیرد، نادیده گرفته می شود. به مثال زیر توجه کنید.// This line will be ignored. I can write in it anything I wantکامنت Comment گفته شده در تنها یک خط قابل استفاده است. می توان comment را با علامت /* نیز آغاز کرد. این نوع comment به علامت */ ختم می شود. هر چه بین این دو علامت /* و */ قرار گیرد، خوانده نمی شود. با این روش می توان، comment را در چند خط (بیش از یک خط) به کار برد. به منظور قرار دادن (افزودن) comment در خط، ابتدا روی خط مورد نظر کلیک کنید. حال، در (قسمت) Standard toolbar، گزینه ی Comment Out the Selected Lines را انتخاب کنید. برای افزودن comment به خط های مجاور، روی متن خط های نام برده راست کلیک کرده، سپس روی گزینه ی Comment Out the Selected Lines کلیک کنید. به منظور حذف comment ها، ابتدا روی متن آن کلیک کنید. سپس، گزینه ی Uncomment the Selected Lines را از Standard toolbar انتخاب کنید.ایجاد commentبه منظور ایجاد comment، فایل مورد نظر را به صورت زیر تغییر دهید.//  Application Name: Georgetown Dry Cleaning Services‎        class Order        {‎                ‎    //  This application is used to perform processing orders for this business‎                    static void Main()‎                ‎    {‎                ‎         /* Always greet the customers before processing an order.‎                         Check the types of clothes a customer has brought.‎                         Find out the type of cleaning (starch،‎ etc) the customer wants.‎                         If there are special needs the customer has،‎ make a note. */‎                         System.Console.WriteLine(&#34;Georgetown Dry Cleaning Services&#34;);‎                         System.Console.ReadKey();‎                ‎    }‎        } مدیریت فایل هادر برنامه های Microsoft Visual C# Express و Microsoft Visual Studio، پروژه هایی که متشکل از چند فایل هستند، با ورچسب های معینی (واقع در قسمت بالای code editor) نمایش داده می شوند.فایل های نام برده در main menu ویندوز نیز قابل مشاهده است.Solution Explorerآموزش سی شارپپنجره Solution explorer پنجره ای است که فهرستی از فایل های تشکیل دهنده ی پروژه را به نمایش می گذارد. برای دسترسی به پنجره ی مزبورچنانچه، Solution explorer در صفحه ی مانیتور نمایان نیست.به main menu مراجعه کرده، سپس روی گزینه ی View -&gt; Solution Explorer کلیک کنید.تولبار Standard toolbar را باز کرده، و گزینه ی Solution Explorer را انتخاب کنید.چنانچه، Solution Explorer در صفحه قابل رویت است، روی تبِ آن کلیک کنید.این پنجره از چهار جز شکیل می شود. درست مانند پنجره های دیگر، بخشی دارد به نام نوارتیتر (title bar) که در سمت چپ آن سه گزینه وجود دارد.با کلیک روی دکمه ی موقعیت پنجره (window position)، فهرستی پدیدار می گردد.در صورتی که پنجره ی موردنظر به کناره ی صفحه متصل باشد، گزینه ی float فعال می باشد. چنانچه پنجره از قبل در حالت شناور قرار دارد، گزینه ی float فعال نمی باشد. پس از کلیک روی گزینه ی float پنجره ی (متصل به کناره ی صفحه) شناور می شود. پی در پی، می توانید با گرفتن و کشیدن titlebar به وسط صفحه، آن را از حالت متصل (docked) خارج کنید.به منظور متصل کردن پنجره به کناره ی صفحه، titlebar را بکشید. زیر سرتیتر (titlebar)، فهرستی وجود دارد که به آن نوارابزار (toolbar) می گویند.گزینه ی show all files؛ تمام فایل های مخفی (hidden) را نمایش می دهد.دکمه ی refresh، فهرست منابع و فایل ها را باز سازی (refresh) می کند.دکمه ی view code، برای نمایش کد یک کلاس به کار می رود.سومین بخش solution explorer بدنه ی اصلی آن است که در آن فایل ها، فولدرها و منابع تشکیل دهنده ی پروژه به نمایش گذاشته می شود. به منظور بزرگنمایی گره (node)، روی اسم آن دوبار کلیک کنید ( یا روی دکمه ی آن کلیک کنید). برای کوچک کردن گره، روی آن دوبار کلیک کنید.ریشه ی (root) لیست، در واقع اسم solution است. زیر root، اسم پروژه ی جاری قرار دارد. در صورتی که، solution دارای چند پروژه باشد، اسم هر یک از پروژه ها زیر solution نمایش داده می شود. درون پروژه ها : فایل ها، فولدرها و منابع وجود دارد. اولین آیتم زیر اسم پروژه References است. پس از گره References (ارجاعات)، با اسم کلاس ها (ی تشکیل دهنده ی پروژه) مواجه می شویم.چهارمین جز solution explorer تب (tab) می باشد.Properties Windowsپنجره ی properties، تمام جزئیات فایل ها و منابع سیستم عامل ویندوز که در پروژه به کار برده شده را نمایش می دهد. برای نمایش آن چنانچه، پنجره ی Properties نمایان نباشد، به main menu مراجعه کرده سپس روی View -&gt; Properties window کلیک کنید.تولبار Standard toolbar را باز کرده، گزینه ی Properties را انتخاب کنید.حال، اگر پنجره ی Properties، در صفحه ی نمایش قابل رویت است، روی تب آن کلیک کنید.به منظور مشاهده ی ویژگی های سیستم عامل پروژه یا فایل موردنظر(در solution explorer)، روی شی دلخواه کلیک کنید.با کلیک روی solution، پنجره ی Properties اسم و مسیر (مکان قرارگیری فایل) آن را نمایش می دهد. چنانچه، گزینه ی project را انتخاب کنید، پنجره ی Properties فایل های پروژه ی موردنظر را نشان می دهداگر روی فایل کلیک کنید، پنجره ی Properties اسم و مسیر فایل نام برده را به نمایش می گذارد.پنجره ی Properties بسته به آیتم انتخابی شما (در solution explorer) قسمت های (field) مختلفی را نشان می دهد. می توان برخی تنظیمات را در پنجره ی Properties دستکاری کرد. چنانچه، قسمت (field) ای غیر فعال شود، بدین معنا است که دیگر نمی توان آن را اصلاح کرد.دسترسی به فایل و باز کردن آندر برنامه های ویرایش گر متن مثل Notepad، بخشی وجود دارد به نام open file. چناچه سعی دارید فایل c# را با آن باز کنید، ابتدا لازم است که در combo box، نوع فایل را به All files (*) تغییر دهید. سپس، محل قرارگیری فایل را پیدا کرده و روی open کلیک کنید.چنانچه فایل مذکور عضوی از پروژه جاری است برای باز کردن آن مراحل زیر را دنبال کنید.به main menu مراجعه کرده، روی Window و اسم فایل موردنظر کلیک کنید.در code editor، روی برچسب حاوی اسم فایل کلیک کنید.در solution explorer، روی اسم فایل دو بار کلیک کنید.در صورت استفاده از Microsoft Visual C# 2010 Express و Microsoft Visual Studio، برای باز کردن فایل در main menu، روی گزینه های click File -&gt; Open File... کلیک کنید یا به Standard toolbar مراجعه کرده و روی Open File کلیک کنید.در نتیجه ی هریک از عملیات بالا open file ظاهر می گردد. حال، فایل را از فولدر مرتبط پیدا کرده و روی آن کلیک کنید. اگر visual studio امکانات باز کردن فایل را داشته باشد آن را داخل رابط (interface) خود نمایش می دهد. ولی اگر نتواند آن را باز کند، در کامپیوتر به دنبال برنامه ای که قادر به باز کردن فایل مزبور است می گردد. برای مثال، اگر سعی کنید فایل ویدئویی را با visual studio باز کنید، برنامه ی windows media player به کمک شما می آید و فایل را باز می کند.مدیریت solution و پروژهدرباره ی نحوه ی ایجاد برنامه ی کاربردی کنسول (console app) مطالبی گفته شد. به کمک visual studio می توان برنامه های کاربردی متفاوتی ایجاد کرد. به همین دلیل، باید ابتدابرای انتخاب گزینه دلخواه پنجره ی محاوره ی New Project را باز کنید.Code Snippetدر فهرستی که نمایان می گردد، روی visual c# کلیک کنید.این کار لیستی از کدهای موجود را به نمایش می گذارد.روی کد دلخواه دوبار کلیک کنید.چنانچه، از قبل تعدادی کد نوشته اید و مایلید که آن ها را اصلاح کنید یا کدهای دیگری به آن اضافه کنید، code editor گروهی skeleton code در اختیار شما قرار می دهد. برای این منظور، روی کد دلخواه (کدی که می خواهید اصلاح کنید) راست کلیک کرده، سپس گزینه ی surround with را انتخاب کنید. اکنون، لیستی پدیدار می شود که گزینه ی موردنظر شما در آن درج شده.رنگ کدهاکدها به صورت اساسی در محیطی گسترده با پس زمینه ای سفید نوشته می شوند. در این محیط است که شما با استفاده از صفحه کلید، کد موردنظر را با کاراترهای خوانا و معمول درج می کنید. code editor به منظور تمیز دادن خط ها و کلمات متن از رنگ های مختلف استفاده می کند.می توان این رنگ ها را تنظیم کرد. برای این منظور، main menu را باز کرده و گزینه ی Tools -&gt; Options.. را انتخاب کنید. در پنجره ی options، قسمت Environment، روی گزینه ی fonts and colors کلیک کنید. برای تنظیم رنگ دسته (category) ی موردنظر، در قسمت Display Items، دسته ی دلخواه را انتخاب کنید. حال، می توانید رنگ انتخابی را در لیست پایین افتادنی item foreground تنظیم کنید. چنانچه مایلید پس زمینه ی کلمات دسته ی مورد نظر رنگی شود، به قسمت item background مراجعه کنید.در هر دومورد، فهرست ثابتی از رنگ های معین پدیدار می شود. اگر مایلید رنگ جدیدی به این لیست اضافه شود، روی دکمه ی custom کلیک کنید. حال، پنجره ی محاوره color نمایش داده می شود که می توان در آن رنگ دلخواه را به وجود آورده و اضافه کرد.توگذاری (Indentation)یژگی دیگر که به خوانایی هر چه بیشتر برنامه ی شما کمک می کند توگذاری (indentation) است. indentation در واقع به گروه بندی خط های کد مورد نظر بر مبنای دسته ی مرتبط گفته می شود. به منظور تعیین حد و مرز (delimit) کدها، باید آن ها را به اندازه ی دو جای خالی یا یک تَب (tab) تو بگذارید. توگذاری (indentation) باید مراتب افزایشی داشته باشد. به عبارت دیگر، خطی که زیر مجموعه ی خط دیگری است، باید بیشتر تو گذاشته شود.برای مدیریت indentation کد، main menu را باز کرده و روی گزینه ی Tools -&gt; Options... کلیک کنید. در لیست سمت چپ، C# را باز کرده و بعد از بزرگ نمایی گزینه ی Formatting، روی indentation کلیک کنید. حال، می توان گزینه های سمت راست را تنظیم کرد.پس از ایجاد تغییرات مورد نظر، روی گزینه ی ok کلیک کنید.ذخیره سازی پروژهاگر برنامه ی دلخواه خود را با text editor (ویرایش گر متن) ایجاد می کنید، باید فایل های آن را در فولدری ذخیره کنید. در نسخه های قبلی visual studio 2003 و 2002، کاربر مجبور بود خود به صورت رسمی یک پروژه ایجاد کند و بعد آن را ذخیره کند. بعد ها مایکروسافت دریافت که خیلی از پروژه هایی که برنامه نویسان به وجود می اورند، جنبه ی آزمایشی دارد. بنابراین، امکان جدیدی به برنامه اضافه کرد که به کاربر اجازه می دهد یک پروژه به صورت موقت ایجاد کند و تصمیم بگیرد که آن را save کند یا نه. این کار، پروژه را در رسانه ی داده ذخیره می کند و کاربر می تواند بعد ها به آن مراجعه کرده و از آن استفاده کند.پس از طی کردن تمام مراحل نصب visual studio 2019، در Documents فولدری به نام Visual Studio 2019 به وجود می آید. فولدر doctments را با نام های دایرکتوری شخصی (personal derictory) یا personal drive نیز می شناسند. در فولدر Visual Studio 2019، subfolder دیگری به projects به وجود می آید. در این دایرکتوری است که پروژه های شما به صورت پیش فرض ذخیره می شوند.به منظور ذخیره سازی پروژه، به Standard toolbar مراجعه کرده، و روی دکمه ی Save allکلیک کنید. پی در پی، می توانید main menu را باز کرده و گزینه ی File -&gt; Save All را انتخاب کنید. چناچه، پروژه، قبلاً ذخیره شده ولی می خواهید آن را تحت اسم دیگری ذخیره کنید باید این دستور را دنبال کنید: File -&gt; Save project name As...بازکردن پروژهآموزش سی شارپشیوه های مختلف بازکردن پروژه، در زیر فهرست شدهMain menu-&gt;File-&gt;Open project        Start-&gt;Open project        Ctrl + Shift + O        Solution سولوشن Solution به منظور هماهنگ سازی (ایجاد هماهنگی بین) بخش/جنبه های مختلف یک برنامه (app) به کار می رود.هر پروژه، تنها یک بخش از برنامه ی کاربردی مورد نظر را تشکیل می دهد. علاوه بر کدی که می نویسید، لازم است آیتم های دیگری نیز به برنامه اضافه کنید.توجه داشته باشید که اسم پروژه و solution یکسان می باشد. می توانید اسامی آن ها را در solution explorer مشاهده کنید.سولوشن Solution و پروژه ممکن است اسامی متفاوت داشته باشند. به منظور تغییر اسم solution، (در solution explorer)، روی اولین گره (node) کلیک کنید. سپس، )در پنجره ی Properties)، روی Name کلیک کرده و اسم دلخواه را وارد کنید.لازم به ذکر است که اسم مزبور به طور کامل موقتی است. اگر می خواهید solution را به صورت دائم ذخیره کنید، دو روش پیش روی شما وجود دارد.در صورتی که solution را برای اولین بار ذخیره می کنید، پنجره ی Save Project پدیدار می گردد. به صورت پیش فرض، Microsoft Visual Studio، دایرکتوری شخصی شما را به عنوان مسیر ذخیره سازی فایل انتخاب می کند. به این مسیر location می گویند. در location نام برده، Microsoft Visual Studio فولدری به وجود می آورد به عنوان solution پروژه مورد نظر. حال، solution باید در فولدر مختص به خود قرار گیرد. همان طور که پیش توضیح دادیم، Microsoft Visual Studio از اسم پروژه برای solution نیز استفاده می کند.برای جلوگیری از این رخداد، می توانید رشته (string) را در کادر متن (textbox) Solution Name تغییر دهید. به خاطر داشته باشید که اسم دلخواه را باید در کادرمتن Name وارد کنید. به مثال زیر توجه کنید.زمانی که (برای اولین ) پروژه ای را ذخیره می کنید، Microsoft Visual C# به صورت پیش فرض فولدری برای آن در مسیر My Documents\Visual Studio 2008\Projects folder به وجود می آورد. هم چنین از اسم solution برای نام گذاری فولدر استفاده می کند. تعدادی فایل جدید ایجاد کرده و آن ها را در فولدر تازه به وجود آمده ذخیره می کند. سپس، داخل فولدر solution، subfolder جدیدی با نام پروژه ی مورد نظر ایجاد می کند. جدا از subfolder (که اسم آن Project است)، فولدر دیگری به نام debug به وجود می آید. همچنین فولدر دیگری به اسم Debug، در subfolder اسم پروژه به وجود می آورد.چناچه، پروژه ی مورد نظر از قبل ذخیره شده باشد، ولی مایلید که اسم solution را عوض کنید، به main menu مراجعه کرده و روی File -&gt; Save solution-name.sln As.. کلیک کنید. این کار منجر به بالا آمدن کادر Save as می شود که در آن اسم solution آماده ی تغییر و ذخیره سازی است.ساختن پروژهپس از ایجاد پروژه و نوشتن کد، برای مشاهده ی نتیجه، ابتدا باید به ساختن برنامه (app) بپردازید. این کار یک فایل اجرایی (executable) خلق می کند.زبان C#، به منظور برنامه نویسی (ساختن برنامه ی جدید) امکانی به نام compiler (مترجم) را در اختیار کاربر قرار می دهد. compiler یک برنامه ی کامپیوتری است که خود از زیربرنامه (subprogram) های داخلی متعدد دیگری تشکیل شده. اولین و مهم ترین این زیربرنامه ها parser) تجزیه کننده) خوانده می شود. وظیفه ی parser اسکن یا پوییدن فایلی است که (خود بخشی از) برنامه را دربردارد. دستور نحوی (syntax)، کلیدواژه ها و تمامی کلمات ناشناس توسط parser بررسی می شوند. اگر parser در جستجو ی خود مشکل یا خطایی را پیدا کند، یا همان جا متوقف می شود و یا لیستی از تمام مشکلاتی که به آن ها برخورده تهیه می کند، سپس لیست مذکور را برای شما به نمایش می گذارد. گاهی تنها به خطی اشاره می کند (تنها شما را به خطی ارجاع می دهد) که مشکل در آن یافت شده و گاهی نیز به خطی ارجاع می دهد که مشکل اثر خودش را در آن جا نشان داده ولی خود مشکل در جای دیگری یافت می شود. البته، نحوه ی حل مشکلات فوق را با تجربه یاد می گیرد.اگر parser در اسکن خود با مشکلی مواجه نشد (یا پس از اینکه مشکل مزبور را برطرف کردید)، برنامه ی نام برده (parser) نتایج بدست آمده را به compiler ارسال می کند. حال، compiler برنامه ی دیگری به نام linker را فرا می خواند. linker کلیه ی فایل های برنامه را بررسی می کند (چه یک فایل داشته باشد چه چند فایل ). سپس، linker تعدادی از فایل های ارسال شده توسط C# compiler(تنها آن دسته فایل هایی که برنامه برای فعالیت، نیاز مبرم به آن ها دارد و نه کلیه ی فایل ها یی که .Net Framework فراهم می کند) را با فایل های شما ادغام کرده تا دستورات شما را درست دریافت کند و نتایج دلخواه شما را ارائه دهد. در صورتی که مشکل جدی ای وجود نداشته باشد، compiler برنامه ی مورد نظر را می سازد. به خاطر داشته باشید که این بدین معنا نیست که اصلاً هیچ مشکلی وجود ندارد، بلکه compiler مشکلی پیدا نکرده و هنوز احتمال این وجود دارد که نتیجه ی حاصل مورد دلخواه شما نباشد.باید در نظر داشته باشید که تمام برنامه های بالا (linker، parser، debugger) همه گی زیر مجموعه ی برنامه ی بزرگتری به نام compiler هستند. از این به بعد، از compiler به عنوان برنامه ای یاد می شود که زبان (انگلیسی) را به زبان کامپیوتر ترجمه می کند.کامپایلر Compiler ای که برنامه ی Microsoft.NET Framework ارائه می دهد csc گفته می شود. مشابه خیلی از برنامه های دیگر، compilerپسوند .exe را دارد. Csc اسم استانداردی برای compiler نمی باشد. به این معنا که C# compiler اسم دیگری دارد : csc.exe اسم compiler ای است که ما استفاده می کنیم.به منظور نوشتن برنامه از طریق پنجره ی فرمان (command prompt)، از csc.exe compiler استفاده می کنیم. پس از دانلود .NET Framework از سایت رسمی مایکروسافت، باید آن را روی رایانه ی خود نصب کنید. برنامه ی مورد نظر ما csc.exe است. مسیر نصب این برنامه به صورت پیش فرض C:\Windows\Microsoft.NET\Framework\v4.0.21006 می باشد.باید مسیر csc.exe را به مسیر Environment Variables اضافه کنید. برای شروع،می توان از ابزاری همچون windows explorer کمک گرفته و فولدر مورد نظر را در جایی که csc نصب شده نمایش دهید.مسیر مورد نظر را از بالاترین combo box انتخاب کرده و آن را در قسمت clipboard کپی کنید. پنجره ی control panel را باز کرده و روی آیکون system and security کلیک کنید.حال، در قسمت system and security، روی گزینه ی system کلیک کنید.پس از نمایان شدن پنجره ی system، گزینه ی change setting را انتخاب کنید. اکنون، تب Advanced را باز کرده و روی Environment Variables کلیک کنید.در بخش System Variables، روی Path دو بار کلیک کنید، یا یک بار روی آن کلیک کرده سپس Edit را انتخاب کنید.دکمه ی End را فشار داده، علامت &#34;;&#34; را تایپ کنید. حال، مقدار (value) ای را که از clipboard کپی کرده بودید را در این قسمت پیاده کنید (paste).سه بار روی ok کلیک کنید.پنجره ی فرمان (command prompt) را باز کنید. حال، برای وارد شدن به درایو اصلی، CD\را تایپ کرده و دکمه ی Enter را فشار دهید. CD\ را تایپ کرده و دکمه ی space را فشار دهید و به دنبال آن فولدر (یا subfolder) هایی که فایل در آن قرار دارد را در این قسمت درج کنید. سپس دکمه ی Enter را فشار دهید. برای ترجمه compile، csc را به دنبال اسم فایل و پسوندش (با تایپ کردن) وارد کنید.نشانگر NameOfExecutate نشانگر اسم دلخواه executable شما می باشد.چنانچه اسم مورد نظر تنها یک کلمه است، می توانید به راحتی آن را تایپ کنید. ولی اگر اسم متشکل از چند کلمه است، باید آن را داخل علامت &#34; قرار دهید.اگر برای تولید برنامه ی مورد نظر از text editor استفاده می کنید و تعداد فایل هایی که ایجاد کرده اید زیاد است، باید هنگام انجام فرایند ترجمه (compiling)، به تک تک فایل ها ارجاع دهید (reference). برای این منظور، لازم است که اسم هر فایل را به همراه پسوند مربوطه ی آن به بخش پایانی اضافه کنید :cscFileName1.cs FileName2.cs FileName_n.csاجرای پروژهپس از ساختن پروژه، شما و کاربرانتان می توانید آن را اجرا کنید. به منظور اجرای پروژه، (از طریق command prompt)، اسم فایل را به همراه پسوند .exe با Enter وارد کنید.در صورتی که با visual studio کار می کنید، برای اجرای برنامه ، به main menu مراجعه کرده و روی گزینه های Debug -&gt; Start Debugging کلیک کنید.در صورتی که با visual studio کار می کنید، برای اجرای برنامه ، به main menu مراجعه کرده و روی گزینه های Debug -&gt; Start Debugging کلیک کنید.اجرای برنامهبه منظور اجرای برنامه، main menu را باز کرده و گزینه ی Debug -&gt; Start Debugging را انتخاب کنید.پس از مشاهده ی نتیجه در پنجره ی DOS، با زدن دکمه ی Enter آن را ببندید.برنامه ی visual studio را نیز ببندید.در پاسخ به در خواست : آیا مایلید save کنید، No را بزنید.</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Sun, 10 May 2020 15:03:21 +0430</pubDate></item><item><title>آموزش جاوا-آموزش حلقه for در java</title><link>https://virgool.ir/@p.kalantar.n/آموزش-جاوا-آموزش-حلقه-for-در-java-g2nh8fowclmx</link><description>سلام با قسمت 8 آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با مقادیر Boolean و Switch در جاوا آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآموزش حلقه for در جاواهمانطور که قبلا ذکر کردیم، برنامه نویسی که اکنون در حال انجام آن هستید یک برنامه نویسی پی در پی می باشد. این به این معناست که جریان صعودی می باشد، از بالا به پایین، با هر خط از کد که اجرا شده است، مگر اینکه شما درخواست دیگری از Java بکنید.در بخش قبل مشاهده کردید که یک روش برای اینکه به جاوا بگویید هر خط از کد را اجرا نکند، استفاده از عبارت IF برای بخش های خاموش کد می باشد.راه دیگر برای به هم ریختن جریان از بالا به پایین، استفاده از loop ها می باشد. یک برنامه نویسی loop آن برنامه نویسی می باشد که مجددا به عقب بازمی گردد. اگر بازگشت مجدد به عقب اجبار باشد، شما می توانید خطوط را به طور مکرر اجرا کنید.به عنوان یک مثال فرض کنید که می خواهید اعداد از یک تا 10 را با هم جمع کنید. شما این کار را در جاوا به راحتی می توانید انجام دهید، مانند زیر:int addition = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;اما اگر بخواهید اعداد را از یک تا 1000 با هم جمع کنید، واقعا نمی خواهید از این متود استفاده کنید. در عوض می توانید از loop استفاده کنید تا مکررا وارد خطوط کد شوید تا اینکه به 1000 برسید. سپس می توانید از loop خارج شده و به راه خود ادامه دهید.Java For Loopsآموزش جاوابا For Loops یکی از متداول ترین انواع loop ها آغاز خواهیم کرد. به نظر می رسد قسمت For از For Loops معنای خود را از دست داده باشد. اما می توانید آن را به این شکل در نظر بگیرید: loop برای یک مجموعه عدد از دفعات. ساختار For Loop مانند زیر می باشد:for ( start_value; end_value; increment_number ) {//YOUR_CODE_HERE}بنابراین بعد از لغت for با حروف کوچک، یک جفت آکولاد دارید. در داخل این آکولادها سه چیز لازم می باشد: مقدار آغازین برای loop، مقدار پایانی برای loop، و روشی برای به دست آوردن یک تعداد به تعداد دیگر. این فرایند افزایش عدد (increment number) نامیده می شود و معمولا 1 می باشد. اما لازم نیست اینطور باشد. اگر تمایل داشته باشید می توانید تا تعداد 10 نیز بالا بروید.بعد از پرانتزها نیاز به یک جفت آکولاد دارید. آکولادها برای جداسازی آن بخشی از کد استفاده می شوند که می خواهید به طور مکرر اجرا شود. یک مثال می تواند این مورد را شفاف سازد.برای این مورد یک پروژه ی جدید آغاز کنید. پروژه و گروه را می توانید به دلخواه خود نامگذاری کنید. (ما پروزه ی خود را &#34;loops&#34; و گروه را &#34;ForLoops&#34; نامیدیم. ) اکنون کد زیر را اضافه کنید:ما کار را با تنظیم یک مقدار صحیح آغاز کردیم که loopVal نامیده ایم. خط بعدی یک متغیر صحیح دیگر را تنظیم می کند. این متغیر برای مقدار نهایی loop استفاده می شود و به 11 تنظیم شده است. آنچه ما تصمیم داریم انجام دهیم چاپ اعداد از 0 تا 10 می باشد.در داخل پرانتزهای for loop خط زیر را مشاهده می کنید:loopVal =0; loopVal &lt; end_value; loopVal++اولین قسمت به جاوا می گوید که در چه شماره ای looping را آغاز کنید. در اینجا ما یک مقدار صفر را به متغیر loopVal اختصاص می دهیم. این اولین عدد در loop می باشد. بخش بعد از برخی منطق های شرطی استفاده می کند:loopVal &lt; end_valueاین عبارت می گوید که loopVal کمتر از end_value باشد. for loop به چرخش خود ادامه خواهد داد در حالیکه مقدار داخل متغیر loopVal کمتر از متغیری به نام end_value می باشد. تا زمانیکه کمتر بودن loopVal از end_value درست باشد، جاوا looping را روی کد در بین آکولادها حفظ خواهد کرد.بخش نهایی بین پرانتزهای for loop مانند زیر می باشد:loopVal++آموزش جاواآنچه در اینجا انجام می دهیم این است که به جاوا می گوییم چگونه از مقدار آغازین در loopVal به عدد بعدی در ترتیب حرکت کند. می خواهیم از 0 تا 10 بشمریم. عدد بعد از 0 عدد 1 می باشد. loopVal++ راه کوتاه بیان عبارت &#34;افزودن 1 به مقدار در متغیر&#34; می باشد.به جای بیان loopVal++ می توانیم عبارت زیر را نیز بنویسیم:loopVal = loopVal + 1در سمت راست علامت تساوی loopVal + 1 را داریم. بنابراین جاوا 1 را به هر چیزی که در متغیر loopVal ذخیره شده، اضافه می کند. زمانی که 1 را به مقدار اضافه کرده است، نتیجه را در داخل متغیر در سمت چپ تساوی ذخیره خواهد کرد. این مجددا متغیر loopVal می باشد. نتیجه این است که افزوده شدن 1 به loopVal ادامه می یابد. این فرایند افزایش متغیر نامیده می شود. نماد تندنویسی متغیر ++ بسیار متداول می باشد:int some_number = 0;some_number++;وقتی که کد بالا اجرا شود، مقدار some_number مقدار 1 خواهد بود. این راه کوتاه بیان زیر می باشد:int some_number = 0;some_number = some_number + 1;برای پوشاندن آن، for loop در حال بیان مورد زیر می باشد:لوپ Loop Start value: 0 Keep Looping While : مقدار آغازین کمتر از 11 می باشد. How to advance to the end value :افزودن 1 را به مقدار نهایی حفظ می کند.در داخل پرانتزهای for loop عبارت زیر دیده می شود:System.out.println(&#34;Loop Value = &#34; + loopVal);هر چیزی که در داخل متغیر loopVal می باشد، همراه با متن چاپ خواهد شد:بنابراین برنامه را در یک loop گیر انداخته ایم و آن را مجبور کرده ایم به طور مکرر اجرا شود. با هر اجرای loop مقدار 1 به loopValاضافه می شود. loop به چرخش خود ادامه خواهد داد، در حالیکه مقدار در داخل loopVal کمتر از مقدار در داخل end_value می باشد. هر چیزی که در داخل آکولادهای loop می باشد کدی است که پشت سر هم اجرا خواهد شد. و این تمام نکنه ی loop می باشد: اجرای کد آکولاد به طور پیوسته.اینجا کدی را می بینید که اعداد را از 1 تا 10 به هم اضافه می کند. آن را امتحان کنید:پاسخی که در پنجره ی Output دریافت می کنید 55 می باشد. کد نیز کم و بیش همان کد مربوط به loop قبلی می باشد. ما همان دو متغیر loopVal و end_value را تنظیم شده در بالا داریم. همچنین یک متغیر صحیح سومی هم داریم که addition نامیده می شود. این مقدار مجموع 1 تا 10 را حفظ خواهد کرد.بین پرانتزهای for loop تقریبا همان مقدار آخرین بار می باشد: ما در حال looping هستیم در حالیکه loopVal کمتر از end_value می باشد؛ و در حال افزودن 1 به متغیر loopVal می باشیم. تنها تفاوت این است که اکنون مقدار آغازین 1 می باشد.بین آکولادها فقط یک خط کد وجود دارد:addition = addition + loopVal;این خط مجزا اعداد 1 تا 10 را با هم جمع می کند. اگر در مورد چگونگی کار کردن آن گیج شده اید، از سمت راست علامت تساوی آغاز کنید:addition + loopVal;اولین اجرای loop، متغیر addition مقدار 0 را در خود حفظ می کند. در این حین متغیر loopVal مقدار 1 را در خود دارد. جاوا 0 را به 1 اضافه خواهد کرد. سپس نتیجه را در متغیر سمت چپ علامت تساوی ذخیره خواهد کرد. مجددا این متغیر addition (مجموع) می باشد. هرآنچه از قبل در متغیر addition حفظ شد (0)، پاک خواهد شد و با یک مقدار جدید (1) جایگزین می شود.در دومین اجرای loop، مقادیر در دو متغیر عبارتند از:addition (1) + loopVal (2);واضح است که پاسخ 1+2 عدد 3 می شود. بنابراین 3 مقدار جدیدی است که در سمت چپ تساوی ذخیره خواهد شد.در سومین اجرای loop مقادیر جدید عبارتند از:addition (3) + loopVal (3);جاوا 3 را با 3 جمع خواهد کرد و 6 را در سمت چپ تساوی ها ذخیره می کند. این چرخش ادامه می یابد تا اینکه loop به پایان برسد. نتیجه ی نهایی 55 می باشد.(دقت داشته باشید که بعد از آخرین آکولاد از loop، خط چاپی ما خارج از for loop می باشد. )تمرین: کد خود را طوری تغییر دهید که جاوا اعداد را از 1 تا 100 اضافه کند. پاسخی که در یافت می کنید 5050 می باشد. تمرین: یک برنامه ی جدول زمانبندی بنویسید. برنامه باید از یوزر بخواهد تا یک عدد را وارد کند. سپس این عدد به عنوان دفعات مربوط به جدول استفاده خواهد شد. بنابراین اگر یوزر عدد 10 را وارد کند، جدول 10 مرتبه باید نمایش داده شود. کمک برای این تمرین: for loop شما فقط به دو خط کد بین آکولادها نیاز دارد و یکی از آنها خط چاپ (print line) می باشد. شما تنها به یک خط مجزا نیاز دارید تا پاسخ های جدول خود را محاسبه کنید. تقریبا باید چگونگی گرفتن عدد از یوزر را بدانید. این کار در آکولادهای loop استفاده می شود تا پاسخ به ضرب شما را انجام دهد. جول شما تنها نیاز به رفتن از 1 تا 10 را دارد. تمرین از for loop برای چاپ اعداد فرد از 1 تا 10 استفاده کنید. ( برای انجام آسان این تمرین در مورد افزایش مقدار loop فکر کنید که سومین آیتم بین پرانتزها می باشد.) یکی از راه های سخت انجام تمرین بالا استفاده از اپراتوری است که هنوز با آن آشنایی ندارید – اپراتور modulus. این اپراتور زمانی استفاده می شود که یک عدد را تقسم کرده و باقیمانده را نگاه می دارید. بنابراین 10 Mod 3 عدد 1 می باشد، زیرا 10 تقسیم بر 3 می شود 3. باقیمانده نیز 1 می باشد که آن را حفظ می کنید. اپراتور Modulus در جاوا نماد درصد می باشد که تا حدی گیج کننده است. مانند زیر:int remainder;int total = 10remainder = total %3بنابراین عددی را که می خواهید تقسیم کنید در ابتدا قرار می گیرد. سپس یک نماد درصد تایپ می کنید که پس از آن تقسیم کننده قرار می گیرد. پاسخ نیز باقیمانده می باشد.در تمرین بالا می توانستید از 2 به عنوان عدد Mod استفاده کنید و سپس از عبارت IF در for loop برای امتحان باقیمانده استفاده کنید. (آیا متوجه می شوید که چرا 2 باید عدد Mod باشد؟)پایان قسمت 8 آموزش جاوااین آموزش ادامه دارد</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Fri, 08 May 2020 15:14:08 +0430</pubDate></item><item><title>آموزش سی شارپ-دوره آموزش #C</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-دوره-آموزش-c-ovkb7ptohbch</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت 14 در خدمت شما عزیزان هستیم, در قسمت قبلی با کار با داده به صورت آفلاین در C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.لينك قسمت اول : آموزش #Cافزودن پارامتر به SqlCommand با SqlParameterبسیاری از دستورات اجرایی روی پایگاه داده نیاز به پارامترهای داده ای دارند که لازم است فراهم شده و هنگام اجرای دستور مقادیرشان به دستور مربوطه ارسال شده باشد. در این بخش از آموزش سی شارپ و مباحث پایگاه داده در سی شارپ (ADO.NET) به این موضوع و کار با کلاس SqlParameter خواهیم داشت.افزودن پارامتر به فرمان (Command)این درس توضیح خواهد داد که چگونه از پارامترها در فرمان ها استفاده نمود. اهداف این درس عبارتند از:آشنایی با پارامتر (Parameter)آگاهی از مزایای استفاده از پارامترهاچگونگی ایجاد یک پارامتر(SQL Parameter)نحوه ی تخصیص پارامتر به فرمان(SQL Command) https://www.namasha.com/v/yMKK6b9l مقدمهدستور SQL که برای شی SqlCommand اختصاص یافته است به صورت یک رشته می باشد. بنابراین اگر در صدد فیلتر کردن و تعیین یک شرط برای Query باشید، می توانید رشته ی مذکور را به صورت پویا (dynamically) بسازید و این در حالی است که تمایل چندانی به انجام این کار ندارید. کد زیر، نمونه ای نامطلوب از فیلترینگِ یک Query را نشان می دهد:// don&#39;t ever do thisSqlCommand cmd = new SqlCommand(&#34;select * from Customers where city = &#39;&#34; + inputCity + &#34;&#39;&#34;هرگز یک Query را با این روش طراحی نکنید! در کد بالا، متغیر وروردی یا inputCity، معمولا از یک کنترلِ TextBox بر روی Windows form یا Web Page بازیابی می گردد. هر چیزی که درونِ این TextBox قرار گیرد، در متغیرِ inputCity وارد شده و به رشته ی SQL مذکور اضافه می گردد. چنین موقعیتی، این امکان را برای هکرها فراهم می کند که رشته ی مورد نظر را با هرگونه رشته ی مخرب دیگری جایگزین نماید. در بدترین حالت، ممکن است کنترلِ کامل کامپیوتر خود را از دست بدهید.به جای اینکه یک رشته را به صورت dynamic طراحی کنید، از پارامترها بهره بگیرید. با هر چیزی که درون پارامتر قرار گیرد، به عنوان یک دیتا فیلد (Field data) رفتار خواهد شد، نه به عنوان بخشی از دستورِ SQL. این کار موجب امن تر شدنِ Application می گردد.استفاده از Query هایی که شامل پارامتر می باشند (Parameterized Queries)، یک پروسه ی سه مرحله ای می باشد:ایجاد رشته ی SqlCommand با استفاده از پارامترهاتعریفِ یک Object SqlParameter با تخصیصِ مقادیرِ مناسب و مطلوبتخصیصِ SqlParameter Object به Parameter Property های مربوط به Object SqlCommandبخش های بعدی شما را مرحله به مرحله در طول این فرآیند به پیش می برند.ارسال پارامتر به شی SqlCommandبرای ارسال پارامتر همراه با Query های SQL، اول باید متن دستور اجرایی را به کمک ویژگی CommandText تنظیم نمایید که حاوی پارامترهای موقتی Parameter Placeholder)) باشد. زمانی که SqlCommand اجرا می شود، این پارامترهای موقتی با مقادیرِ واقعی جایگزین می شوند. روش درست نمایشِ (syntax)یک پارامتر به این صورت است که از نمادِ پیشوندیِ &#34;@&#34; قبل از نامِ پارامتر استفاده نماییم. کد زیر این نحوه ی نام گذاری را نشان می دهد:// 1. declare command object with parameterSqlCommand cmd = new SqlCommand(&#34;select * from Customers where city = @City&#34;, conn);اولین آرگومان در Constructor (سازنده ی) شی SqlCommand در کد بالا، در بر دارنده ی یک تعریفِ پارامتری به صورتِ @City می باشد. در این مثال تنها از یک پارامتر استفاده شده است، اما زمانی که بخواهیم Query را اختصاصی نماییم، می توان از هر تعداد پارامتر بهره گرفت. هر پارامتر با یک شی SqlParameter که باید برای شی SqlCommand اختصاص داده شود، تطابق می یابد.تعریفِ شی SqlParameter https://www.namasha.com/v/hEaRNvqO آموزش سي شارپبه عنوانِ هدفِ شی SqlParameter ، هر پارامتر باید در دستورِ SQL تعریف شده باشد. کد شما باید یک نمونه از SqlParameter را برای هر پارامترِ موجود در شی SqlCommand تعریف نماید. کد پایین یک پارامتر را برای پارامترِ @City که در بخش قبل به آن اشاره شد، تعریف می نماید.// 2. define parameters used in command objectSqlParameter param = new SqlParameter();param.ParameterName = &#34;@City&#34;param.Value = inputCity;دقت داشته باشید که ویژگی ParameterName از شی SqlParameter، باید دقیقا به صورتِ پارامتری نوشته شود که در CommandText استفاده شده است. همچنین باید مقدار خاصی را برای این پارامتر اختصاص داد. زمانی که شی SqlCommand اجرا می شود، این مقدار جایگزینِ پارامتر خواهد شد.ایجاد ارتباط بینِ اشیای SqlParameter و SqlCommandباید برای هر پارامترِ تعریف شده در شی SqlCommand، تعریفی برای شی SqlParameter ارایه داد. همچنین، با تخصیص نمونه ی SqlParameter به شی SqlCommand، این شی قادر به شناسایی این پارامتر خواهد بود. کد زیر چگونگی انجام این کار را نشان می دهد:// 3. add new parameter to command objectcmd.Parameters.Add(param);در کدِ بالا، نمونه ی SqlCommand عبارت است از یک آرگومان برای متدِ Add از ویژگی Parameters. همچنین، ضرورت دارد که برای هر پارامترِ تعریف شده در رشته ی فرمانِ SQL (SQL Command String)، یک SqlParameter منحصر به فرد را اضافه کنید.جمع بندیقبلا با چگونگیِ استفاده از اشیای SqlCommand و SqlDataReader آشنا شده اید. کدِ پایین یک برنامه ی در حال اجرا (working program) را نشان می دهد که از اشیای SqlParameter استفاده می کنند. بنابراین، از حالا به بعد تمامی مباحث برای شما آشنا خواهند بود مگر قسمت های جدیدی که در این مقاله ارایه شده اند:using System;using System.Data;using System.Data.SqlClient; class ParamDemo{    static void Main()    {        // conn and reader declared outside try        // block for visibility in finally block        SqlConnection conn = null;        SqlDataReader reader = null;        string inputCity = &#34;London&#34;         try        {            // instantiate and open connection            conn = new SqlConnection(&#34;Server=(local);DataBase=Northwind;Integrated Security=SSPI&#34;);            conn.Open();             // don&#39;t ever do this            // SqlCommand cmd = new SqlCommand(            // &#34;select * from Customers where city = &#39;&#34; + inputCity + &#34;&#39;&#34;            // 1. declare command object with parameter            SqlCommand cmd = new SqlCommand(&#34;select * from Customers where city = @City&#34;, conn);             // 2. define parameters used in command object            SqlParameter param = new SqlParameter();            param.ParameterName = &#34;@City&#34;            param.Value = inputCity;             // 3. add new parameter to command object            cmd.Parameters.Add(param);             // get data stream            reader = cmd.ExecuteReader();             // write each record            while (reader.Read())            {                Console.WriteLine(&#34;{0}, {1}&#34;, reader[&#34;CompanyName&#34;], reader[&#34;ContactName&#34;]);            }        }        finally        {            // close reader            if (reader != null)            {                reader.Close();            }             // close connection            if (conn != null)            {                conn.Close();            }        }    }}کد بالا رکوردهای مربوط به هر مشتری را که در لندن زندگی می کند، بازیابی می نماید. با به کار گیریِ پارامترها، این فرآیند ایمن تر خواهد بود. علاوه بر پارامترها، بقیه ی کدها شامل تکنیک هایی هستند که در بخش های قبلی آموخته اید.خلاصهبه منظورِ فیلتر نمودنِ Query ها با یک روشِ ایمن، باید از پارامترها استفاده نمود. پروسه ی بکارگیریِ پارامتر، شامل سه مرحله می باشد: تعریفِ پارامتر در رشته ی فرمانCommandText) (، تعریف شی SqlParameter با Property های (ویژگی های) اجرایی و کاربردی، و تخصیص شی SqlPararmeter به شی SqlCommand. هنگامی که شی SqlCommand اجرا می شود، مقادیری که به وسیله ی شی SqlParameter مشخص شده اند، جایگزینِ پارامترها می شوند.استفاده از رویه ذخیره شده (Stored Procedure in ADO.NET)یکی از مهم ترین روش های اجرای یک دستور در پایگاه های داده رایج در جهان، استفاده از Stored Procedure است. مزایای زیادی در این روش وجود دارد که شاید مهم ترین آن ها مدیریت و دسته بندی بهتر کدهای پایگاه داده در مقایسه با روش قبلی و همچنین سرعت اجرا و کارایی بالاتر است. در این بخش از آموزش کار با پایگاه داده در سی شارپ به این موضوع خواهیم پرداخت.استفاده از Stored Procedureاین درس چگونگی استفاده از Stored Procedure در کار با پایگاه داده نشان می دهد. اهداف این درس به شرح زیر می باشند:چگونگی تغییر SqlCommand Object به منظور استفاده از Stored Procedureچگونگیِ به کار گیریِ پارامترها توسط Stored Procedureمقدمهرویه Stored Procedure عبارت است از یک روتینِ از قبل تعریف شده و قابل استفاده ی مجدد(Reusable) که در یک پایگاه داده ذخیره شده است. Stored Procedure ها در SQL Server کامپایل شده و یک برنامه اجرایی (Execution Plan) بهینه برای آن ها ساخته می شود. این امر موجب می شود که استفاده از آنها کارآمدتر شود. بنابراین، به جای طراحیِ داینامیک Queryها، می توان از مزیت های اجرایی و قابلیتِ استفاده ی مجددِ Stored Procedure بهره مند شد. بخش های بعدی نشان خواهند داد که چگونه می توان اشیای SqlCommand را به منظورِ استفاده از Stored Procedure، اصلاح نمود.اجرای Stored Procedureعلاوه بر Command Textها (متن دستور)، SqlCommand برای اجرای Stored Procedure نیز مورد استفاده قرار می گیرد. برای این منظور، انجام دو کار ضرورت دارد: اول اینکه برای SqlCommand تعریف شود که کدام Stored Procedure را اجرا کند، و در گام بعدی به این شی اعلان شود که در حال اجرای Stored Procedure می باشد. این دو مرحله در کد زیر نشان داده شده اند:// 1. create a command object identifying// the stored procedureSqlCommand cmd  = new SqlCommand(&#34;Ten Most Expensive Products&#34;, conn); // 2. set the command object so it knows// to execute a stored procedurecmd.CommandType = CommandType.StoredProcedure;زمانی که SqlCommand Object در کد بالا در حال تعریف شدن است، اولین پارامتر برای “Ten Most Expensive Products” مقداردهی می گردد. این عبارت، نام Stored Procedure در پایگاه داده Northwind می باشد. دومین پارامتر، شی اتصال (Connection Object) است که مشابه SqlCommand Constructor بوده و برای اجرایِ رشته های Query مورد استفاده قرار می گیرد.پس از تنظیمِ CommandType Property برای مقادیرِ Stored Procedure، دومین فرمان (Command) به SqlCommand Object اعلان می کند که چه دستوری اجرا خواهد شد. اولینِ پارامتر به طور پیش فرض می فهمد که با SqlCommand Constructor به عنوان یک Query String رفتار کند. با مقداردهیِ CommandType برای Stored Procedure، SqlCommand Constructor اولین پارامتر را به عنوانِ یک Stored Procedure تفسیر و ترجمه خواهد کرد، نه به عنوان یک Command String.ارسال پارامتر به Stored Procedureآموزش سي شارپاستفاده از پارامترها برای Stored Procedure مشابه استفاده از آنها برای Query String Command ها می باشد. به کد پایین دقت کنید:// 1. create a command object identifying// the stored procedureSqlCommand cmd = new SqlCommand(&#34;CustOrderHist&#34;, conn); // 2. set the command object so it knows// to execute a stored procedurecmd.CommandType = CommandType.StoredProcedure; // 3. add parameter to command, which// will be passed to the stored procedurecmd.Parameters.Add(new SqlParameter(&#34;@CustomerID&#34;, custId));در کدِ بالا، Constructor یک Stored Procedure (که به صورت CustOrderHist نام گذاری شده است) را، به عنوان اولین پارامتر تعریف می کند. این Stored Procedure شامل یک پارامترِ تکی و مجزا به نامِ @CustomerID می باشد. بنابراین، باید با استفاده از یک شیSqlParameter ، این پارامتر را پر نمود. نام پارامتری که به عنوان اولین پارامتر به SqlParameter Constructor منتقل شده است، باید دقیقا مشابه پارامترِ Stored Procedure نوشته شود. سپس، همانند دیگر اشیای SqlCommand، این فرمان (Command) نیز اجرا می شود.مثال:کد موجود در لیست 1 دربردارنده ی مثالی است که به صورت جامع، چگونگی کار با Stored Procedure را نشان می دهد. متدهای جداگانه ای برای Stored Procedure هایی که دارای پارامتر هستند، و نیز Stored Procedure های فاقد پارامتر، ارایه شده است:using System;using System.Data;using System.Data.SqlClient; class StoredProcDemo{    static void Main()    {        StoredProcDemo spd = new StoredProcDemo();         // run a simple stored procedure        spd.RunStoredProc();         // run a stored procedure that takes a parameter        spd.RunStoredProcParams();    }     // run a simple stored procedure    public void RunStoredProc()    {        SqlConnection conn = null;        SqlDataReader rdr = null;        Console.WriteLine(&#34;\nTop 10 Most Expensive Products:\n&#34;);         try        {            // create and open a connection object            conn = new SqlConnection(&#34;Server=(local);DataBase=Northwind;Integrated Scurity=SSPI&#34;);            conn.Open();             // 1. create a command object identifying            // the stored procedure            SqlCommand cmd = new SqlCommand(&#34;Ten Most Expensive Products&#34;, conn);             // 2. set the command object so it knows            // to execute a stored procedure            cmd.CommandType = CommandType.StoredProcedure;             // execute the command            rdr = cmd.ExecuteReader();             // iterate through results, printing each to console            while (rdr.Read())            {                Console.WriteLine(&#34;Product: {0,-25} Price: ${1,6:####.00}&#34;, rdr[&#34;TenMostExpensiveProducts&#34;], rdr[&#34;UnitPrice&#34;]);            }        }        finally        {            if (conn != null)            {                conn.Close();            }            if (rdr != null)            {                rdr.Close();            }        }    }     // run a stored procedure that takes a parameter    public void RunStoredProcParams()    {        SqlConnection conn = null;        SqlDataReader rdr = null;         // typically obtained from user        // input, but we take a short cut        string custId = &#34;FURIB&#34;        Console.WriteLine(&#34;\nCustomer Order History:\n&#34;);         try        {            // create and open a connection object            conn = new SqlConnection(&#34;Server=(local);DataBase=Northwind;Integrated Security=SSPI&#34;);            conn.Open();             // 1. create a command object identifying            // the stored procedure            SqlCommand cmd = new SqlCommand(&#34;CustOrderHist&#34;, conn);             // 2. set the command object so it knows            // to execute a stored procedure            cmd.CommandType = CommandType.StoredProcedure;             // 3. add parameter to command, which            // will be passed to the stored procedure            cmd.Parameters.Add(new SqlParameter(&#34;@CustomerID&#34;, custId));             // execute the command            rdr = cmd.ExecuteReader();             // iterate through results, printing each to console            while (rdr.Read())            {                Console.WriteLine(&#34;Product: {0,-35} Total: {1,2}&#34;,                    rdr[&#34;ProductName&#34;],                              rdr[&#34;Total&#34;]);            }        }        finally        {            if (conn != null)            {                conn.Close();            }            if (rdr != null)            {                rdr.Close();            }        }    }}متدِ RunStoredPro در لیست دستور 1، یک Stored Procedure را به سادگی اجرا کرده و نتایج را برای کنسول (Console) چاپ می کند. در متدِ RunStoredProcParams در کد بالا، Stored Procedure مورد استفاده تنها دارای یک پارامتر می باشد. این امر بیانگر این است که در استفاده از پارامترها، بین Query String و یا Stored Procedure هیچ تفاوتی وجود ندارد.خلاصهبرای اجرای Stored Procedure، نامِ Stored Procedure در اولین پارامترِ SqlCommand Constructor مشخص می شود؛ سپس، CommandType برابر StoredProcedure مقدار دهی می گردد. همچنین می توان با استفاده از SqlParameter Object، پارامترها را به یک Stored Procedure ارسال نمود. همین کار را می توان برای اشیای SqlCommand که متن دستور SQL را اجرا می کنند، اعمال نمود. هر بار که شی SqlCommand ساخته می شود، از آن می توان مانند هر شی SqlCommand دیگری استفاده نمود.پايان قسمت 14 آموزش سي شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Thu, 07 May 2020 19:41:14 +0430</pubDate></item><item><title>آموزش جاوا-آموزش مقادیر Boolean و Switch در java</title><link>https://virgool.ir/@p.kalantar.n/آموزش-جاوا-آموزش-مقادیر-boolean-و-switch-در-java-akoklluqn5oq</link><description>سلام با قسمت 7 آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با if در  جاوا آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآموزش مقادیر Booleanمقدار Boolean مقداری با دو انتخاب می باشد: true یا false، yes یا no ، 1 یا 0. در جاوا نوعی متغیر برای مقادیر Boolean وجود دارد:boolean user = true;بنابراین به جای تایپ کردن int یا double یا string، فقط کافیست Boolean تایپ کنید (با b کوچک). پس از نام متغیر خود می توانید یک مقدار true یا false اختصاص دهید. دقت کنید که اپراتور مربوط به اختصاص دادن یک علامت تساوی ( = ) می باشد. اگر می خواهید بررسی کنید که یک متغیر مقداری از چیزی را دارد بخ دو علامت تساوی ( = =) احتیاج دارید.این کد ساده را امتحان کنید:boolean user = true;if ( user == true) {System.out.println(&#34;it&#39;s true&#34;);}else {System.out.println(&#34;it&#39;s false&#34;);}بنابراین اولیت عبارت IF متغیر یوزر را بررسی می کند، اگر یک مقدار true داشته باشد. بخش دیگر false بودن آن را بررسی می کند. نیازی به عبارت &#34;else if ( user = = false)&#34; ندارید. در انتها اگر اگر چیزی true نباشد پس false می باشد. بنابراین می توانید از بخش دیگر استفاده کنید: تنها دو انتخاب با مقادیر Boolean وجود دارد.تنها اپراتور شرطی ما در لیست اپراتور NOT می باشد. شما می توانید از این اپراتور با مقادیر Boolean استفاده کنید. نگاهی به کد زیر داشته باشید:boolean user = true;if ( !user ) {System.out.println(&#34;it&#39;s flase&#34;);}else {System.out.println(&#34;it&#39;s true&#34;);}این کد تقریبا مانند دیگر کدهای Boolean می باشد، به جز خط زیر:if ( !user ) {این بار قبل از متغیر یوزر اپراتور NOT را داریم. اپراتور NOT یک علامت تعجب ( ! ) می باشد و قبل از متغیری قرار می گیرد که سعی در امتحان کردن آن دارید. این اپراتور negation را امتحان می کند که به معنای امتحان کردن متضاد مقدار حقیقی می باشد. از آنجایی که متغیر یوزر بر روی true تنظیم شده است، !user مقادیر false را امتحان خواهد کرد. اگر یوزر بر روی false تنظیم شده بود، !user مقادیر true را امتحان می کرد. اینطور فکر کنید: اگر چیزی true نیست پس چه می تواند باشد؟ یا اگر false نیست پس چیست؟آموزش Switch در جاواروش دیگر برای کنترل جریان برنامه های شما switch statement می باشد. یک switch statement به شما گزینه ی تست دامنه ای از مقادیر را برای متغیرهایتان ارائه می دهد. این عبارت می تواند به جای عبارت بلند و پیچیده ی if … else if استفاده شود. ساختر عبارت switch مانند زیر می باشد:switch ( variable_to_test ) { case value: code_here;break;case value: code_here;break;default:values_not_caught_above;}بنابراین شما با لغت switch شروع کرده اید که با یک جفت آکولاد دنبال می شود. تمام دیگر بخش های این عبارت در بین آکولادها قرار می گیرند. متغیری که می خواهید چک کنید بین آکولادهای switch قرار می گیرد. بنابراین شما یک جفت آکولاد دارید. بخش های دیگر عبارت switch نیز بین دو آکولاد قرار می گیرد. برای هر مقداری که می خواهید چک کنید نیاز به لغت case دارید. سپس مقداری را دارید که قصد بررسی آن را دارید:مفهوم case value: آموزش جاواپس از case value: دو نقطه قرار می گیرد. سپس اگر مقدار هماهنگ باشد، آن چیزی را قرار می دهید که تمایل دارید اتفاق بیفتد. این کد شماست که می خواهید اجرا شود. برای گریز از هر مورد در عبارت switch، لغت break لازم است.مقدار پیش فرض در انتها انتخابی می باشد. اگر مقادیر دیگری وجود دارند که می توانند در متغیر شما قرار بگیرند اما شما برای جای دیگری در عبارت switch امتحان نکرده اید، این مقادیر می تواننید شامل شوند.اگر همه ی آن گیج کننده می با شد در اینجا کد دیگری را مشاهده می کنید. می توانید برای این یا یک پروژه ی جدید ایجاد کنید و یا اینکه فقط روی کدی که دارید کامنت بدهید. یک راه سریع برای کامنت گذاشتن بر روی کد در NetBeans از نوار ابزار در بالا می باشد. ابتدا کدی را که می خواهید کامنت بگذارید مشخص کنید. سپس روی آیکن کامنت کلیک کنید:اما در اینجا کد آن را مشاهده می کنید:اولین کاری که کد انجام می دهد تنظیم مقداری برای امتحان کردن می باشد. مجددا ما یک متغیر صحیح را تنظیم کرده و آن را user می نامیم. مقدار را بر روی 18 تنظیم کرده ایم. عبارت switch متغیر یوزر را چک کرده و آنچه در آن است را مشاهده خواهد کرد. سپس از طریق هر یک از عبارات مورد وارد خواهد شد. وقتی موردی را پیدا می کند که هماهنگ می باشد، متوقف خواهد شد و کد را برای آن مورد اجرا خواهد کرد. سپس از عبارت switch گریز خواهد داشت.برنامه را امتحان کنید. مقادیر مختلفی برای متغیر یوزر وارد کرده و نتیجه را مشاهده کنید.متاسفانه نمی توانید برای دامنه ای از مقادیر بعد از مورد امتحان کنید و تنها برای یک مقدار میسر می باشد. بنابراین نمی توانید این کار را انجام دهید:case (user &lt;= 18):اما این کار را می توانید انجام دهید:case 1:case 2:case 3:case 4:بنابراین خط بالا دامنه ی مقادیر را از 1 تا 4 تست می کند. اما شما باید هر مقدار را &#34;spell out&#34; کنید. ( دقت داشته باشید که همه ی موردها و colon ها ( دو نقطه) کجا قرار می گیرند.)در اتمام این بخش در مورد منطق شرطی، تمرین های زیر را امتحان کنید:برنامه ای بنویسید که ورودی یوزر را از console قبول می کند. برنامه ها باید یک عدد گرفته و سپس محدوده های سنی زیر را امتحان کنید: 0 تا 10، 11 تا 20، 21 تا 30، 30 و بیشتر. یک پیغام در پنجره ی Output به فرمت زیر نمایش دهید:user_age + &#34; is between 21 and 30&#34;بنابراین اگر یوزر 27 را به عنوان سن وارد کند، پنجره ی Output مانند زیر خواهد بود:اگر یوزر 30 یا بیشتر از 30 باشد، فقط می توانید پیغام زیر را نمایش دهید:&#34;Your are 30 or over&#34;کمک برای این تمرین:برای دریافت مقادیر رشته از یوزر، این کار را انجام دادید:String age = user_input.next( );اما متد next( ) برای رشته ها استفاده می شود. سنی که از یوزر دریافت می کنید باید یک عدد صحیح باشد، بنابراین نمی توانید از next( ) استفاده کنید.اگر می خواهید چک کنید که یک رشته مشابه رشته ی دیگر می باشد، می توانید از متودی به نام equals استفاده کنید.String user_name = &#34;Bill&#34;if ( user_name.equals( &#34;Bill&#34; ) ) {//DO SOMETHING HERE}در کد بالا یک متغیر String را تنظیم کرده و آن را user_name نامیده ایم. سپس مقدار &#34;Bill&#34; به آن اختصاص داده ایم. بین آکولادهای IF، مجددا نام متغیر داریم که با یک نقطه دنبال می شود. پس از این نقطه لغت &#34;equals&#34; قرار می گیرد. بین یک جفت آکولاد دیگر رشته ای را تایپ می کنید که سعی در امتحان آن دارید.نکته: در هنگام بررسی اگر یک رشته همانند رشته ی دیگر می باشد، این دو رشته باید دقیقا هماهنگ باشند. بنابراین &#34;Bill&#34; با &#34;bill&#34;متفاوت می باشد. مورد اول دارای B بزرگ و مورد دوم دارای b کوچک می باشد.برای این تمرین برنامه ای بنویسید که از یک یوزر می خواهد تا از بین چهار رنگ انتخاب کند: سیاه، سفید، قرمز یا آبی. بسته به رنگ انتخاب شده، از عبارت های IF … ELSE IF برای نمایش یکی از پیغام های زیراستفاده کنید:بلک BLACK &#34;شما باید یک Goth باشید.&#34; WHITE &#34;شما یک فرد پاک هستید.&#34; RED &#34; شما یک شخص سرگرم کننده و برون گرا هستید. &#34; BLUE &#34; شما طرفدار چلسی هستید، اینطور نیست؟ &#34;وقتی برنامه ی شما به پایان می رسد، پنجره ی Output باید شبیه به تصویر زیر باشد:پایان قسمت 7 آموزش جاوااین آموزش ادامه دارد</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Wed, 06 May 2020 18:54:16 +0430</pubDate></item><item><title>آموزش سی شارپ-کار با داده به صورت آفلاین</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-کار-با-داده-به-صورت-آفلاین-huyvabfxykwi</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت 13 در خدمت شما عزیزان هستیم, در قسمت قبلی با خواندن داده از SQL Server در C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.لينك قسمت اول : آموزش #Cدر دروس قبلی آموزش پایگاه داده در سی شارپ، با اصول کار با پایگاه داده و عملیات پایه روی داده ها آشنا شدید. حال می خواهیم به روشی دیگر برای کار با داده ها بپردازیم که کاربردهای فراوانی داشته و بسیاری از مواقع کارایی و بازدهی بالاتری نسبت به روش های معمول دیگر دارد. https://www.aparat.com/v/s6AOp کار با داده به صورت آفلاین (Disconnected) با DataSet و SqlDataReaderدر این درس، چگونگی کار با داده های آفلاین با استفاده از اشیای DataSet و SqlDataReader را توضیح خواهیم داد. اهداف این درس به شرح زیر می باشند:درکِ ضرورتِ وجود داده های آفلاینمواردِ استفاده از DataSet&#39;استفاده از SqlDataReader برای به روز رسانی و بازیابیِ داده هامقدمه https://www.aparat.com/v/TUB6L در درس 11 به طور مفصل چگونگی ارتباط و تعامل با یک Data Source با استفاده از شی SqlCommand توضیح داده شد. در درس 12 نیز آموختیم که چگونه داده ها را با به کارگیری شی SqlDataReader به سرعت بخوانیم. در این درس خواهیم آموخت که چگونه با استفاده از شی DataSet و شی SqlDataAdapter، ارتباطی بین SqlConnection و SqlDataReader برقرار نماییم.دیتاست DataSet یک منبع داده ایِ مقیم در حافظه است که می تواند جداول فراوانی را در خود جای دهد. DataSet ها صرفا نگهدارنده ی داده ها می باشند و هیچگونه تعاملی با منبع داده (Data Source) ندارند. از طرفی، SqlDataAdapter اتصال با منبع داده (Data Source) را مدیریت می کند و رفتارهایِ آفلاین را به ما ارایه می دهد. شی SqlDataAdapter تنها زمانی که نیاز باشد، اتصال (Connection) را برقرار نموده و به محضِ اتمام کار خود، آن را قطع می نماید. برای مثال، زمانی که SqlDataAdapter یک DataSet را از داده ها پر می کند، SqlDataAdapter وظایف زیر را انجام می دهد:باز کردن اتصال(Connection)بازیابیِ داده ها به DataSetبستنِ اتصال(Connection)دیتا SqlDataAdapter همچنین با توجه به تغییراتِ DataSet، عملیات زیر را به هنگام به روزرسانیِ داده ها انجام می دهد:باز کردن اتصال(Connection)نوشتن تغییرات از DataSet به منبع دادهبستن اتصال(Connection)بین عملیاتِ Fill و Update، اتصال های منبع داده بسته شده و شما می توانید آزادانه و در صورت نیاز، داده ها را با DataSet بخوانید و یا بنویسید. اینها مکانیزم های کار با داده های آفلاین می باشند. به دلیل اینکه تنها در صورت نیاز اتصال(Connection) برای اپلیکیشن ها برقرار می شود، بنابراین عملیات ساده و انعطاف پذیر می شود.سناریوهای زیر لزوم کار با داده های آفلاین را نشان می دهند: افراد بدون اتصال شبکه به فعالیت خود ادامه می دهند و این امر موجب انعطاف پذیری بیشتر وب سایت ها می شود. فروشنده ای را در نظر بگیرید که در طول سفر خود نیازمند دسترسی به داده های مشتریان خود می باشد. در ابتدای روز، این فروشنده باید برای دستیابی به آخرین اطلاعاتِ در دسترس، با پایگاه داده اصلی همگام سازی نماید. ممکن است در طول روز اطلاعات موجود و مربوط به مشتریان را تغییر دهد، یا اینکه مشتریان جدید را به لیست خود اضافه کند، و یا ترتیب های جدید را وارد نمایند. به دلیل اینکه وی دارای یک پایگاه مشتری بوده که امکان دسترسی به آن برای بقیه امکان پذیر نمی باشد، این می تواند یک فرایند مطلوب باشد. در پایان روز، فروشنده به شبکه متصل شده و برای پروسه ی شبانه، تغییرات را به روز رسانی می نماید.سناریوی بعدی عبارت است از ایجاد قابلیت کار و سادگی بیشتر وب سایت. با وجود SqlDataAdapter، مجبورید هر زمان که یک پیج را نمایش می دهید، برای دستیابی به رکوردها به پایگاه داده برگردید. این کار نیازمندِ یک اتصال (Connection) جدید به هنگامِ بارگذاریِ هر صفحه می باشد که با بالا رفتن تعداد کاربران، موجب آسیب رسیدن به Scalability (مقیاس پذیری) می شود. یک راه برای ممانعت از این آسیب، استفاده از DataSet ی می باشد که قبلا به روز رسانی شده و در cache ذخیره شده است. هر درخواستی برای صفحه، در صورتِ عدمِ وجود، cache را جست جو کرده و داده ها را بارگذاری می کند؛ و یا اینکه صرفا داده ها را از cache بیرون کشیده و آن ها را نمایش می دهد. این کار موجب می شود که نیازی به مراجعه به پایگاه داده نبوده، و کل عملیات را کارآمدتر می نماید.آموزش سی شارپموارد استثناء برای سناریوهای بالا شامل موقعیت هایی می شوند که در صدد هستید داده ها را به روز رسانی نمایید. سپس بسته به اینکه در استراتژی شما چگونه از داده ها استفاده می شود، باید تصمیم گیری کنید. زمانی که اطلاعات اصولا تنها خواندنی (read only) می باشند، از داده های آفلاین استفاده نمایید. موقعیت های دیگر، از قبیل استفاده از شی SqlCommand برای به روز رسانی سریع، را در نظر بگیرید که در این سناریوها نیازهای شما مستلزم فرآیندهای پویاتری می باشند. همچنین، اگر حجم داده به اندازه ای بزرگ است که نگهداری آن در حافظه عملا کاری غیر عملی است، برای داده های فقط خواندنی (read only) به شی SqlDataReader نیاز خواهید داشت. در واقع، استثنائاتِ فراوانی وجود دارد اما نیرویِ هدایت کننده ی اصلی عبارت است از شناخت نیازهای اپلیکیشن که بر چگونگی طراحیتان تاثیرگذار خواهد بود.ایجاد شی DataSetنکته ی خاصی درباره ی نمونه سازیِ یک شی DataSet وجود ندارد. صرفا درست مانند هر شی دیگری، یک نمونه ی جدید را ایجاد می کنید.DataSet dsCustomers = new DataSet();ساختارِ DataSet نیازمندِ هیچگونه پارامتری نمی باشد. با این وجود، اگر در صدد تبدیل موازی رشته های کد شده (Serialized) داده ای به XML می باشید، یک بار اضافه وجود خواهد داشت که یک رشته را برای نام DataSet می پذیرد. در کد بالا DataSet خالی می باشد و برای بارگذاری آن به یک شی SqlDataAdapter نیاز است.ایجاد یک SqlDataAdapterدیتا SqlDataAdapter در بر دارنده ی دستورات SQL و شی اتصال (Connection Object) برای خواندن و نوشتن داده ها می باشد. این شی با دستورِ select مربوط برای بارگذاری داده ها و شی اتصال شروع می شود:SqlDataAdapter daCustomers = new SqlDataAdapter(&#34;select CustomerID, CompanyName                                                    from Customers&#34;, conn);کد بالا یک SqlDataAdapter جدید به نام daCustomers را ایجاد می کند. دستورِ select تعیین می کند که کدام داده ها در DataSet خوانده می شوند. تا اینجای کار شی اتصال (Connection Object) باید ایجاد شده باشد که هنوز باز نشده است. در طول فراخوانی متد های Fill و Update، این وظیفه ی SqlDataAdapter است که اتصال (Connection) را برقرار نماید.همانطور که قبلا اشاره شد، شی SqlDataAdapter شاملِ تمامیِ فرمان های مورد نیاز برای تعامل با منبع داده (Data Source) می باشد. کد بالا نشان می دهد که چگونه می توان دستور select را تعیین نمود، اما چیزی در مورد دستوراتِ insert، update، و delete ارایه نداده است. این دستورات، پس از نمونه سازی، به شی SqlDataAdapter اضافه شده اند.دو روش برای اضافه کردن دستورهای insert، update، و delete وجود دارد: از طریق Property های شی SqlDataAdapter و یا از طریق یک شی SqlCommandBuilder. در این درس در صددیم که روش ساده ی اضافه کردن این دستورها توسط شی SqlCommandBuilder را توضیح دهیم. در درس آتی، چگونگیِ به کار گیریِ ویژگی های SqlDataAdapter را بحث خواهیم نمود و نشان می دهیم که این شی، با وجود اینکه کار بیشتری را می طلبد، اما توانمندی های افزون تری در مقابل شی SqlCommandBuilder برای شما فراهم می آورد. در کد زیر، چگونگیِ افزودن فرمان توسط SqlCommandBuilder به شی SqlDataAdapter نشان داده شده است:SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daCustomers);&#xA;آموزش سی شارپتوجه داشته باشید که در کد بالا، به سازنده شی SqlCommandBuilder آرگومان daCustomers ارسال شده است. این فرایند به SqlCommandBuilder می گوید که شی SqlDataAdapter چه دستوراتی را باید اضافه نماید. شی SqlCommandBuilder دستورِ select را، به ویژه زمانی که SqlDataAdapter نمونه سازی شده باشد، می خواند و همچنین فرمان های insert، update، و delete را استنباط کرده، و به ترتیب دستورهای جدید را برای Property های (ویژگی های) Insert، Update، و Delete تخصیص می دهد.همانگونه که قبلا اشاره شد، SqlCommandBuilder دارای محدودیت هایی می باشد. زمانی که یک دستور ساده ی select را بر روی یک جدول مجزا انجام می دهید، این شی به کار گرفته می شود. با این وجود، زمانی که نیاز است دو یا چند جدول را join نماییم، و یا زمانی که بخواهید یک پروسه ی ذخیره شده را انجام دهید، این شی کارایی نخواهد داشت. در درس های آینده در رابطه با این سناریوها، توضیحاتی ارایه خواهد شد.پر کردنِ DataSetزمانی که یک DataSet و نمونه هایی از SqlDataAdapter را در اختیار دارید، باید DataSet را پر(fill) نمود. در کد زیر، با استفاده از متدِ Fill مربوط به SqlDataAdapter، چگونگیِ انجام این کار نشان داده شده است:daCustomers.Fill(dsCustomers, &#34;Customers&#34;);متدِ Fill در کد بالا، در بردارنده ی دو پارامتر است: یک DataSet و نامِ جدول. قبل از اقدام به پر نمودنِ DataSet توسط داده ها، می توان آن را نمونه سازی کرد. دومین پارامتر، نام جدولی است که قرار است در DataSet ساخته شود. می توان جدول را با هرچیزی که تمایل داشت، نامگذاری نمود. هدف این آپشن این است که در آینده می توان یک اسم معنادار برای جدول برگزید. معمولا نامی را برای این جدول انتخاب می کنیم که هم نام با جدول پایگاه داده باشد. با این حال، اگر دستورِ select مربوط به SqlDataAdapter در بر دارنده ی یک join باشد، مجبور خواهید بود که اسم معنادار دیگری را برای آن برگزینید.متدِ Fill دارای یک ویرایش (overload) دیگر است که تنها برای DataSet، یک پارامتر را بر می گزیند. در این صورت، جدولِ ایجاد شده دارای یک اسمِ قراردادی به صورتِ “Table1” خواهد بود. شماره ی جدول برای هر جدول جدیدی که به DataSet اضافه می شود، به ترتیب بالاتر خواهد رفت (Table2, Table3, Table4,…).استفاده از DataSetدیتا DataSet هم با ASP.NET و هم با اشکالِ ویندوزِ DataGrid ترکیب می شود. در کد زیر، DataSet به DataGrid تخصیص داده شده است:dgCustomers.DataSource = dsCustomers;dgCustomers.DataMember = &#34;Customers&#34;اولین کاری که در کد بالا انجام می دهیم این است که DataSet را به ویژگی DataSource در DataGrid، اختصاص دهیم. این کار این امکان را برای DataGrid فراهم می آورد که بداند دارای یک شی برای اتصال است. با این وجود، علامتِ &#34;+&#34; را در GUI دریافت خواهید کرد، چراکه DataSet می تواند جداول متعددی را در بر داشته باشد. در اختیار داشتنِ این تعداد جدول موجب می گردد که بتوانید تمامیِ جداولِ موجود را بسط دهید. برای تعیین اینکه دقیقا از کدام جدول باید استفاده نمود، ویژگیDataMember را برای مشخص کردنِ نامِ جدول مورد نظر، مقداردهی کنید. در مثال ذکر شده، جدول را با عنوانِ Customers نام گذاری کردیم که دقیقا مشابه نامی است که به عنوان دومین پارامتر برای متدِ Fill در SqlDataAdapter استفاده شد. به همین دلیل است که بهتر است نام گذاری جدول با متدِ Fill باشد، چراکه موجب می شود که کدهای متوالی خواناتر باشند.انتقال تغییرات به پایگاه داده (Updating Changes)پس از این که تغییرات بر روی داده ها انجام گرفت، ممکن است بخواهید آن تغییرات را مجددا درون پایگاه داده برگردانید. به مبحث قبلی در بخش مقدمه ی این مقاله در بابِ راهنمای Updating مراجعه کنید. کد ذیل نشان می دهد که چگونه در شی SqlDataAdapter، از متدِ Update برای بازگردانیِ تغییرات به پایگاه داده، استفاده نماییم:daCustomers.Update(dsCustomers, &#34;Customers&#34;);در کد بالا، متدِ Update در نمونه ی SqlDataAdapter، که اساسا DataSet مربوط به dsCustomers را پر نموده است، فراخوانی می شود. دومین پارامتر در متدِ Update، مشخص می کند که کدام جدول از DataSet باید Update شود. این جدول حاویِ لیست رکوردهایی است که تغییر یافته اند. همچنین، ویژگی های Insert، Update، و Delete در SqlDataAdapter در بردارنده ی دستورهای SQL هستند که به منظورِ انجام تغییرات در پایگاه داده، مورد استفاده قرار گرفته اند.گردآوری مطالب این درستا کنون، اقداماتِ مورد نیاز برای پیاده سازیِ مدیریتِ داده های آفلاین را فرا گرفتید. آنچه که بیشترین اهمیت را دارد مشاهده ی تمام این پیاده سازی ها در یک برنامه می باشد. برنامه زیر نشان می دهد که چگونه کد مورد استفاده در تمامیِ بخش های پیشین، در راستای اهداف این درس، ساده شده است:using System;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Windows.Forms; class DisconnectedDataform : Form{    private SqlConnection  conn;    private SqlDataAdapter daCustomers;    private DataSet  dsCustomers;    private DataGrid dgCustomers;    private const string tableName = &#34;Customers&#34;     // initialize form with DataGrid and Button    public DisconnectedDataform()    {        // fill dataset        Initdata();         // set up datagrid        dgCustomers = new DataGrid();        dgCustomers.Location = new Point(5, 5);        dgCustomers.Size = new Size(this.ClientRectangle.Size.Width - 10,                                   this.ClientRectangle.Height - 50);        dgCustomers.DataSource = dsCustomers;        dgCustomers.DataMember = tableName;         // create update button        Button btnUpdate = new Button();        btnUpdate.Text = &#34;Update&#34;        btnUpdate.Location = new Point(                this.ClientRectangle.Width/2 - btnUpdate.Width/2,                this.ClientRectangle.Height - (btnUpdate.Height + 10));        btnUpdate.Click += new EventHandler(btnUpdateClicked);         // make sure controls appear on form        Controls.AddRange(new Control[] { dgCustomers, btnUpdate });    }    // set up ADO.NET objects    public void Initdata()    {        // instantiate the connection        conn = new SqlConnection(&#34;Server=(local);                                DataBase=Northwind;                                Integrated Security=SSPI&#34;);         // 1. instantiate a new DataSet        dsCustomers = new DataSet();         // 2. init SqlDataAdapter with select command and connection        daCustomers = new SqlDataAdapter(&#34;select CustomerID, CompanyName                                            from Customers&#34;, conn);         // 3. fill in insert, update, and delete commands        SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daCustomers);         // 4. fill the dataset        daCustomers.Fill(dsCustomers, tableName);    }     // Update button was clicked    public void btnUpdateClicked(object sender, EventArgs e)    {        // write changes back to DataBase        daCustomers.Update(dsCustomers, tableName);    }     // start the Windows form    static void Main()    {        Application.Run(new DisconnectedDataForm());    } }متدِ InitData در این برنامه، شامل متدهای مورد نیاز برای مقداردهیِ SqlDataAdapter و DataSet می باشد. توجه داشته باشید که شی های داده ای در سطوح کلاسی تعریف شده اند، بنابراین می توانند در متدهای مختلفی مورد استفاده قرار گیرند. ویژگی DataSource از DataGrid در سازنده (Constructor) مقدار دهی می شود. هر زمان که کاربر بر روی گزینه ی update کلیک می کند، متدِ Update در btnUpdateCliked فراخوانی شده و تغییرات را به پایگاه داده برمی گرداند.خلاصهآموزش سی شارپدیتا DataSet در بر دارنده ی جدول های زیادی است و می تواند در حافظه و حافظه ی Reused نگهداری شود. شی SqlDataAdapter این امکان را فراهم می آورد که DataSet را پر نموده و تغییراتِ Updat شده را به پایگاه داده برگرداند. جای نگرانی برای باز کردن یا بستنِ SqlConnection نیست، چرا که SqlDataAdapter این کارها را به طور خودکار انجام می دهد. شی SqlCommandBuilder فرمان های insert، update، و delete را بر اساس دستورِ select در SqlDataAdapter پر می کند. از متد Fill برای پر کردن DataSet با داده، استفاده کرده و به منظورِ بازگرداندنِ تغییرات به پایگاه داده، از متدِ Update در SqlDataAdapter استفاده نمایید.پايان قسمت 13 آموزش سي شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Wed, 06 May 2020 18:33:25 +0430</pubDate></item><item><title>آموزش جاوا-آموزش if در java</title><link>https://virgool.ir/@p.kalantar.n/آموزش-جاوا-آموزش-if-در-java-fb6row929c6r</link><description>سلام با قسمت 6 آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با گزینه های پنل جاوا آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآموزش if در جاوابرنامه نویسی که در حال حاضر در حال انجام آن هستید یک برنامه نویسی پی در پی می باشد، به این معنا که کد از بالا به پایین اجرا می شود. این برنامه نویسی خطی می باشد که در آن هر خط با شروع از اولین خط و پایان آخرین خط از کد خوانده خواهد شد.اما همیشه تمایل ندارید برنامه هایتان اینگونه اجرا شوند. اغلب تمایل دارید کدها تنها تحت شرایط خاص اجرا شوند. برای مثال ممکن است بخواهید یک پیام در صورتی نمایش داده شود که یوزر کمتر از 18 سال سن داشته باشد و یا بالعکس پیام خاصی تنها در صورتی نمایش داده شود که یوزر بیشتر از 18 سال سن داشته باشد. شما می خواهید که جریان برنامه نویسی را برای خود کنترل کنید. این کار را می توانید با منطق شرطی انجام دهید.منطق شرطی اساسا در مورد لغت IF می باشد: اگر یوزر کمتر از 18 سال سن دارد این پیغام را نمایش دهید، اگر یوزر بیشتر از بیشتر از 18 سال سن دارد، این پیغام را نمایش بده. خوشبختانه استفاده از منطق شرطی در جاوا ساده می باشد. اجازه بدهید با عبارات IF آغاز کنیم.عبارات (IF (IF Statementsآموزش جاوادر برنامه نویسی که عبارت IF وجود دارد، اجرای یک مورد به جای مورد دیگر در هنگام اجرای کد بسیار متداول است. ساختار عبارت IF در جاوا به شکل زیر است:در برنامه نویسی که عبارت IF وجود دارد، اجرای یک مورد به جای مورد دیگر در هنگام اجرای کد بسیار متداول است. ساختار عبارت IF در جاوا به شکل زیر است:if ( Statement ) {} https://www.aparat.com/v/5WxMh عبارت را با لغت if (با حروف کوچک) و یک جفت آکولاد شروع می کنید. این کد، کدی می باشد که تنها زمانی می خواهید اجرا کنید که شرایط شما برقرار باشد. شرایط مربوط در داخل آکولادها قرار می گیرد:if ( user &lt; 18 ) {}این شرط به این معناست &#34; اگر یوزر کمتر از 18 سال سن دارد.&#34; اما به جای عبارت کمتر از نشان ( &lt; ) استفاده کرده ایم. اگر یوزر کمتر از 18 سال باشد، می خواهیم که برنامه ای اجرا شود، برای مثال پیغامی نمایش داده شود:if ( user &lt; 18 ) {//DISPLAY MESSAGE}اگر یوزر کمتر از 18 سال نباشد، پیغام بین آکولادها اجرا نخواهد شد و برنامه به مسیر خود، به سمت خطوط پایین کد، ادامه خواهد داد. هر آنچه در داخل آکولادها تایپ می کنید، تنها در صورتی اجرا خواهند شد که شرایط درست باشند . این شرایط بین آکولادها قرار می گیرند.قبل از امتحان این مورد، نماد تندنویسی دیگر &gt; می باشد، این نماد به معنای بزرگتر از می باشد. عبارت IF در بالا برای یوزرهای بزرگتر از 18 سال قابل اصلاح می باشد:if ( user &gt; 18 ) {//DISPLAY MESSAGE}تنها مورد جدید در این کد نماد &gt; می باشد. اکنون شرایط مربوط به یوزرهای بالاتر از 18 سال می باشد.اما شرایط برای یوزرهایی با سن دقیقا 18 سال درست نیست. اگر می خواهید شرایط در مورد افراد 18 سال یا بالای 18 سال درست باشد، می توانید از عبارت بزرگتر یا مساوی استفاده کنید. نمادها برای این شرایط بزرگتر از ( &gt; ) و مساوی با ( = ) می باشند.if ( user &gt;= 18 ) {//DISPLAY MESSAGE}آموزش جاواهمچنین می توانید این شرایط را برای کوچکتر یا مساوی با به روش زیر چک کنید:if ( user &lt;= 18 ) {//DISPLAY MESSAGE}کد بالا حاوی یک نماد ( &lt; ) می باشد که با علامت مساوی دنبال می شود.اجازه بدهید این مورد را در یک برنامه ی ساده امتحان کنیم.یک پروژه ی جدید را با کلیک بر روی File &gt; New Project از نوار منو در NetBeans آغاز کنید. شما می توانید پوشه و گروه خود را با هر نامی که می خواهید نام گذاری کنید. کد زیر را وارد کنید ( نام پوشه ی ما conditionallogic و گروه ما نیز IFStatements نامیده می شود.):یک متغیر صحیح را تنظیم کرده ایم و مقداری برابر 17 به آن اختصاص داده ایم. عبارت IF مورد &#34; کمتر از 18 سال&#34; را چک می کند. بنابراین پیغام بین آکولادها باید چاپ شود.برنامه ی خود را اجرا کرده و آن را بررسی کنید. (NetBeans معمولا برنامه را در متن بولد شده در پنجره ی Projects اجرا می کند و نه آن کدی که شما نمایش داده اید. برای اجرای کد در پنجره ی coding در قسمتی از کد کلیک راست کنید. از منوی ظاهر شده Run File را انتخاب کنید.) . تصویر زیر را در پنجره ی Output باید مشاهده کنید:اکنون مقدار را برای متغیر یوزر از 17 به 18 تغییر دهید. برنامه ی خود را مجددا اجرا کنید. باید تصویر زیر را مشاهده کنید:بنابراین برنامه به خوبی و بدون پیغام خطا اجرا خواهد شد. اینجاست که چیزی چاپ نمی شود. دلیل آن این است که کد پیغام بین آکولادهای عبارت IF وجود دارد و عبارت IF در حال بررسی مقادیر کمتر از 18 می باشد. اگر شرایط برقرار نباشد، جاوا آکولادها را کلا نادیده گرفته و به کار خود ادامه می دهد.تمرین: نماد &#34;کوچکتر از یا مساوی با&#34; را با جایگزین نماد کوچکتر از کنید. پیغام خود را طوری تغییر دهید تا با مورد &#34; یوزر 18 سال یا کمتر از 18 سال است&#34; هماهنگ باشد. برنامه ی خود را مجددا اجرا کنید. آیا پیغام را مشاهده می کنید؟ تمرین: مقدار یوزر را به 20 تغییر دهید. برنامه ی خود را مجددا اجرا کنید. آیا هنوز پیغام را مشاهده می کنید؟ شما می توانید بیشتر از یک عبارت IF در کد خود داشته باشید. کد زیر را امتحان کنید:این بار دو عبارت IF داریم. اولین عبارت مقادیر کمترا از یا برابر با 18 را بررسی می کند. دومین عبارت مقادیر بزرگتر از 18 را بررسی می کند. وقتی که کد با مقداری از 18 یا کمتر از 18 برای نتغیر یوزر اجرا می شود، خروجی مانند زیر می باشد:تغییر مقدار متغیر یوزر به 20 نیز نتیجه ی زیر را به دنبال خواهد داشت: بنابراین تنها یکی از عبارت های IF خروجی خط چاپی خواهد داشت و تمام آن بستگی به مقدار متغیر یوزر دارد. در قسمت بعدی با Conditional Logic ادامه خواهیم داد.پایان قسمت 6 آموزش جاوااین آموزش ادامه دارد</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Tue, 05 May 2020 15:59:39 +0430</pubDate></item><item><title>آموزش سی شارپ-خواندن داده از SQL Server</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-خواندن-داده-از-sql-server-uv05bcnaxrec</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت 12 در خدمت شما عزیزان هستیم, در قسمت قبلی با اجرای دستورات پایگاه داده در C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.لينك قسمت اول : آموزش #Cخواندن داده از SQL Server در سی شارپ (SqlDataReader)پس از بررسی اصول اولیه کار با پایگاه داده، در این بخش از آموزش پایگاه داده در سی شارپ می خواهیم به روش کار با شی SqlDataReader که تنها ویژه خواندن داده ها از پایگاه داده است بپردازیم.خواندن داده ها با استفاده از SqlDataReaderاین درس در مورد چگونگی خواندن داده ها با استفاده از شی SqlDataReader می باشد. اهداف کلی این درس به شرح زیر می باشند:موارد کاربری SqlDataReader چه می باشند؟داده ها چگونه به وسیله ی شی SqlDataReader خوانده می شوند؟دلایل ضرورت در بستن SqlDataReaderمقدمه https://www.aparat.com/v/s6AOp شی SqlDataReader نوعی شی است که برای خواندن داده ها در تمامی حالت های ممکن و موثر، مناسب می باشد. به هیچ عنوان نمی توان از این روش برای نوشتن داده ها استفاده نمود. داده ها را می توان در یک حالتِ متوالیِ forward only، از SqlDataReader خواند. هربار که داده ای خوانده می شود باید آن را در حافظه ذخیره کرد، چرا که پس از خواندن یک داده، قادر نخواهید بود که برگردید و مجددا آن را بخوانید.طراحیِ forward-only مربوط به SqlDataReader همان چیزی است که منجر به سریع شدنِ این شی شده است. این شیء فاقد هرگونه بار اضافه ی مرتبط با پیمایش یا بازنویسی داده ها به Data Source می باشد. بنابراین، اگر به دنبال سریع ترین متد بوده و خواستار خوانش یک باره گروهی از داده ها می باشید، SqlDataReader بهترین انتخاب می باشد.توجه کنید که در پاراگراف قبلی و به هنگام توضیح علتِ اینکه چرا باید از SqlDataReader استفاده نمود، از عبارتِ &#34;یک باره&#34; استفاده شد. مثل همه جا، اینجا نیز امکان رخدادِ خطا (exception) وجود دارد. در بسیاری از موارد، استفاده از یک DataSet ذخیره شده (Cached) بسیار موثر خواهد بود.ایجاد شی SqlDataReaderارایه نمونه ای از SqlDataReader اندکی متفاوت با روش نمونه سازیِ دیگر شی های ADO.NET می باشد. برای این کار باید شی SqlDataReader را تعریف نموده و خروجی متد ExecuteReader از نمونه شی SqlCommand را به آن انتساب داد. مثال زیر را ملاحظه کنید:SqlDataReader rdr = cmd.ExecuteReader();متد ExecuteReader مربوط به شی SqlCommand (یا cmd)، یک نمونه ی SqlDataReader را باز می گرداند. ایجاد یک SqlDataReader جدید به تنهایی کاری را برای شما از پیش نخواهد برد. همانطور که در درس های قبلی یاد گرفتید، شی SqlDataReader به منظور دستیابی به داده ها نیاز به شی اتصال (SqlConnection) و شی ویژه اجرای دستور روی پایگاه داده (SqlCommand) و دریافت نتیجه حاصله از این اجرا دارد. https://www.aparat.com/v/kLEIZ خواندن داده ها (Data Reading)درس های قبلی شامل کدهایی بودند که از یک SqlDataReader استفاده می کردند اما مبحث نیمه کاره ماند؛ بنابراین در صدد هستیم که بر روی موضوعاتِ خاص آن درس تمرکز نماییم. این درس بر مبنای مشاهدات قبلی بوده و چگونگی استفاده از SqlDataReader را توضیح نخواهد داد. همانطور که قبلا توضیح داده شد، SqlDataReader داده ها را از طریق جریانات ترتیبی (Sequential Streams) در دسترس ما قرار می دهد. برای خواندن این داده ها باید آنها را سطر به سطر از جدول بیرون بکشید. زمانی که یک سطر جدید خوانده می شود، سطر قبلی عملا در دسترس نخواهد بود. برای اینکه بتوان آن سطر را دوباره خواند، باید نمونه ای جدید از SqlDataReader را ایجاد نموده و داده ها را مجددا از طریق جریان داده ای (Data Stream) بازخوانی کرد.روش رایج خواندن داده ها از جریان داده ای (Data Stream) که توسط SqlDataReader بازگردانی شده این است که داده ها در هر سطر توسط یک حلقه یwhile تکرار شوند. کد زیر چگونگی انجام این کار را نشان می دهد:while (rdr.Read()){    // get the results of each column    string contact = (string)rdr[&#34;ContactName&#34;];    string company = (string)rdr[&#34;CompanyName&#34;];    string city    = (string)rdr[&#34;City&#34;];     // print out the results    Console.Write(&#34;{0,-25}&#34;, contact);    Console.Write(&#34;{0,-20}&#34;, city);    Console.Write(&#34;{0,-25}&#34;, company);     Console.WriteLine();}در کد بالا به فرمان Read بر روی SqlDataReader در حلقه ی while دقت کنید. مقدار بازگشتی Read از نوع داده بولی (bool) می باشد و تا زمانی که رکورد های بیشتری برای خواندن وجود داشته باشند، شرط حلقه صحیح خواهد بود. پس از اینکه آخرین رکورد از جریان داده ای (Data Stream ) خوانده شد، شرط حلقه صحیح نخواهد بود و اجرای برنامه به خط بعد از حلقه منتقل خواهد شد.در درس های گذشته، اولین ستون را با استفاده از شاخصِ SqlDataReader یا rdr[0]از سطر استخراج (extract) کردیم. می توان هر ستون از سطر را از طریق یک شاخصِ عددی مانند rdr[0] استخراج نمود، اما چندان قابل خواندن نیست. مثال بالا از یک اندیس رشته ای (String Indexer) استفاده می کند که نامِ ستون از نتیجه Query می باشد. از آنجایی که اندیس های رشته ای بسیار خوانا تر می باشند، تغییرات و نگهداری کد را راحت تر می کنند.بدون در نظر گرفتن نوع پارامترِ اندیس ، یک اندیس SqlDataReader، می تواند گونه داده ای object را بازگرداند. به همین دلیل است که مثال بالا، نتایج را به شکل یک رشته در می آورد. هربار که مقادیر استخراج می شوند، می توانید هر کاری که خواستید با آنها انجام دهید، کارهایی از قبیلِ چاپ آنها بر روی کنسول.جمع بندیهمواره به یاد داشته باشید که پس از اتمام کار SqlDataReader را ببندید، درست همانند بستنِ SqlConnection. کد دستیابی به داده ها را در یک بلوک کد try نگه داشته و عملیاتِ پایانی را در بلوک finally همانند زیر قرار دهید:try{    // data access code}finally{    // 3. close the reader    if (rdr != null)    {        rdr.Close();    }    // close the connection too}کد بالا SqlDataReader را چک می کند تا این اطمینان حاصل شود که این شی nullیا پوچ نمی باشد. پس از اینکه کد دانست که نمونه ی مناسبی از SqlDataReader وجود دارد، می تواند آنرا ببندد. مثال زیر به طور کلی، کد را برای قسمت های قبلی نشان می دهد.using System;using System.Data;using System.Data.SqlClient; namespace Lesson04{    class ReaderDemo    {        static void Main()        {            ReaderDemo rd = new ReaderDemo();            rd.SimpleRead();        }         public void SimpleRead()        {            // declare the SqlDataReader, which is used in            // both the try block and the finally block            SqlDataReader rdr = null;             // create a connection object            SqlConnection conn = new SqlConnection(&#34;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI&#34;);                         // create a command object            SqlCommand cmd  = new SqlCommand(                &#34;select * from Customers&#34;, conn);            try            {                // open the connection                conn.Open();                 // 1. get an instance of the SqlDataReader                rdr = cmd.ExecuteReader();                 // print a set of column headers                Console.WriteLine(&#34;Contact Name             City                Company Name&#34;);                Console.WriteLine(&#34;------------             ------------        ------------&#34;);                 // 2. print necessary columns of each record                while (rdr.Read())                {                    // get the results of each column                    string contact = (string)rdr[&#34;ContactName&#34;];                    string company = (string)rdr[&#34;CompanyName&#34;];                    string city    = (string)rdr[&#34;City&#34;];                     // print out the results                    Console.Write(&#34;{0,-25}&#34;, contact);                    Console.Write(&#34;{0,-20}&#34;, city);                    Console.Write(&#34;{0,-25}&#34;, company);                    Console.WriteLine();                }            }            finally            {                // 3. close the reader                if (rdr != null)                {                    rdr.Close();                }                // close the connection                if (conn != null)                {                    conn.Close();                }            }           }    }}خلاصهشی SqlDataReader این امکان را فراهم می آورد که داده ها در یک حالت سریع و رو به جلو (forward-only) خوانده شوند. داده ها از طریق خواندن هر سطر از جریان داده ای (Data Stream) خوانده می شوند. برای اطمینان از عدم اتلاف منابع سیستم، در پایان فرمان close در SqlDataReader را فراخوانی نمایید.پايان قسمت 12 آموزش سي شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Tue, 05 May 2020 14:10:10 +0430</pubDate></item><item><title>آموزش جاوا-آموزش تصویری Java</title><link>https://virgool.ir/@p.kalantar.n/آموزش-جاوا-آموزش-تصویری-java-pqwv12nutnuy</link><description>سلام با قسمت پنجم آموزش جاوا JAVA در خدمت شما عزیزان هستمدر قسمت قبل از آموزش تصویری برنامه نویسی جاوا با متغیر String و دریافت ورودی از کاربر آشنا شدیمحال با ادامه آموزش جاوا همراه باشید:لینک قسمت اول آموزش جاواآموزش گزینه های پنل جاواگروه موثر دیگری برای قبول ورودی یوزر و نمایش نتایج گروه JOptionPane (گزینه های پانل) می باشد. این گروه در کتابخانه ی javax.swing واقع شده است. گروه JOptionPane به شما اجازه می دهد تا جعبه های ورودی مانند تصویر داشته باشید:و جعبه های پیغامی نیز مانند تصویر زیر:اجازه بدهید کد خود را از the previous section تطبیق دهیم و چند گزینه ی پانل (option panes) داشته باشیم.اولین کاری که باید انجام دهید مراجعه به کتابخانه ی مورد نظر است.import javax.swing.JOptionPane;این به شما می گوید که ما قصد استفاده از گروه JOptionPane را داریم که در کتابخانه ی javax.swing واقع شده است.اگر تمایلی به تطبیق کد قبل ندارید، می توانید یک پروژه ی جدید برای این مورد آغاز کنید.(اکنون باید بدانید که چگونه یک پروژه ی جدید ایجاد کنید. فقط به یاد داشته باشید که نام گروه را از Main به نام دیگری تغییر دهید. ما قصد داریم که گروهی به نام InputBoxes داشته باشیم. نام پوشه ی ما userinput خواهد بود.)خط import را به پروژه ی جدید خود وارد کرده و پنجره ی کد شما باید مشابه تصویر زیر باشد:( علت وجود خطوط موجی این است که ما هنوز لز گروه JOptionPane استفاده نکرده ایم. زمانی که این کار را انجام دهیم این خطوط نیز محو خواهند شد. )برای به دست آوردن یک جعبه ی وردی که یوزر در آن تایپ کند، می توانید از متد showInputDialog مربوط به JOptionPane استفاده کنید. درست مانند آخرین بار، ورودی را مجددا در متغیر نام (first name) ذخیره خواهیم کرد. بنابراین خط زیر را به متد اصلی خود اضافه کنید:String first_name;first_name = JOptionPane.showInputDialog(&#34;First Name&#34;);به محض اینکه بعد از JOptionPane یک نقطه تایپ کنید، لیست زیر را مشاهده خواهید کرد:روی showInputDialog دابل کلیک کنید. بین آکولادهای showInputDialog، پیغامی را تایپ کنید که می خواهید در بالای تکست باکس نمایش داده شود. ما &#34;First name&#34; را تایپ کرده ایم. مانند تمام رشته ها لازم است که این عبارت در داخل علامت های نقل قول قرار بگیرد.کد زیر را اضافه کنید که پس از آن می توانیم نام خانوادگی یوزر را دریافت کنیم:String family_name;family_name = JOptionPane.showInputDialog(&#34;Family Name&#34;);این دو را به یکدیگر متصل کرده و متن نیز به آن اضافه کنید:String full_name;full_name = &#34;You are &#34; + first_name + &#34; &#34; + family_name;برای نمایش نتیجه در یک پیغام، مورد زیر را اضافه کنید:JOptionPane.showMessageDialog( null, full_name );این بار ما از لیست showMessageDialog را می خواهیم. بین آکولادها ابتدا لغت null را مشاهده می کنیم. این لغت، لغت کلیدی جاوا می باشد که این پیغام ارتباطی با هیچ مورد دیگری در برنامه ندارد. پس از میرگول (کاما) متنی است که می خواهیم در جعبه ی پیغام نمایش دهیم. کل کد شما باید مانند تصویر زیر باشد:آموزش جاوابه خط واقع در پایین کد دقت کنید:System.exit(0);همانطور که از نامش پیداست، اطمینان می دهد که برنامه خارج می شود. اما همچنین با حذف آبجکت های ایجاد شده از حافظه، آن را برای ما مرتب می سازد.اکنون کد خود را اجرا کنید. ( راه دیگری برای اجرای برنامه ی خود در NetBeans، کلیک راست کردن بر روی هر قسمتی از پنجره ی برنامه نویسی می باشد. از منوی ظاهر شده Run File را انتخاب کنید.)جعبه ی ورودی First Name را مشاهده خواهید کرد. چیزی در داخل آن تایپ کرده و سپس روی OK کلیک کنید:وقتی که جعبه ی ورودی Family Name ظاهر می شود، یک نام خانوادگی تایپ کرده و روی ok کلیک کنید:پس از کلیک کردن روی ok جعبه ی پیغام ظاهر خواهد شد:برای اتمام برنامه روی ok کلیک کنید.جعبه های Input و Message بیشتر نیز فرمت می شوند. مورد زیر را برای جعبه های Input خود امتحان کنید:showInputDialog(&#34;First Name&#34;, &#34;Enter Your First Name&#34;);showInputDialog(&#34;Family&#34;, &#34;Enter Your Family Name&#34;);برای جعبه های Messages خود مورد زیر را امتحان کنید (مورد شما باید روی یک خط قرار بگیرد.):showMessageDialog(null, full_name, &#34;Name&#34;, JOptionPane.INFORMATION_MESSAGE);به جای JOptionPane.INFORMATION_MESSAGE موارد زیر را امتحان کنید:ERROR_MESSAGEPLAIN_MESSAGEQUESTION_MESSAGEجعبه های Input فقط برای متن استفاده نمی شوند: آنها اعداد را نیز می پذیرند. برنامه ای بنویسید که یوزر را در دو برنامه،مساحت یک مستطیل و ارتفاع یک مستطیل، به جلو می برد. از یک جعبه ی پیغام برای محاسبه ی مساحت مستطیل استفاده کنید. ( به یاد داشته باشد که مستطیل حاصلضرب طول در عرض می باشد.) به هرحال برای این تمرین به کمک نیز نیاز خواهید داشت.آموزش جاواکمک مربوط به تمرین:شما باید از متغیر String برای به دست آوردن اعداد خود از یوزر استفاده کنید:String breadth;breadth = JOptionPane.showInputDialog(&#34;Rectangle Breadth&#34;);به هرحال نمی توانید دو رشته را با یکدیگر ضرب کنید. لازم است رشته ها را به اعداد صحیح تبدیل کنید. می توانید به شکل زیر یک رشته را به یک عدد صحیح تبدیل کنید:Integer.parseInt( string_to_convert )بنابراین ابتدا Integer را تایپ کرده و سپس یک نقطه تایپ کنید. بعد از آن parseInt( ) را تایپ کنید. بین آکولادهای parseInt، نام متغیری را تایپ کنید که سعی در تغییر آن دارید.یک متغیر int برای ناحیه تنظیم کنید. سپس می توانید روی همان خط ضرب کرده و اختصاص دهید؛int area = Integer.parseInt( string_one ) * Integer.parseInt( string_two);&#xA;برای جعبه ی پیغام از الحاق (concatenation) استفاده کنید:&#34;answer = &#34; + areaمی توانید از هر نماد MESSAGE دیگری برای جعبه ی پیغام خود استفاده کنید.اگر برای قاعده و ارتفاع مقادیر ممیزی شناور وارد کنید، برنامه اجرا نخواهد شد. چگونه این مشکل را حل می کنید؟وقتی که تمرین بالا را حل کنید، آیا واقعا Integer.parseInt می خواهید؟ فکر می کنید از چه موارد دیگری می توانید استفاده کنید؟در قسمت بعد عبارات IF را امتحان کنیم.پایان قسمت پنجم آموزش جاوااین آموزش ادامه دارد</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Mon, 04 May 2020 17:00:22 +0430</pubDate></item><item><title>آموزش سی شارپ-آموزش دستورات پایگاه داده</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-آموزش-دستورات-پایگاه-داده-as2cpskzjy0d</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت یازدهم در خدمت شما عزیزان هستیم, در قسمت قبلی با اتصال به SQL Server در C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.لينك قسمت اول : آموزش #Cاجرای دستورات پایگاه داده در سی شارپ (SqlCommand)همانطور که پیش از این در آموزش پایگاه داده در سی شارپ گفتیم برای اجرای دستورات پایگاه داده بایستی پس از اتصال به پایگاه داده دستور مربوطه را در قالب یک شی SqlCommand از طریق اتصال ایجاد شده توسط SqlConnection اجرا کنیم. در این بخش از آموزش ADO.NET در سی شارپ به بررسی روش انجام این کار خواهیم پرداخت.شی SqlCommand:این درس درباره ی SqlCommand object بوده و نشان می دهد که برای تبادل داده و تعامل با یک پایگاه داده چگونه از این شی استفاده می شود. اهداف این درس به شرح زیر می باشندشی Command چیست؟چگونه از متد ExecuteReader برای Query گرفتن از داده ها استفاده کنیم؟چگونه با استفاده از متد ExecuteNonQuery برای درج یا حذف داده ها استفاده کنیم؟چگونه از متد ExecuteScalar برای بازگرداندن یک مقدار واحد استفاده کنیم؟مقدمهشی SqlCommand به شما این امکان را می دهد تا شکل رفتار خود با پایگاه داده را مشخص نمایید. به عبارت دیگر مشخص کنید که چه نوع عملیاتی را می خواهید بر روی پایگاه داده انجام دهید. برای مثال، می توان عملیات delete، select، modify، و insert را بر روی رکوردهای داده در یک جدول پایگاه داده انجام داد. شی SqlCommand می تواند برای پشتیبانی از سناریوهای مدیریتِ داده هایی که در دسترس نیستند(disconnected data) مورد استفاده قرار گیرد، اما در این درس قصد بر این است که شی SqlCommand را به تنهایی مورد استفاده قرار دهیم. درس بعدی که در رابطه با SqlDataAdapter است، توضیح خواهد داد که چگونه یک Application را که از داده های Disconnected استفاده می کند، پیاده سازی نماییم. این درس همچنین چگونگی بازیابی یک مقدار واحد، مثل تعداد رکوردها در جدول را نشان می دهد. https://www.aparat.com/v/s6AOp ایجاد یک شی SqlCommandمشابه دیگر شی های سی شارپ، یک شی SqlCommand به صورت زیر، ساخته می شود:SqlCommand cmd = new SqlCommand(&#34;select CategoryName from Categories&#34;, conn);کد بالا برای شی های SqlCommandرایج می باشد. این کد یک آرگومان رشته ای (String Parameter ) را دریافت کرده که در بردارنده ی فرمانی است که در صدد اجرای آن بوده و نیز حاویِ اشاره گر (reference) به SqlConnection می باشد. SqlCommand دارای تعدادی نسخه ی Overload شده است که در طول این دوره آموزشی، عنوان خواهد شد.کوئری Query گرفتن از داده ها (Querying Data)به هنگام استفاده از SQL، با دستور select دسته ای از داده ها برای مشاهده بازیابی می گردند. برای تکمیل این کار با یک شی SqlCommand، از متد ExcecuteReader که شی SqlDataReader را بازمی گرداند، استفاده نمایید. در درس آینده SqlDataReader را بحث خواهیم کرد. مثال پایین چگونگی استفاده از شی SqlCommand برای دستیابی به شی SqlDataReader را نشان می دهد.// 1. Instantiate a new command with a query and connectionSqlCommand cmd = new SqlCommand (&#34;select CategoryName from Categories&#34;, conn); // 2. Call Execute reader to get query resultsSqlDataReader rdr = cmd.ExecuteReader();در مثال بالا یک نمونه از شی SqlCommand ساخته سپس &#34;متن دستور SQL&#34; و شی SqlConnection را به عنوان آرگومان به متد سازنده آن (Constructor) ارسال می کنیم. سپس با فراخوانی متد ExecuteReader از شی SqlCommand (که در بالا cmd نام گذاری کردیم) یک شی SqlDataReader به دست می آوریم.این کد بخشی از متد ReadData مربوط به لیست 1 است که در ادامه ی این مبحث و در بخش جمع بندی به آن خواهیم پرداخت.عملیات درج داده ها (Inserting Data)به منظور درج داده ها در پایگاه داده، از متدِ ExecuteNonQuery مربوط به شی SqlCommand استفاده نمایید. کد پیش رو نشان می دهد که چگونه داده ها را در یک پایگاه داده درج نماییم.// prepare command stringstring insertString = @&#34;insert into Categories                        (CategoryName, Description)                        Values                        (&#39;Miscellaneous&#39;, &#39;Whatever doesn&#39;&#39;t fit elsewhere&#39;)&#34; // 1. Instantiate a new command with a query and connectionSqlCommand cmd = new SqlCommand(insertString, conn); // 2. Call ExecuteNonQuery to send commandcmd.ExecuteNonQuery();روش نمونه سازی از SqlCommand اندکی با روشی که قبلا انجام دادیم تفاوت دارد، اما در اصل و پایه یکسان هستند. به جای استفاده از مقدار ثابت رشته ای Literal String)) به عنوان اولین آرگومان سازنده ی SqlCommand، از یک متغیر به نام InsertString استفاده می گردد. همان طور که در کد مشاهده می کنید، متغیر InsertString درست در بالای تعریف SqlCommand اعلان شده است.به دو عدد تک کوتیشن (&#34;) در متنِ Insert String در بالای کلمه ی “doesn”t” دقت نمایید. با استفاده از این کاراکتر اطمینان حاصل می کنیم که ستون های جدول پایگاه داده به طور صحیح با مقدار رشته ای مزبور پر می شود و هر گونه ابهام که ممکن است بر اثر استفاده از کوتیشن به وجود آمده باشد، برطرف می گردد.نکته ی دیگری که باید به آن اشاره کرده و توضیحی ارایه بدهیم این است که در کد بالا صراحتا نام ستون های Category و Description را از جدول Category ذکر (مشخص) کردیم. جدول Category یک فیلد Primary Key به نام CategoryID دارد. از آنجایی که خودِ SQL Server این فیلد را اضافه خواهد کرد، آن را در لیست لحاظ نکردیم. در صورت تلاش برای افزودن یک مقدار به فیلد Primary Key، مثل CategoryID، با خطا (Exception) مواجه خواهید شد.برای اجرای این فرمان، کافی است از متد ExecuteNonQuery بر روی نمونه ی SqlCommand، که cmd نام دارد، استفاده کنیم. این کد بخشی از متد Insert Data است که در بخش جمع بندی بررسی خواهیم نمود.متد ExecuteNonQuery برای به روز رسانی داده ها نیز استفاده می شود. کدهای زیر نشان می دهند که داده ها چگونه به روز رسانی می شوند:// prepare command stringstring updateString = @&#34;update Categories set                        CategoryName = &#39;Other&#39;                        where CategoryName = &#39;Miscellaneous&#39;&#34;  // 1. Instantiate a new command with command text onlySqlCommand cmd = new SqlCommand(updateString);  // 2. Set the Connection propertycmd.Connection = conn;  // 3. Call ExecuteNonQuery to send commandcmd.ExecuteNonQuery();مجددا، فرمان SQL را درون یک متغیر رشته ای (String Variable) قرار می دهیم، اما این بار از یک سازنده ی متفاوتِ SqlCommand استفاده می کنیم که تنها دستور را دریافت می کند. در گام دوم، شی ِconn را به ویژگی (property) مربوط به شی cmd تخصیص می دهیم. این کار را می توانستیم به وسیله ی تابع سازنده ای (Constructor) که برای دستور Insert استفاده شد به همراه دو پارامتر ورودی نیز انجام دهیم. این روش در واقع به این امر اشاره دارد که می توان یک شی Connection (اتصال به پایگاه داده) را که برای یک فرمان خاص تخصیص یافته، در هر زمانی تغییر داد.متد ExecuteNonQuery دستور یا عملیات Update را اجرا می کند. این کد بخشی از Update Data مربوط به لیست دستور 1 است که در بخش بعدی در مورد آن صحبت خواهیم کرد. https://www.aparat.com/v/ogjMA حذف داده ها (Deleting Data)با استفاده از متد ExecuteNonQuery می توان داده ها را حذف نیز نمود. مثال پایین نشان می دهد که چگونه می توان با استفاده از این متد، یک سطر (Record) را از پایگاه داده حذف نمود.// prepare command stringstring deleteString = @&#34;delete from Categories                        where CategoryName = &#39;Other&#39;&#34; // 1. Instantiate a new commandSqlCommand cmd = new SqlCommand(); // 2. Set the CommandText propertycmd.CommandText = deleteString; // 3. Set the Connection propertycmd.Connection = conn; // 4. Call ExecuteNonQuery to send commandcmd.ExecuteNonQuery();در مثال فوق از متد سازنده ی SqlCommand بدون ارسال پارامتر ورودی به آن، استفاده شده است. در عوض، Property یا خصوصیت های CommandText و Connection از شی SqlCommand را به صورت صریح مقداردهی (set) کرده است. همچنین می توان از هر کدام از دو حالت overload شده سازنده SqlCommand قبلی که برای فرمان Insert و یا به روز رسانی استفاده شده اند، با نتایج یکسانی استفاده نمود. این مساله نشان می دهد که می توان در هر زمانی هم متن فرمان(Command Text) و هم شی اتصال (Connection Object) را تغییر داد. متد Execute Non Query، فرمان را به پایگاه داده انتقال می دهد. این کد بخشی از متد DeleteData است که در بخش بعدی درباره ی آن صحبت خواهیم کرد.آموزش سی شارپبه دست آوردن مقادیر مجزا (Single Values)گاهی اوقات تمام آنچه که از پایگاه داده نیاز دارید یک مقدار واحد است که می تواند عبارت باشد از محاسبه (count)، جمع بندی(sum) ، میانگین (average)، و یا دیگر مقادیر معین شده در مجموعه ی داده ها (Data Set). برای نیل به این هدف، اجرای متد ExecuteReader و محاسبه ی نتایج در کد، شیوه ی کارآمدی نخواهد بود. بهترین انتخاب این است که به پایگاه داده اجازه داده شود این کار را انجام دهد و رقم مجزایی که نیاز دارید را برگرداند. مثال پایین نشان می دهد که چگونه می توان این کار را با متد ExecuteScalar انجام داد:// 1. Instantiate a new commandSqlCommand cmd = new SqlCommand(&#34;select count(*) from Categories&#34;, conn); // 2. Call ExecuteNonQuery to send commandint count = (int)cmd.ExecuteScalar();کوئری Query گرفتن از داده ها در سازنده ی SqlCommand، شمارشِ تمامی رکوردها از جدول دسته بندی (Category Table) را به دست می آورد. این Query تنها یک مقدار واحد را برمی گرداند. متد ExecuteScalar در گام دوم، این مقدار را باز می گرداند. از آنجایی که نوع خروجی ExecuteScalar گونه داده ای Object می باشد، از عبارت (int) پیش از آن برای تبدیل مقدار به مقدار عددی صحیح استفاده می گردد.جمع بندیدر بخش های قبلی، برای راحتی در نشان دادنِ تکنیک های کاربردی، بخش های کوچکی از کدها ارایه شد. برای مشاهده ی اینکه چگونه این کدها در یک برنامه ی کاربردی مورد استفاده قرار می گیرند، فراهم نمودن لیست کدهای کامل نیز مفید خواهد بود. در اینجا تمامی کدهای مورد استفاده در این مثال را به همراه درایوی در متد اصلی (Main method) برای تولید خروجی های شکل گرفته (formatted output)، نشان می دهد.using System;using System.Data;using System.Data.SqlClient; /// &lt;summary&gt;/// Demonstrates how to work with SqlCommand objects/// &lt;/summary&gt;class SqlCommandDemo{    SqlConnection conn;     public SqlCommandDemo()    {        // Instantiate the connection        conn = new SqlConnection(&#34;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI&#34;);    }     // call methods that demo SqlCommand capabilities    static void Main()    {        SqlCommandDemo scd = new SqlCommandDemo();        Console.WriteLine();        Console.WriteLine(&#34;Categories Before Insert&#34;);        Console.WriteLine(&#34;------------------------&#34;);         // use ExecuteReader method        scd.ReadData();         // use ExecuteNonQuery method for Insert        scd.Insertdata();         Console.WriteLine();        Console.WriteLine(&#34;Categories After Insert&#34;);         Console.WriteLine(&#34;------------------------------&#34;);        scd.ReadData();         // use ExecuteNonQuery method for Update        scd.UpdateData();        Console.WriteLine();        Console.WriteLine(&#34;Categories After Update&#34;);        Console.WriteLine(&#34;------------------------------&#34;);        scd.ReadData();         // use ExecuteNonQuery method for Delete        scd.DeleteData();        Console.WriteLine();        Console.WriteLine(&#34;Categories After Delete&#34;);        Console.WriteLine(&#34;------------------------------&#34;);        scd.ReadData();         // use ExecuteScalar method        int numberOfRecords = scd.GetNumberOfRecords();         Console.WriteLine();        Console.WriteLine(&#34;Number of Records: {0}&#34;, numberOfRecords);    }     /// &lt;summary&gt;    /// use ExecuteReader method    /// &lt;/summary&gt;    public void ReadData()    {        SqlDataReader rdr = null;         try        {            // Open the connection            conn.Open();             // 1. Instantiate a new command with a query and connection            SqlCommand cmd = new SqlCommand(&#34;select CategoryName from Categories&#34;, conn);             // 2. Call Execute reader to get query results            rdr = cmd.ExecuteReader();             // print the CategoryName of each record            while (rdr.Read())            {                Console.WriteLine(rdr[0]);            }        }        finally        {            // close the reader            if (rdr != null)            {                rdr.Close();            }             // Close the connection            if (conn != null)            {                conn.Close();            }        }    }     /// &lt;summary&gt;    /// use ExecuteNonQuery method for Insert    /// &lt;/summary&gt;    public void Insertdata()    {        try        {            // Open the connection            conn.Open();             // prepare command string            string insertString = @&#34;insert into Categories                                     (CategoryName, Description)                                     values (&#39;Miscellaneous&#39;, &#39;Whatever doesn&#39;&#39;t fit elsewhere&#39;)&#34;             // 1. Instantiate a new command with a query and connection            SqlCommand cmd = new SqlCommand(insertString, conn);             // 2. Call ExecuteNonQuery to send command            cmd.ExecuteNonQuery();        }        finally        {            // Close the connection            if (conn != null)            {                conn.Close();            }        }    }    /// &lt;summary&gt;    /// use ExecuteNonQuery method for Update    /// &lt;/summary&gt;    public void UpdateData()    {        try        {            // Open the connection            conn.Open();             // prepare command string            string updateString = @&#34;update Categories                                    set CategoryName = &#39;Other&#39;                                    where CategoryName = &#39;Miscellaneous&#39;&#34;             // 1. Instantiate a new command with command text only            SqlCommand cmd = new SqlCommand(updateString);             // 2. Set the Connection property            cmd.Connection = conn;             // 3. Call ExecuteNonQuery to send command            cmd.ExecuteNonQuery();        }        finally        {            // Close the connection            if (conn != null)            {                conn.Close();            }        }    }     /// &lt;summary&gt;    /// use ExecuteNonQuery method for Delete    /// &lt;/summary&gt;    public void DeleteData()    {        try        {            // Open the connection            conn.Open();             // prepare command string            string deleteString = @&#34;delete from Categories                                    where CategoryName = &#39;Other&#39;&#34;             // 1. Instantiate a new command            SqlCommand cmd = new SqlCommand();             // 2. Set the CommandText property            cmd.CommandText = deleteString;             // 3. Set the Connection property            cmd.Connection = conn;             // 4. Call ExecuteNonQuery to send command            cmd.ExecuteNonQuery();        }        finally        {            // Close the connection            if (conn != null)            {                conn.Close();            }        }    }     /// &lt;summary&gt;    /// use ExecuteScalar method    /// &lt;/summary&gt;    /// &lt;returns&gt;number of records&lt;/returns&gt;    public int GetNumberOfRecords()    {        int count = -1;        try        {            // Open the connection            conn.Open();             // 1. Instantiate a new command            SqlCommand cmd = new SqlCommand(&#34;select count(*) from Categories&#34;, conn);             // 2. Call ExecuteScalar to send command            count = (int)cmd.ExecuteScalar();        }        finally        {            // Close the connection            if (conn != null)            {                conn.Close();            }        }        return count;    }}در برنامه بالا، شی SqlConnection در SqlCommandDemo نمونه سازی شده است. این کار مشکلی ندارد زیرا زمانی که زباله جمع کنِ CLR اجرا می شود، خودِ شی پاکسازی خواهد شد. مهمترین مساله این است که پس از اتمام کار، حتما اتصال را قطع نماییم. در همه ی متدها، این برنامه اتصال را در یک قطعه کد (try block) try برقرار نموده و در یک final block قطع می نماید. متد ReadData، محتوای ستونِ CategoryName را در جدول دسته بندی (Category Table) نشان می دهد. برای نشان دادن وضعیت فعلی جدول دسته بندی (Category Table)، که پس از هر یک از فرمان های delete، insert، و update عوض می شود، بارها از این متد استفاده می نماییم. به همین دلیل، استفاده ی مجدد به منظور نشان دادنِ تاثیراتِ هر متد، کاری راحت خواهد بود.خلاصهشی SqlCommand به شما این اجازه را می دهد که از داده ها Query گرفته یا فرمانی را به دیتابس ارسال نمایید. این شی متدهایی دارد که برای فرمان های مختلفی تخصیص داده شده اند. متد ExecuteReader یک شی SqlDataReader را برای مشاهده ی نتایجِ یک کوئریِ (select query)، بر می گرداند. برای فرمان های Sql مربوط به insert، update، و delete، از متد ExecuteNonQuery استفاده می شود. اگر تنها به یک رقم مجموع و واحد از یک Query نیاز داشته باشیم، متد ExecuteScalar بهترین گزینه خواهد بود.پايان قسمت یازدهمآموزش سي شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Mon, 04 May 2020 16:24:38 +0430</pubDate></item><item><title>آموزش برنامه نويسي سي شارپ</title><link>https://virgool.ir/@p.kalantar.n/آموزش-برنامه-نويسي-سي-شارپ-q0vom2gcnfn0</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت دهم در خدمت شما عزیزان هستیم, در قسمت قبلی با ADO.NET در زبان C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.لينك قسمت اول : آموزش #Cاتصال به SQL Server در سی شارپ:برای ارتباط با هر پایگاه داده و انجام هر گونه عملیاتی لازم است تا به آن پایگاه داده وصل شویم. در ADO.NET جهت اتصال به پایگاه داده SQL Server از شی SqlConnection استفاده می شود. در این قسمت از آموزش سی شارپ به بررسی این شی و روش کار با آن خواهیم پرداخت.این درس به توصیف SqlConnection Object و چگونگی اتصال به پایگاه داده می پردازد. اهداف این بخش به شرح زیر استاز کدامیک از شی های اتصال (Connection Object) استفاده می شود.چگونه یک SqlConnection Object را معرفی کنیم.چگونه SqlConnection Object در اپلیکیشن کار می کند.درک اهمیتِ مدیریتِ اتصالِ موثرِ دایمی (lifetime). https://www.aparat.com/v/ZtT6l مقدمهاولین اقدامی که به هنگام ارتباط با یک پایگاه داده باید انجام داد، ایجاد اتصال (Connection)است. این اتصال (Connection)به بقیه ی ADO.NET اعلان می کند که در حال تعامل با کدام پایگاه داده می باشد. این اتصال (Connection) ، همه ی منطق های سطح پایین و مرتبط با پروتکل پایگاه داده های ویژه (specific database protocols) را مدیریت می نماید. این امر موجب سهولت در انجام کارها می شود، چرا که بیشترین کاری که در یک کد باید انجام داد عبارت است از نمونه سازی شی اتصال(connection object) ، باز کردن اتصال(Connection) ، و بستن اتصال (Connection) در پایان کار. گاهی اوقات و بسته به شرایط خاص، ممکن است نیازی به انجام بیشتر این کارها هم نباشد.با وجود اینکه کار با اتصال ها (Connections)در ADO.NET بسیار راحت است، اما به دلیل اهمیت اتخاذِ تصمیماتِ صحیح در زمان کدگذاریِ روتینِ دستیابیِ داده ها(data access routines)، نیاز است که این اتصال ها (Connections) را فرا گرفت. موقعیتی را در نظر بگیرید که در آن در حال استفاده از یک اپلیکیشن تک کاربری (stand-alone client) هستید که بر روی یک پایگاه داده مجزا کار می کند. به طور حتم توجه زیادی به این موقعیت نخواهید داشت. حال نرم افزار یک سازمان را در نظر بگیرید که در آن صدها کاربر از سرتاسرِ شرکت در حال دستیابی به یک پایگاه داده یکسان می باشند. هر اتصال (Connection)بیانگر یک بار اضافه می باشد و تنها میزانِ محدودی از این بار اضافه می تواند وجود داشته باشد. در موقعیت های بزرگتر، وب سایتی را در نظر بگیرید که روزانه صدها هزار کاربر دارد. اپلیکیشن هایی که اتصال (Connection) را در دست می گیرند و اجازه نمی دهند این اتصال ها (Connections) آزاد شوند، می توانند تاثیراتی به شدت منفی بر روی عملکرد و گسترش(scalability) داشته باشند.ایجاد یک SqlConnection Objectیک SqlConnection Object مثل هر شی C# دیگری، یک شی می باشد. بیشتر اوقات، تمامی SqlConnection ها، آنطور که در کد زیر نشان داده شده است، تماما در یک خط نمونه سازی و معرفی می شوند:SqlConnection conn = new SqlConnection(&#34;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI&#34;);در SqlConnection Object که بالا نشان داده شده است، از سازنده ای (Constructor) استفاده می کند که تنها دارای یک آرگومان رشته ای می باشد. این آرگومان، یک Connection String یا رشته ی اتصال نامیده می شود. جدول 1 بخش های یک Connection String را توصیف می کند.جدول 1. رشته های اتصالِ ADO.NET شامل جفت های کلیدی/مقداری(key/value pairs) برای مشخص کردن چگونگی ایجاد یک اتصال پایگاه دادهی. این مقادیر شاملِ مکان، نام پایگاه داده، و اطلاعات کاربری می باشند.جدول 1&#xA;امنیت یکپارچه (Integrated Security) حالت امنیتی است که به هنگام کار کردن با یک دستگاه مجزا وجود دارد. با این حال، در بیشتر مواقع با مجوزهایی که به طور ویژه برای اپلیکیشن های مورد استفاده اختصاص داده شده اند، می توان بر اساس یک SQL Server User ID امنیت را به طور خاص تعیین نمود. شکل پایین یک رشته ی اتصال (Connection String) را با استفاده از پارامترهای User ID و Password، نشان می دهد.SqlConnection conn = new SqlConnection(&#34;Data Source=DatabaseServer;Initial Catalog=Northwind;User ID=YourUserID;Password=YourPassword&#34;);توجه داشته باشید که چگونه Data Source، به منظور تعیین یک پایگاه داده در دستگاهی دیگر، و یا در یک LAN و اینترنت، با DatabaseServer تنظیم شده است. ضمن آنکه User ID و Password جایگزین پارامتر امنیت یکپارچه (Integrated Security) می شوند. https://www.aparat.com/v/s6AOp استفاده از یک SqlConnectionهدف ایجادِ یک SqlConnection object این است که بتوان دیگر کدهای ADO.NET را برای کار با یک پایگاه داده، فعال سازید. SqlCommand و SqlDataAdapter، شی اتصال (Connection Object) را بعنوان یک پارامتر در نظر می گیرند. توالی عملیاتی که در طول عمر یک SqlConnection اتفاق می افتند به صورت زیر است:آرایه ی SqlConnectionباز کردن اتصال(Connection)انتقال اتصال (Connection)به شی ADO.NET دیگراجرای عملیات پایگاه داده با دیگر شی های ADO.NETبستن اتصال (Connection)تاکنون دیدیم که یک SqlConnection چگونه معرفی می گردد. بقیه ی مراحل شامل باز کردن (Opening) ، پاس دادن یا انتقال (Passing)، استفاده کردن (Using) و بستن (Closing)در لیست دستور 1 ذکر شده اند.using System;using System.Data;using System.Data.SqlClient;/// &lt;summary&gt;/// Demonstrates how to work with SqlConnection objects/// &lt;/summary&gt;class SqlConnectionDemo{    static void Main()    {        // 1. Instantiate the connection        SqlConnection conn = new SqlConnection(&#34;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI&#34;);        SqlDataReader rdr = null;        try        {            // 2. Open the connection            conn.Open();                      // 3. Pass the connection to a command object            SqlCommand cmd = new SqlCommand(&#34;select * from Customers&#34;, conn);                     // 4. Use the connection            // get query results            rdr = cmd.ExecuteReader();              // print the CustomerID of each record            while (rdr.Read())            {                Console.WriteLine(rdr[0]);            }        }        finally        {            // close the reader            if (rdr != null)            {                rdr.Close();            }              // 5. Close the connection            if (conn != null)            {                conn.Close();            }        }    }}همانطور که در لیست 1 نشان داده شده است، با استفاده از متدِ Open() در شی SqlConnection (که conn نامیده می شود)، اتصال (Connection)باز می شود. هرگونه عملیات بر روی اتصالی که هنوز باز نشده است، موجب خطا (exception) می شود. بنابراین پیش از استفاده باید اتصال (Connection) را به طور واقعی با فراخوانی متد Open() برقرار نمایید.قبل از استفاده از یک SqlCommand، باید به کدِ ADO.NET اعلان شود که به کدام نوع اتصال (Connection) نیاز دارد. در لیست دستور 1 دومین پارامتر را به وسیله شی SqlConnection (که با conn مشخص می شود)، برای شی SqlCommand مقداردهی نمودیم. بنابراین، هرگونه عملیاتی که با SqlConnection اجرا می شود، از آن اتصال (Connection)استفاده خواهد نمود. کدی که از اتصال (Connection)استفاده می کند یک شی SqlConnection می باشد که یک Query را بر روی جدول Customer اجرا می کند. مقادیرِ نتایج به عنوان یک SqlDataReader برگردانده می شوند و حلقه ی while اولین ستون از هر سطر این مقادیر، که ستونِ CustomerID است، را می خواند. در درس های بعدی SqlCommand و شی SqlDataReader را مورد بررسی قرار خواهیم داد. شایان ذکر است که این اشیا در حال استفاده از شی SqlConnection می باشند، بنابراین می دانند که با کدام پایگاه داده ها در تعامل باشند.پس از پایانِ کار با Connection Object، باید اتصال (connection)را ببندید. عدم انجام این کار می تواند منجر به پیامدهای جدی بر روی اجرا (Performance)و مقیاس پذیری (Scalability) برنامه شما شود. نکته ای که در مورد چگونگی بستن اتصال (Connection) در لیست دستورِ 1 وجود دارد این است که متد Close() در قطعه کدِ finally فراخوانی می شود و این اطمینان حاصل می آید که اتصال (Connection)قبل از بستن آن به هیچ وجه null نمی باشد.در نظر داشته باشید که ADO.NET در یک قطعه کدِ try/catch/finally نگه داشته می شود. قطعه کدهای finally، بدون در نظر گرفتن این که آیا یک خطا (exception) رخ داده است یا خیر، تضمین خواهند کرد که بخش مشخصی از کد اجرا خواهد شد. از آنجایی که اتصال ها (Connection) منابع زیادی مصرف می کنند، باید مطمئن شد که در قطعه کدهای finally بسته شوند.دیگر اقدام مهم که در هنگام بستن اتصال (Connection)باید مدنظر داشت این است که مطمئن شد شی اتصال (Connection Object) در حالت بی مقدار (null) قرار ندارد. اگر به هنگام نمونه سازیِ اتصال (Connection) خطایی رخ دهد، آن اتصال (Connection) بی مقدار (null) خواهد شد. این مثال نشان می دهد که چگونه از یک SqlConnection به همراه یک SqlDataReader که صراحتا نیازمند بستن اتصال (Connection)است استفاده شود. با این حال، زمانی که از مدل disconnected data استفاده می شود، نیازی نیست که خودتان اتصال را برقرار یا قطع نمایید. در درس آینده که نگاهی به SqlDataReader دارد، خواهیم دید که این موضوع چگونه پیش می رود.خلاصهاشیای SqlConnection به دیگر کدهای ADO.NET اعلان می کنند که به کدامیک از پایگاه داده ها متصل شده و چگونه یک اتصال (Connection)را برقرار نمایند. آنها به وسیله ی پاس دادنِ یک رشته اتصال (Connection String)با مقادیری از جفت های کلیدی/مقداری (key/value pairs) که اتصال (Connection)را تعریف می کنند، نمونه سازی می شوند. مراحلی که شما با استفاده از آنها طول عمر یک اتصال (Connection)را تعیین می کنید عبارتند از create، open، pass، use، و close. حصولِ اطمینان از بسته بودنِ اتصال (Connection) پس از اتمام کار، به عدم هدر رفتِ منابع سیستم کمک زیادی خواهد کرد.پايان قسمت دهم آموزش سي شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Thu, 30 Apr 2020 12:26:16 +0430</pubDate></item><item><title>آموزش #C-آموزش Csharp</title><link>https://virgool.ir/@p.kalantar.n/آموزش-c-آموزش-csharp-n1e7je4kb782</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت نهم در خدمت شما عزیزان هستیم, در قسمت قبلی با Abstract Class  در زبان C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.لينك قسمت اول :  آموزش #C در تقریبا تمامی برنامه های امروزی لازم است تا حجم متعارفی از داده ها (کم یا زیاد) را مدیریت کرد. این مدیریت شامل خواندن، افزودن، ویرایش و یا حذف داده می تواند باشد. برای این منظور در بستر دات نت کتابخانه ای غنی به نام ADO.NET طراحی گردیده که به ما در پیاده سازی فرآیندهای مربوط به این امر کمک زیادی خواهد کرد. https://www.aparat.com/v/mZc84 مقدمه ای بر ADO.NETاین درس مقدمه ایست بر ADO.NET. این بخش مفاهیم اولیه ی ADO.NET و اهدافی را که در بخش های بعدی باید فرا بگیرید، معرفی می نماید. اهداف این درس ذیلا عنوان شده اند:مفهوم ADO.NET چیست؟ديتا Data Provider چیست؟كانكشن Connection Object چیست؟كامند Command Object چیست؟ديتا DataReader Object چیست؟ديتا DataSet Object چیست؟ديتا DataAdapter Object چیست؟مقدمهمجموعه ADO.NET یک مجموعه ی شی گرا (Object-Oriented) از کتابخانه هایی است که به شما اجازه می دهند با Data Source (منبع داده) در ارتباط باشید. به طور کلی Data Source یک پایگاه داده (database) می باشد، اما در عین حال می تواند یک فایل متنی، یک صفحه اکسل، و یا یک فایل XML نیز باشد. به طور پیش فرض ما در این درس به ADO.NET به عنوان راهی برای ارتباط با پایگاه داده نگاه خواهیم کرد.انواع مختلفی از پایگاه داده در دسترس می باشند. از بین آنها می توان به SQL Server، Microsoft Access، Oracle، Borland Interbase، و IBM DB2 اشاره کرد. در راستای پیشبرد اهداف این درس، در تمامی مثال ها از SQL Server استفاده می شود.مفهوم MSDE2000 در واقع نسخه ی کوتاه شده ی SQL Server می باشد. بنابراین، هرآنچه که شما در این مبحث می آموزید و نیز تمامی کدها بوسیله SQL Server کار می کنند. این درس منحصرا برای ADO.NET طراحی شده است و مثال های موجود در این بخش از پایگاه داده Northwind استفاده خواهند نمود. MSDE بخشی ازServer SQL نیست اما یکی از Data Source هایی است که از طریق ADO.NET می توانید با آن در تماس باشید.Data Providers https://www.aparat.com/v/s6AOp میدانیم که ADO.NET این امکان را برای ما فراهم می آورد که با انواع مختلفی از پایگاه داده ها و Data Source ها در ارتباط باشیم. با این وجود، مجموعه ی مقادیر واحدی از کلاس هایی که به شما اجازه دهند این کار را به صورت کلی انجام دهید، وجود ندارد. از آنجایی که Data Source های مختلف پروتکل های متفاوتی را ارایه می دهند، به روشی نیاز داریم که از طریق استفاده از پروتکلِ صحیح با data source ها ارتباط برقرار نماییم. برخی از Data Source های قدیمی از پروتکل ODBC استفاده می کنند، برخی از Data Source های جدیدتر از پروتکل OLeDb بهره می گیرند، و هر روز Data Source های بیشتری به وجود می آیند که به شما اجازه می دهند مستقیما از طریقِ کتابخانه های کلاس .NET ADO.NET با آنها در تماس باشید.مجموعه ADO.NET یک روش نسبتا رایج را برای ارتباط با Data Source ها فراهم می کند. البته چندین مجموعه مختلف از کتابخانه ها برای هر روشی که به منظور برقراری ارتباط با Data Source استفاده می کنید وجود دارد. این برنامه ها Data Provider نامیده می شوند و معمولا بسته به نوع Data Source و یا پروتکلی که از طریقِ آن با Data Source ارتباط برقرار می گردد، نامگذاری می شوند. جدول 1 لیستی از معروف ترین Data Provider ها، API prefix ی که استفاده می نمایند، و نوعِ Data Provider هایی که به شما اجازه می دهند با آنها ارتباط برقرار نمایید را، ارایه نموده است.ديتا Data Provider های ADO.NET کتابخانه هایی هستند که به یک متد اجازه می دهند که به data source های ویژه یا پروتکل ها وصل شوند. APL ها دارای نشانه های پیشوندی (prefix) می باشند که مشخص می کند از کدام data provider پشتیبانی می کنند.یک مثال می تواند به شما در درکِ بهتر مفهومِ API Prefix کمک نماید. یکی از اولین اشیای ADO.NET، شی اتصال (Connection Object) است که موجب برقراری ارتباط (Connection) با Data Source می گردد. اگر برای دسترسی به یک Data Source به منظورِ ارایه ی یک واسطِ OleDb، از OleDb Data Provider استفاده شود، می بایست از یک آبجکت اتصال (Connection Object) به نام OleDbConnection بهره گرفت. به همین صورت، نامِ آبجکت اتصال (Connection Object) باید با پیشوندِ Odbc برای آبجکتOdbcConnection بر روی یک Odbc Data Source، و یا به صورتِ پیشوند Sql برای SqlConnection object بر روی یک پایگاه داده SQL Server ، عنوان شوند. از آنجایی که در این مبحث از MSDE (یک ویرایش کوچک SQL Server) استفاده می شود، تمامیِ اشیای API دارای پیشوندِ Sql می باشند، برای مثال SqlConnection.ADO.NET Objectsمجموعه ADO.NET شاملِ اشیای فراوانی است که شما می توانید از آنها برای کار با داده ها استفاده نمایید. این بخش، برخی از اشیای اولیه ی مورد استفاده را معرفی می نماید. در ادامه ی این مبحث، با اشیای ADO.NET بیشتری از نظرِ اینکه چگونه در یک فرآیند مورد استفاده قرار می گیرند آشنا خواهید شد. اشیایی که در زیر عنوان شده اند مواردی هستند که باید آنها را یاد بگیرید.The SqlConnection Object https://www.aparat.com/v/DOQCv برای ارتباط با یک پایگاه داده، باید با آن یک اتصال (Connection) برقرار نمود. این اتصال (Connection) به شما کمک می کند که سرور پایگاه داده، نامِ پایگاه داده، username، password، و پارامترهای دیگری که برای برقراری اتصال با پایگاه داده مورد نیاز هستند را تعیین نمایید. آبجکت اتصال (Connection Object) توسط اشیای ویژه اجرای دستورات مرتبط با داده ها روی پایگاه داده (command objects) مورد استفاده قرار می گیرد، بنابراین به آنها اعلان خواهد شد که از کدام database برای اجرای دستور استفاده نمایند.The SqlCommand Objectفرایند ارتباط با یک پایگاه داده بدین معناست که باید عملیاتی را که قرار است اتفاق بیفتد تعیین نمود. این کار توسط شی فرمان (Command Object) صورت میگیرد. از آبجکت فرمان (Command Object) برای ارسال دستوراتِ SQL به پایگاه داده استفاده می شود. آبجکت فرمان (Command Object) برای نشان دادن اینکه به کدام پایگاه داده باید متصل شد، از آبجکت اتصال (Connection Object) استفاده می کند. می توان برای اجرای مستقیم یک دستور، و یا تخصیصِ یک نشانه گذار (Reference)به آبجکت فرمان (Command Object) برای یک SqlDataAdapter، از شی فرمان (Command Object) به تنهایی استفاده نمود. این SqlDataAdapter مجموعه ای از فرمان ها (Command) را که بر روی گروهی از داده ها کار میکنند، نگهداری می نماید.The SqlDataReader Objectبسیاری از عملیات های داده ای (Data Operations) نیازمند این هستند که تنها جریانی از داده ها برای خواندن در دسترس باشند. شی DataReader این امکان را فراهم می کند که به نتایجِ یک دستورِ SELECT از یک آبجکت فرمان (Command Object) دست پیدا کنید. به منظور پیشبرد عملیات اجرایی، داده های بازگردانی شده از یک DataReader، جریانی سریع و منحصرا پیشرونده (Forward Only) از داده ها می باشد. این بدان معناست که تنها قادرید داده را به روش ترتیبی از جریان بیرون بکشید. این موضوع از نظر سرعت بهینه و به صرفه است، اما در صورتی که بخواهید داده ها را دستکاری کنید، DataSet آبجکت بهتری برای اجرا خواهد بود.The DataSet Objectاشیای DataSet یک نماینده مقیم در حافظه از پایگاه داده می باشند. آنها شامل چندین شی DataTable هستند که درست مانند جداولِ پایگاه داده معمولی، دارای سطر و ستون می باشند. حتی می توان روابط بین جداول را به منظور ایجاد روابط کل به جزء (parent-child)، تعریف نمود. Dataset ها به طور خاص برای کمک به مدیریت داده های مقیم در حافظه و برای پشتیبانی از عملیات داده ای که دیگر در دسترس نیستند (Disconnected Operations) ، طراحی شده اند. DataSet آبجکتی است که بوسیله ی تمامی Data Provider ها استفاده می شود، و به همین دلیل است که فاقدِ هرگونه پیشوند مخصوصِ Data Provider می باشد.The SqlDataAdapter Objectگاهی اوقات داده ای که با آن کار می کنید، داده ای تنها خواندنی (Read Only) است و به ندرت نیاز خواهید داشت که تغییراتی را بر روی منابعِ داده ای مشخص شده، اعمال نمایید. بعضی موقعیت ها همچنین ملزم به ذخیره سازی داده ها در حافظه می باشند تا میزانِ فراخوانی های پایگاه داده را برای داده هایی که تغییر نمی کنند، کاهش دهند. Date Adapter انجام این کارها را با کمک به مدیریت داده ها در حالتِ Disconnected، آسان می کند. Data Adapter به هنگام خواندن داده ها یک DataSet را پر نموده و در زمان بازگشت تغییرات به پایگاه داده، یک دسته ی تکی را می نویسد. Data Adapter حاوی مرجعی برای آبجکت اتصال (Connection Object) بوده و به هنگام خواندن فرمان به پایگاه داده و یا نوشتن به آن، به طور خودکار اتصال را قطع و وصل می کند. بعلاوه، Data Adapter حاویِ نشانگرهای آبجکت فرمان (Command Object) برای دستورهای SELECT، INSERT، UPDATE، و DELETE می باشد. در DataSet، برای هر جدول یک Data Adapter تعریف شده است و این موجب می شود که از تمامی ارتباط ها در پایگاه داده محافظت شود. تمام کاری که باید انجام دهید این است که به Data Adapter بگویید که چه موقع داده ها را از پایگاه داده بارگذاری نموده و چه هنگام دوباره در پایگاه داده ثبت کند.خلاصهمجموعه ADO.NET عبارت است از فن آوریِ .NET برای ارتباط با منابع داده ای (Data Source). بسته به نوع پایگاه داده و یا پروتکلی که مورد استفاده قرار می گیرد، Data Provider های مختلفی وجود دارند که امکان ارتباط با Data Source های مختلف را فراهم می آورند. بدون در نظر گرفتنِ نوعِ Data Provider مورد استفاده، از مجموعه ای مشابه از اشیا برای تعامل با یک Data Source استفاده می گردد. SqlConnection Object این امکان را به وجود می آورد که اتصال (Connection) با Data Source مدیریت شود. SqlCommand Objects موجب می شود که ارتباط با Data Source برقرار شده و دستوراتی را برای آن ارسال نمایید. به منظور استفاده از قابلیتِ دسترسیِ خواندنی سریع و منحصرا رو به جلوی داده ها) fast forward-only read access to data)، از SqlDataReader استفاده می گردد. اگر میخواهید با داده های Disconnected کار کنید، از یک DataSet بهره گرفته و با استفاده از SqlDataReader ، عملیات خواندن از Data Sourceو نوشتن به آن را، پیاده سازی نمایید.پايان قسمت نهم آموزش سي شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Wed, 29 Apr 2020 13:15:42 +0430</pubDate></item><item><title>آموزش سی شارپ-آموزش تصویری #C</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-آموزش-تصویری-c-btk51jgiaqhu</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت هشتم در خدمت شما عزیزان هستیم, در قسمت قبلی با وراثت یا ارث بری (Inhertance) و اعضای ایستا یا استاتیک در زبان C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید.کلاس انتزاعی (Abstract Class) در #Cکلاس های انتزاعی (Abstract Class) در زبان C#، که با کلمه کلیدی abstract مشخص می شوند، کلاس های پایه و مادر در یک سلسله مراتب درختی کلاس ها می باشند. به عبارت دیگر این کلاس ها، کلاس مرجع بوده و بقیه کلاس ها به ترتیب از روی این کلاس به ارث می روند.نکته :مسئله مهم در مورد کلاس های انتزاعی (Abstract) این است که شما نمی توانید یک نمونه یا شی از روی این کلاس ها بسازید، اگر این کار را انجام دهید، با خطای کامپایلر مواجه خواهید شد.به جای عدم امکان ساخت شی از روی کلاس های انتزاعی، می توانید یک کلاس فرزند یا Subclass همانطور که در درس قبل آموزش دادیم، را از روی کلاس انتزاعی ساخته و سپس object های خود را از روی کلاس فرزند تولید کنید. https://www.aparat.com/v/19Yhx اما چه زمانی ممکن است به کلاس های پایه نیاز داشته باشید؟ به بیان ساده و شفاف، شما می توانید یک پروژه را کامل کدنویسی کنید بدون این که نیازی به کلاس پایه داشته باشید. اما این نوع کلاس ها برای یک منظور خاص، بسیار مناسب بوده و آن کاربرد در چهارچوب کاری یا Framework ها می باشد. به همین دلیل است که چهارچوب کاری .NET پر از کلاس های انتزاعی است.در کد کلاس زیر، ما یک کلاس پایه به نام Four Legged Animal (چهارپایان) را ایجاد کرده و سپس کلاس دیگری به نام Dog تعریف نموده که از کلاس پایه به ارث می رود.namespace AbstractClasses{    class Program    {        static void Main(string[] args)        {            Dog dog = new Dog();            Console.WriteLine(dog.Describe());            Console.ReadKey();        }    }     abstract class FourLeggedAnimal    {        public virtual string Describe()        {            return &#34;Not much is known about this four legged animal!&#34;        }    }     class Dog : FourLeggedAnimal    {     }اگر کد مثال فوق را با مثال های درس قبل (آموزش مفهوم ارث بری در C#) مقایسه کنید، تفاوت چندانی بین آن ها مشاهده نخواهید کرد. درواقع کلمه کلیدی abstract در جلوی نام کلاس FourLeggedAnimal مهم ترین تفاوت این مثال هاست. همانطور که مشاهده می کنید، ما یک نمونه از کلاس Dog را ایجاد کرده و سپس متد به ارث برده شده Describe() را از کلاس FourLeggedAnimal فراخوانی کرده ایم. اکنون بیایید یک نمونه از کلاس FourLeggedAnimal را ایجاد کنیم، به صورت کد زیر :FourLeggedAnimal someAnimal = new FourLeggedAnimal();اما شما با خطای کامپایلر مواجه خواهید شد. شرح خطا به صورت زیر است :&lt;i&gt;Cannot create an instance of the abstract class or interface &#39;AbstractClasses.FourLeggedAnimal&#39;&lt;/i&gt;همان طور که در مثال قبل دیدید، ما متد به ارث رفته Describe() را فراخوانی کردیم، اما در حقیقت کاربرد چندانی برای ما نداشت. لذا بیایید توسط کد زیر آن را بازنویسی یا override کنیم : https://www.aparat.com/v/s6AOp class Dog : FourLeggedAnimal{    public override string Describe()    {        return &#34;This four legged animal is a Dog!&#34;    }}در کد مثال فوق، به طور کامل متد را بازنویسی یا Override کردیم. اما گاهی ممکن است شما بخواهید رفتار را از کلاس پایه به ارث برده و مقدار کد نیز به آن اضافه کنید. برای این منظور بایستی از کلمه کلیدی base استفاده نموده که اشاره به کلاسی دارد که از آن inherit کرده ایم. به صورت کد زیر :abstract class FourLeggedAnimal{    public virtual string Describe()    {        return &#34;This animal has four legs.&#34;    }}  class Dog : FourLeggedAnimal{    public override string Describe()    {        string result = base.Describe();        result += &#34; In fact, it&#39;s a dog!&#34;        return result;    }}اکنون می توانید کلاس های فرزند subclass دیگری را نیز برای کلاس FourLeggedAnimal درست کنید.مطالعه کامل تر کلاس های پایه Abstract Class در #C:در این درس، قصد داریم مثال درس قبل را کمی گسترش داده و در آن از متدهای ثابت Abstract Methods نیز استفاده کنیم. کد تعریف کلاس های ثابت همانند یک متد معمولی است ولی کدی درون آن ها نوشته نمی شودabstract class FourLeggedAnimal{    public abstract string Describe();}اما چرا می خواهیم یک متد خالی را تعریف کنیم، در حالی که کاری برایمان انجام نمی دهد؟به دلیل این که متد پایه (Abstract Method) یک تعمد یا اجبار است تا آن متد در تمامی کلاس های فرزند کلاس جاری اجرا شود. درواقع، به وسیله این کار در زمان اجرای برنامه چک می کنیم، آیا تمامی کلاس های فرزند، این تابع را در خود تعریف کرده اند یا خیر.یک بار دیگر اشاره داریم که این روش بهترین روش برای تعیین یک کلاس پایه برای چیزی در برنامه است، در حالی که می توانیم کنترل کنیم، کلاس فرزند یا subclass چه کارهایی را بایستی قادر باشد، انجام دهد.با در نظر گرفتن مطلب فوق، شما همواره می توانید کاری کنید تا یک کلاس فرزند subclass همانند کلاس پایه عمل کند. برای مثال، به کد مثال زیر دقت کنید :namespace AbstractClasses{    class Program    {        static void Main(string[] args)        {            System.Collections.ArrayList animalList = new System.Collections.ArrayList();            animalList.Add(new Dog());            animalList.Add(new Cat());            foreach(FourLeggedAnimal animal in animalList)                Console.WriteLine(animal.Describe());            Console.ReadKey();        }    }     abstract class FourLeggedAnimal    {        public abstract string Describe();    }      class Dog : FourLeggedAnimal    {         public override string Describe()        {            return &#34;I&#39;m a dog!&#34;        }    }     class Cat : FourLeggedAnimal    {        public override string Describe()        {            return &#34;I&#39;m a cat!&#34;        }    }}        همانطور که در کد مثال مشاهده می کنید، ما یک لیست آرایه ای ArrayList شامل نام چند حیوان را درست کرده ایم. سپس یک نمونه جدید از Dog و Cat را ایجاد و به لیست اضافه کرده ایم. در شی ذکر شده، نمونه هایی ایجاد شده از کلاس Dog وCat هستند، از طرف دیگر نوعی از کلاس FourLeggedAnimal نیز محسوب می شوند. تا زمانی که کامپایلر می داند که کلاس فرزند متعلق به کلاس پایه است، می توانید متد Describe() را فراخوانی و اجرا کنید، بدون این که دقیقا نوع حیوان شی را بدانید.بنابراین با انجام عمل تبدیل نوع داده ای (TypeCasting) که در حلقه foreach loop برای کلاس FourLeggedAnimal انجام دادیم، به اعضای کلاس فرزند subclass دسترسی پیدا کردیم. این کار در بسیاری از موارد سودمند خواهد بود.پایان قسمت هشتم آموزش سی شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Tue, 28 Apr 2020 16:24:19 +0430</pubDate></item><item><title>آموزش سی شارپ-قسمت هفتم</title><link>https://virgool.ir/@p.kalantar.n/آموزش-سی-شارپ-قسمت-هفتم-m2hjomyjszdy</link><description>سلام با آموزش برنامه نویسی سی شارپ قسمت هفتم در خدمت شما عزیزان هستیم, در قسمت قبلی با Method overloading در زبان C# آشنا شدیم. با ادامه آموزش سی شارپ همراه ما باشید: آموزش سی شارپ : قسمت اول وراثت یا ارث بری (Inhertance) در سی شارپ:یکی از جنبه های کلیدی زبان های برنامه نویسی شی گرا Objected Oriented Programming (OOP) از جمله C# بر پایه آن بنا شده است، مفهوم ارث بری یا Inheritance می باشد. ارث بری یعنی تولید کلاس هایی جدید که برخی از ویژگی های خود را از کلاس مادر Parent Class به ارث برده اند.حتی اگر کل چهارچوب کاری NET. بر پایه مفهوم ارث بری نباشد، ولی جمله معروف &#34;همه چیز شی یا object است&#34; از نتایج آن است. در زبان C#، حتی یک عدد ساده نمونه ای از یک کلاس است که خود از کلاس پایه System.object به ارث رفته است. اگرچه چهارچوب کاری NET.، این امکان را نیز برای شما فراهم کرده تا مقدار مورد نظر خود را مستقیما به یک عدد بدهید، بدون آن که نیاز داشته باشید تا نسخه جدیدی از کلاس Integer ایجاد کنید.شاید بیان مفهوم ارث بری کمی سخت باشد، اما ارایه مثال های عملی کمک شایانی در این زمینه می کند. نمونه کد زیر یک مثال ساده از مفهوم ارث بری در زبان C# است :public class Animal{    public void Greet()    {        Console.WriteLine(&#34;Hello, I&#39;m some sort of animal!&#34;);    }} public class Dog : Animal{}در کد فوق، در مرحله اول یک کلاس به نام Animal Class تعریف کرده ایم و دارای یک متد ساده جهت چاپ پیام خوش آمد گویی است. سپس کلاس Dog را ایجاد کرده و با قرار دادن یک : در مقابل آن، به C# اعلام کرده ایم این کلاس بایستی از کلاس Animal به ارث رود. نکته جالب در مورد مثال فوق این است که رابطه سگ و حیوان نیز در طبیعت به همین صورت می باشد، یعنی Dog زیرمجموعه ای از حیوانات است. اکنون بیایید روش به کار بردن کلاس ها را بررسی کنیم : https://www.aparat.com/v/SaQjI Animal animal = new Animal();animal.Greet(); Dog dog = new Dog();dog.Greet();&#xA;اگر کد مثال فوق را اجرا نمایید، خواهید دید با وجودیکه متد Greeting() را برای کلاس Dog تعریف نکرده ایم، اما این کلاس می تواند به پیام خوش آمد بگوید، زیرا متد Greeting() را از کلاس مادر خود یعنی Animal Class به ارث برده است.البته پیام خوش آمدگویی اولیه کد فوق، کمی نامفهوم است. اجازه دهید کدی به مثال قبلی اضافه کنیم تا بدانیم چه حیوانی به ما خوش آمد می گوید!public class Animal{    public virtual void Greet()    {        Console.WriteLine(&#34;Hello, I&#39;m some sort of animal!&#34;);    }} public class Dog : Animal{    public override void Greet()    {        Console.WriteLine(&#34;Hello, I&#39;m a dog!&#34;);    }}در کنار متد اضافه شده به کلاس Dog Class، دو چیز مهم را مشاهده می کنید. ما کلمه کلیدی مجازی (Virtual keyword) را به متد کلاس Animal Class اضافه کرده ایم، از طرف دیگر کلمه کلیدی override را نیز برای کلاس Dog Class به کار برده ایم.در زبان C#، شما نمی توانید عضو (member) یک کلاس را بازنویسی یا override کنید، مگر این که آن را به عنوان virtual تعیین کرده باشید. اگر هم بخواهید، می توانید متد به ارث برده شده را با به کار بردن کلمه کلیدی base، به صورت اولیه خود فراخوانی کنید. به صورت کد مثال زیر:public override void Greet(){    base.Greet();    Console.WriteLine(&#34;Yes I am - a dog!&#34;);}تنها متدها (Methods) نیستند که می توان آن ها را در کلاس ها به ارث برد، سایر اعضای یک کلاس مثل فیلدها (Fileds) و خواص (Properties) نیز خاصیت ارث بری دارند. فقط بایستی به قواعد بازه دسترسی (access modifier) که در درس قبل تشریح کردیم، توجه کنید. ارث بری یا Inheritance فقط مختص یک کلاس به کلاس دیگر نیست. شما می توانید یک سلسله مراتب از کلاس های مرتب به هم را بسازید. برای مثال می توانید یک کلاس به نام Puppy ایجاد کرده که خودش از کلاس Dog به ارث برود، در حالی که Dog فرزند کلاس Animal است.نکته مهم :شما در C# نمی توانید کاری کنید که یک کلاس از چند کلاس مختلف به ارث برود. به این کار ارث بری چندگانه (multiple inheritance) می گویند که در C# پشتیبانی نمی شود.اعضای ایستا یا استاتیک (Static members) در #c:همان طور که در درس های قبل متوجه شدید، رایج ترین راه تعامل و ارتباط با یک کلاس Class، ساخت یک نمونه از آن (شی یا object) و سپس کار کردن بر روی object مورد نظر است. در بیش تر موارد، این کل چیزی است که کلاس شامل می شود، یعنی ساخت چندین نمونه مختلف از یک کلاس و سپس استفاده از هر کدام از آن ها در یک قسمت و یا یک منظور. اما مواردی وجود دارد که تمایل دارید کلاسی داشته باشید که بدون نمونه سازی از آن یا حداقل بدون نیاز به ساخت شی از آن، بتوانید از اعضا و متدهای آن استفاده کنید. برای مثال ممکن است کلاسی داشته باشید که دارای یک متغیر بوده و مقدار این متغیر در همه موارد صرف نظر از محل به کارگیری آن، یکسان است. به این موارد اعضای ثابت یا Static members می گویند، ثابت Static به این دلیل که همواره مقدار آن ها در سطح برنامه یکسان است.یک کلاس می تواند استاتیک Static بوده و یا دارای اعضا و متدهای Static باشد. یک کلاس ثابت Static Class را نمی توانید نمونه سازی کنید. کلاس های ثابت در واقع مجموعه ای member ها هستند تا یک کلاس به معنای واقعی.همچنین شما ممکن است یک کلاس معمولی (non-static) ساخته و برای اعضای آن، ثابت تعریف کنید. یک کلاس غیر ثابت non-static را می توانید نمونه سازی کرده و از روی آن object بسازید، اما نمی توانید از اعضای ثابت آن در شی ها استفاده کنید.کد زیر یک مثال از نحوه تعریف کلاس های ثابت Static Class می باشد : https://www.aparat.com/v/E17fW public static class Rectangle{    public static int CalculateArea(int width, int height)    {        return width * height;    }}همانطور که مشاهده کردید، ما از کلمه کلیدی Static برای مشخص کردن کلاس از نوع ثابت استفاده کرده و همچنین این کلمه کلیدی را نیز برای متد Calculator Area به کار برده ایم. اگر هم برای کلاس و هم برای متد، کلمه کلیدی Static را استفاده نکنید، کامپایلر C# دچار خطا می شود. زیرا یک عضو غیر ثابت (non-Static) را نمی توان در یک کلاس Static تعریف کرد.برای استفاده از متد Calculator، بایستی آن را همانند کد زیر و به صورت مستقیم با کلاس فراخوانی کرد :Console.WriteLine(&#34;The area is: &#34; + Rectangle.CalculateArea(5, 4));ما می توانیم متدهای کاربردی دیگری را نیز درون کلاس Rectangle Class تعریف کنیم اما شاید این سوال برایتان پیش آمده، که چرا ما پارامترهای width و height را به جای تعریف در کلاس، مستقیما به متد مقصد پاس داده ایم؟به دلیل این که کلاس فوق به صورت ثابت Static تعریف شده، ما می توانیم مقدار متغیرهای height و width را درون کلاس نگهداری کنیم، اما به صورت ثابت و فقط دارای یک نمونه از مقادیر مثلا 3 و 2 و دیگر نمی توان آن ها را تغییر داد. این نکته مهم را بایستی در کار با توابع Static لحاظ کنید.به جای کد فوق، می توان با غیر ثابت تعریف کردن کلاس، امکان تغییر و انعطاف پذیری کامل را به کلاس خود بدهید. همانند کد مثال زیر :public class Rectangle{    private int width, height;     public Rectangle(int width, int height)    {        this.width = width;        this.height = height;    }     public void OutputArea()    {        Console.WriteLine(&#34;Area output: &#34; + Rectangle.CalculateArea(this.width, this.height));    }     public static int CalculateArea(int width, int height)    {        return width * height;    }}همانطور که مشاهده می کنید، کلاس را به صورت غیر ثابت non-Static تعریف کرده ایم. همچنین یک تابع سازنده Construction تعریف شده که مقدار پارامترهای Width و height را به نمونه ساخته از کلاس، نسبت می دهد. در پایان هم متد out put Area را جهت محاسبه مساخت به صورت static تعریف کرده ایم. این مثال نمونه خوبی از ترکیب اعضای غیر ثابت و ثابت در یک کلاس non-static می باشد.پایان قسمت هفتم آموزش سی شارپ</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Thu, 23 Apr 2020 18:29:45 +0430</pubDate></item><item><title>آموزش React-آموزش State های ReactJS</title><link>https://virgool.ir/@p.kalantar.n/آموزش-react-آموزش-state-های-reactjs-vbv3bhv7cih4</link><description>سلام انشالله همه سلامت باشید و این ویروس هم به زودی ریشه کن شوددر قسمتهای قبل : در قسمت اول : آموزش React با کاربرد آن آشنا شدیمدر قسمت دوم : نصب ReactJS را یاد دادیم و یک پروژه انجام دادیمدر قسمت سوم : JSX در ReactJS را فرا گرفتیمدر قسمت چهارم : با کامپوننت ها در React آشنا شدیمحال با قسمت 5 آموزش Reactjs با ما همراه باشید https://www.namasha.com/v/GUmH1jGX حالت(State) های ReactJS:حالت State مکانی است که داده ها از آن سرچشمه می گیرند. همواره بهتر است تا حد امکان حالت خود را ساده در نظر بگیریم و تعداد اجزای حالت دار را به حداقل برسانیم. مثلا اگر ده جزء داشته باشیم که داده هایی را از حالتی نیاز دارند، بهتر است یک جزء نگهدارنده را ایجاد کنیم که این حالت را برای تمامی این اجزا نگهداری کند.استفاده از Props در ReactJSدر نمونه کد زیر چگونگی ایجاد یک جزء حالت دار با استفاده از سینتکس EcmaScript2016 نشان داده شده است.App.jsximport React from &#39;react&#39;;class App extends React.Component {   constructor(props) {      super(props);               this.state = {         header: &#34;Header from state...&#34;,         content: &#34;Content from state...&#34;      }   }   render() {      return (         &lt; div &gt;            &lt; h1 &gt;{this.state.header}&lt; /h1 &gt;            &lt; h2 &gt;{this.state.content}&lt; /h2 &gt;         &lt; /div &gt;      );   }}export default App;main.jsimport React from &#39;react&#39;;import ReactDOM from &#39;react-dom&#39;;import App from &#39;./App.jsx&#39;;ReactDOM.render(&lt; App / &gt;, document.getElementById(&#39;app&#39;));این کار باعث می شود نتیجه ی زیر نمایش داده شود.پایان قسمت پنجم آموزش Reactjsاین آموزش تصویری ادامه دارد</description><category>p.kalantar.n</category><author>p.kalantar.n</author><pubDate>Tue, 25 Feb 2020 18:34:30 +0330</pubDate></item></channel></rss>