1
2
3
4
5
6
7
|
static void Main( string [] args) { int x = 0; Action action = delegate { Console.WriteLine(x); }; x = 1; action(); } |
یا به فرم ساده تر:
1
2
3
4
5
6
7
|
static void Main( string [] args) { int x = 0; Action action = () => Console.WriteLine(x); x = 1; action(); } |
در ابتدا ممکن است فکر کنید عدد صفر نمایش داده می شود، اما با اجرای برنامه خواهید دید جواب 1 است. اما چطور این اتفاق می افتد؟ در واقع سوال این است که متد های بی نام یا عبارات لامبدا چطور هنگام فراخوانی به پارامتر x و حتی مقدار آپدیت شده ی آن دسترسی پیدا می کنند؟
جواب این سوال ها وجود مفهومی است به نام Closure در پس این سینتکس ساده و روان.
Closure چیست؟
به بیان ساده Closure رفرنسی به یک تابع است، در عین حال که به scop ای که در آن تعریف شده است نیز اشاره دارد. بنابراین می توان عبارت های لامبدا و متد های بی نام را یک Closure دانست.
برای درک این تعریف لازم است چگونگی کار Closure ها را بررسی کنیم:
کامپایلر C# هنگام کامپایل برای هر متد بی نام یک کلاس تولید می کند و متغیر های قابل دسترس در آن scop را نیز به عنوان فیلد هایی از آن کلاس در نظر می گیرد، مثلا برای متد بی نام کد مثال اول، کلاسی مشابه زیر تولید می شود:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[CompilerGenerated] private sealed class <>c__DisplayClass1 { public int x; public void
{ Console.WriteLine( this .x); } } private static void Main( string [] args) { <>c__DisplayClass1 class2 = new <>c__DisplayClass1(); class2.x = 0; Action action = new Action(class2. class2.x = 1; action(); } |
همانطور که می بینید کلاس تولید شده فیلدی به نام x و متدی با بدنه متد بی نام را دارا می باشد که در تابع Main یک آبجکت از این کلاس ساخته شده و فیلد x مقدار دهی شده است و سپس متد موجود در این کلاس به عنوان متد بی نام به Action اختصاص یافته و در انتها مجددا مقدار x به 1 تغییر داده شده است.
در واقع با این مکانیزم است که یک Anonymous Method به کلیه مقادیر و فیلد ها، به خصوص مقادیر آپدیت شده متغیر ها دسترسی دارد.
بد نیست برای کامل تر شدن بحث مثال دیگری را نیز بررسی کنیم.
کد زیر را ببینید:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
namespace Closure { class Program { static Action[] actionArr = new Action[10]; static void FillActions( int count) { for ( int i = 0; i < count; i++) { actionArr[i] = delegate () { Console.WriteLine( "{0} " , i); }; } } static void Main( string [] args) { FillActions(actionArr.Length); for ( int i = 0; i < actionArr.Length; i++) { actionArr[i](); } } } } |
در نگاه اول احتمالا خواهید گفت که عدد 1 تا 10 نمایش داده خواهد شد، اما خروجی به صورت می باشد:
10 10 10 10 10 10 10 10 10 10
همانطور که گفته شد یک Closure رفرنسی به کلیه متغیر ها و خصوصیات قابل مشاهده در آن scop را در خود نگه می دارد. در این مثال حوزه فعالیت متغیر i درون حلقه for بوده و مقدار آن تا 10 افزایش میابد، دقت کنید که scop متغیر i تغییری نمی کند و یا پایان نپذیرفته و متغییر جدیدی ایجاد نمی شود، به همین دلیل است که کلیه متد ها به مقدار نهایی متغییر i اشاره دارند.
فکر می کنم نگاهی به کد تولید شده توسط کامپایلر موضوع را روشن تر کند:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
private static void FillActions( int count) { Action action = null ; <>c__DisplayClass2 class2 = new <>c__DisplayClass2(); class2.i = 0; while (class2.i < count) { if (action == null ) { action = new Action(class2. } actionArr[class2.i] = action; class2.i++; } } |
در واقع به دلیل داشتن یک scop ثابت برای متغیر i، تنها یک شی از کلاس <>c__DisplayClass2 ایجاد شده و بین کلیه action ها به اشتراک گذاشته شده است.
حال فرض کنید حلقه for را به صورت زیر تغییر دهیم:
1
2
3
4
5
6
7
8
|
for ( int i = 0; i < count; i++) { int j = i; actionArr[i] = delegate () { Console.WriteLine( "{0} " , j); }; } |
اینبار مشاهده خواهید کرد که اعداد 1 تا 10 نمایش داده می شود، چرا که scop متعیر j در هر بار اجرای حلقه پایان پذیرفته و مجددا ایجاد خواهد شد، بنابراین کامپایلر برای پیاده سازی درست مفهوم Closure که لازم است هر متد به scop خود اشاره کند، کدی مشابه زیر تولید خواهد کرد:
1
2
3
4
5
6
7
8
9
|
private static void FillActions( int count) { for ( int i = 0; i < count; i++) { <>c__DisplayClass2 class2 = new <>c__DisplayClass2(); class2.j = i; actionArr[i] = new Action(class2. } } |
مشاهده می کنید که در هر حلقه یک شی جدید تولید شده و متغیر j مقدار دهی می شود.
پ.ن: بد نیست بدانید Closure یکی از مباحث پر کاربرد در زبان های functional محسوب می شود و ایده اولیه آن نیز از همین زبان های نشات گرفته شده و برای اولین بار پیاده سازی آن در زبان Scheme انجام شد.
شرکت باما که نام آن برگرفته از شرکت بهره برداری از معادن ایران است در سال 1330 در اصفهان به ثبت رسید و در سال 1334 فعالیت خود را آغاز نمود . این شرکت طی سال 1380 به سهامی عام تبدیل و در اسفند 1382 در بورس پذیرفته شد . فعالیت اصلی این شرکت در حوزهء اکتشاف ، استخراج و بهره برداری از معادن روی است . منطقه اصلی فعالیت شرکت در رشته کوه ایرانکوه و برروی ذخایر سرب و روی این منطقه متمرکز است که در 20 کیلومتری جنوب غربی اصفهان واقع شده است .
باما از معادن تحت مالکیت خود جهت تامین خاک معدنی استفاده می برد و میزان وابستگی به خرید های داخلی و خارجی در آن نستا" پایین است . معدن گوشفیل ، تپه سرخ و کلاه دروازه سه معدن اصلی این شرکت هستند و باعث شده اند تا باما برخلاف همگروهان در تامین خاک با مشکلات بسیار کمتری مواجه باشد .
روند تولید محصولات این شرکت در سالیان اخیر به شرح نمودار زیر بوده است :
مشاهده می کنید که روند تولید دو محصول اصلی شرکت طی 7 سال اخیر نزولی است ، معدن انگوران در سال های قبل بخشی از خاک پرعیار مورد نیاز باما را تامین نموده است ، این خاک چون پرعیار بوده یک مرحله سرب گیری میشد بنابراین هزینه تولید آن پایین تر از معدن های باما بود اما عدم توفیق در زمینه دریافت خاک از معدن انگوران به علت مشکلات استخراج ، میزان تولید کربناته شرکت را کاهش داده فلذا در سال جاری، تولید و فروشی برای این محصول پیش بینی نشده است .
در ادامه قصد داریم وضعیت سودآوری سال جاری شرکت را بررسی کنیم که به همین منظور از جدول زیر استفاده می بریم :
در سناریو تحلیلی نرخ کنسانتره سرب بر اساس عیار 60% ، هزینه ذوب 260 دلاری و نرخ جهانی شمش سرب 1850 دلاری برای 6 ماهه دوم سال یشبینی شده است همچنین نرخ شمش روی هر تن 2150 دلار و در هر دو محصول نسبت دلار به ریال 33000 ریال در نظر گرفته شده است .
بخش بهای تمام شده عمدتا" هزینه استخراج پرداختی به پیمانکاران به موجب قراردادهایی است که جزئیات آن افشاء نگردیده با این حال 50% از هزینه استخراج در 6 ماهه محقق شده است ضمن اینکه نرخ سنگهایکمعیارباما در گزارش بودجه برای 6 ماه دوم بالاتر از نیمه نخست فرض گردیده و بالاتر بودن حاشیه سود 6 ماه نخست نسبت به پیشبینی نشان می دهد که علی رغم پتانسیل رشد در بخش فروش ، بهای تمام شده با شیب بسیار کندتری رشد خواهد کرد به شکلی که می توان بهای تمام شده را در یک حالت معقول در سطح بودجه در نظر گرفت.
باما 41 درصد از سود خالص خود را از محل سرمایه گذاری ها کسب می کند ، بیش از 60% از درآمد سرمایه گذاری در سال جاری حاصل تقسیم سود ذوبرویاصفهان است . این شرکت قصد دارد 7 هزار تن شمش روی در سال جاری به فروش برساند ، در 6 ماهه 3600 تن محصول تولید کرده اما تنها 2320 تن آنرا فروخته ، عمدتا" شرکت ها در این صنعت در آغاز سال میلادی جدید محصول صادر می کنند .
در یک حالت محافظه کارانه می توان گفت سود برآوردی شرکت ذوب روی اصفهان جای رشد 25 میلیارد ریالی دارد . این شرکت یعنی ذوب روی اصفهان می تواند در سال جاری 160 میلیارد ریال سود خالص داشته باشد و زیر مجموعه 100% کاما است لیکن پیشبینی تقسیم سود آن 60% سود خالص است فلذا در واقع سود کاما 80 میلیارد ریال بالاتر از سود فعلی است .
با این تفاسیر EPS شرکت به شکل زیر خواهد بود :
سناریو دوم یعنی تقسیم سود 100% ذوب روی اصفهان بسیار دور از ذهن است چون شرکت بخشی از سود را برای فعالیت خود تقسیم نمی کند اما در واقع چون زیر مجموعهء 100% کاما محسوب میشود نتیجه میگیریم که بواقع کاما چنین سودی به صورت تلفیقی در دل خود دارد و تقسیم سود یا عدم تقسیم سود ذوب اصفهان موضوع مهمی نیست .
در حالی کل بهای تمام شدهء ذوب روی اصفهان برای کاما 80 میلیارد ریال است که ارزش برآوردی این شرکت 750 میلیارد ریال است ضمن اینکه کل ارزش بازار کاما از 2000 میلیارد ریال کمتر است بنابراین میبینیم که در واقع باما پس از 63 سال فعالیت همچنان جذابیت های بنیادی برای معامله گران بلند مدتی دارد .
در پایان یادآور می گردد که شرکت انجام افزایش سرمایهء 150% از محل سود انباشته طی سال جاری را در دستور کار دارد.
علی حضوری
ما همواره در حال فروش محصولی هستیم. این محصول میتواند تولید کارخانهها و بنگاهها و یا ذهن و استعدادهایمان باشد. درنتیجه همه ما برای فروش بهتر نیاز به آموزش داریم.
بازاریابی و فروش محصول بهاندازه تولید محصولات و خدمات و گاهی بیشتر از آن اهمیت دارد. پیدا کردن مشتری برای محصول دارای پیچیدگیهایی است که فروشندگان کارکشته معمولاً بهخوبی از پس آن بر میآیند و سهم بزرگی از بازار را در دست میگیرند.
ما خواهان آن هـستـیم که در هنگام فروش همهچیز عالی و بـه بـهتـریـن نحو پیش رود و از آن مهمتر، میخواهیم پاسخ مشتری مثبت بـاشـد.
ایـن نکـات را هــنگام فروش مدنظر قرار دهید تا شانس موفقیت شما افزایش یابد:(مطالعه بیشتر در ادامه مطلب)
تولید کننده بازی رایانه ای “نیما” با بیان اینکه انتشار بازی با تاخیر مواجه خواهد بود گفت: با توجه به گستردگی کار تولید و تصمیم تیم توسعه بازی مبنی بر افزایش کیفیت بازی و وجود مشکلات مالی و تاخیر در جذب حمایت های مورد نیاز پروژه، انتشار بازی رایانه ای «نیما» با تاخیر مواجه خواهد بود.
به گزارش روابط عمومی بنیاد ملی بازیهای رایانهای”صادق جبلی”، از مخاطبان بازی به دلیل بروز این تاخیر در روند کار عذرخواهی کرد و افزود: تیم توسعه بازی رایانه ای نیما سعی در سرعت بخشیدن روند کار و انتشار بازی دارد.
تولید کننده بازی رایانه ای ” نیما ” ادامه داد: اطلاعات بیشتر و تاریخ دقیق انتشار بازی از طریق وب سایت رسمی بازی به آدرس nimagame.ir منتشر خواهد شد.
مدیر تیم توسعه بازی رایانه ای نیما یاد آور شد: پروژه ساخت بازی از شهریور ۱۳۹۲ توسط گروه متخصص و جوان در مشهد آغاز شده و اکنون با پیشرفت ۹۰ درصدی در مرحله نخست به کارخود ادامه میدهد.
تولید کننده بازی رایانه ای”نیما” افزود: مرحله نخست پروژه، ساخت و عرضه بازی رایانه ای “نیما” برای تلفن همراه بوده و در مرحلههای بعدی، بروزرسانی و توسعه بازی را در دستور کار داریم.
وی با بیان اینکه هدف از ساخت این پروژه، تولید محصولات فرهنگی با کیفیت و مناسب نیازهای جامعه اسلامی- ایرانی است، توضیح داد: این بازی متشکل از مجموعه ای از رسانه های بصری و نوین در عرصه فرهنگی و هنری است.
جبلی به تیم سازنده بازی اشاره کرد و توضیح داد: شرکت طراحان سفید فردا ایرانیان، مجموعه ای از جوانان، متخصص و متعهد هستند که در پارک علم و فناوری خراسان به عنوان واحد فناور (دانش بنیان) مستقر هستند و بیش از ۸ سال سابقه فعالیت در زمینه تولید و عرضه محصولات فرهنگی – فناوری داریم.
وی توجه ویژه به تفریحات سالم در زمینه سبک زندگی، توجه ویژه به خانواده و سبک ازدواج، ارتقاء پویایی، بالندگی و جوانی جمعیت،کاهش سن ازدواج و حمایت از زوج های جوان و توانمندسازی آنان در تامین هزینه های زندگی و تربیت نسل صالح و کارآمد، ترویج و نهادینه سازی سبک زندگی اسلامی – ایرانی، مقابله با ابعاد نامطلوب سبک زندگی غربی، ارتقاء امید به زندگی، تأمین سلامت و تغذیه سالم جمعیّت، توانمندسازی جمعیت در سن کار و تقویت مؤلفه های هویت بخش ملی (ایرانی، اسلامی، انقلابی ) را از محورهای بازی عنوان کرد.
تولید کننده بازی رایانه ای نیما “گیم پلی روان و گسترده”، “داستان جذاب و طنز و بیش از ۲۵۰ مرحله داستانی”، “بیش از ۳۰۰ ماموریت در ۱۵ سبک مختلف”،”امکان ارتقا بازیکن و انواع تقویت کننده ها”،”موسیقی جذاب و مناسب فضای بازی”،”انیمیشن های داستانی کوتاه با کیفیت بالا”،”مسابقات آنلاین”،”نوآوری های گرافیکی”،”امکان ویرایش شخصیت ها و ابزار ها”و”ارائه بر روی انواع تلفن های همراه، تبلت ها و رایانه های شخصی” را از امکانات بازی نام برد.