اما در زبان پاسکال ما دقیقا یک همچین مفهومی رو داریم (توابع متداخل). یعنی شما میتونید در داخل یک تابع یک تابع (و یا بیشتر) دیگه رو ایجاد کنید و ازش استفاده کنید .
Pascal Family تنها زبان هایی هست که هیچ وقت سراغشون نرفتم و از این موضوع اصلا اطلاع نداشتم !!! نکته ی جالبی بود...
البته در C هم ظاهرا همچین چیزی امکان پذیر بود اما من اطلاع نداشتم ولی در C++ برداشته شد اما در C++ میشه با یک ترفند اینکار پیاده کرد ، اما توصیه میشه اصلا اینکار رو انجام ندین چون کار بیهوده ای است :
البته روش دیگری که برای نوشتن تابع های تو در تو به ذهنم میرسه ، استفاده از تابع های inline است ، درسته که از لحاظ پیاده سازی جدا از هم نوشته میشن ، اما در زمان کامپایل تابع inline که صدا زده میشه به جای فراخوانی خودش نوشته میشه ، اینکار باعث میشه سرعت کامپایل کمی بالا تر هم بره ، اما اصولا از تابع های inline هم زیاد استفاده نمیشه در برنامه نویسی مدرن...
در ضمن در مدل رویه ای حتی بازم میشه کد منُ به شکل زیر تغییر داد ، یعنی برای تشخصی عدد زوج یک تابع ، و برای فرد یک تابع دیگر و همدیگر را صدا بزنند:
#include <iostream>
#include <conio.h>
using namespace std;
void even(int a);
void odd(int a);
int main()
{
int input_number;
cin>>input_number;
// bool state=check_number(input_number);
/*
if (state)
cout<<"even"<<endl;
else
cout<<"odd"<<endl;
*/
odd(input_number);
getch();
return 0;
}
void even(int a)
{
if ((a%2)==0)
cout<<"number is even"<<endl;
else
odd(a);
}
void odd(int a)
{
if ((a%2)!=0)
cout<<"number is odd"<<endl;
else
even(a);
}
این کد رو از اینجا گرفتم ، هرچند در این مقاله هدف معرفی مفهوم دیگری بود اما خوب مثالش به کارمون اومد!!
عالیه من واقعا لذت بردم
شما فکر خیلی خلاقی دارید و این برای من خیلی خوشحال کننده اس که کسی مثل شما در بین ماست
در مورد زبان سی اگه بتونید رفرنسی گیر بیارید خیلی خوب میشه چون من چیزی در این رابطه نمیدونم (هرچند سی کار نیستم ولی تو کتاب پرات هم اینطور اومده بود که سی چنین قابلیتی نداره بنظرم)
در مورد نمونه هایی که مثال زدید من کمی نظرم متفاوته .
استفاده شما از استراکت برای شبیه سازی نسبی خیلی جالب و قشنگ بود ,منتها این میشه استفاده از یه بیلدینگ بلاک و یک تایپ کاملا جداگانه و استفاده از اون تایپ .
توابع inline هم منحصرا در سی ++ توسط کامپایلر مشخص میشن . درسته که برنامه نویس میتونه تابعی رو اینلاین تعریف کنه اما در زمان ایجاد کد این کامپایلر هست که مشخص میکنه کدی بصورت اینلاین ایجاد بشه یا خیر (فقط در ورژنهای قدیمی کامپایلرهای سی++ این اتفاق صورت نمیگره ورژنهای جدید تا جایی که من اطلاع دادم همه این چک رو اعمال میکنن )
چیزی که به ذهن من میرسه برای شبیه سازی تعریف تابع تو تابع در سی ++ استفاده از lambda function ها هست:
مثلا :
#include <iostream>
using namespace std;
int main()
{
[] { cout << "In the name of God"; }();
return 0;
}
یا
#include <iostream>
using namespace std;
int main()
{
auto lambdafunction = [] { cout << "In the name of God"; };
lambdafunction();
return 0;
}
توابع لامبدا در اخرین ورژن زبان سی++ (سی++11) معرفی شدن و تازه چند ماهی میشه که کامپایلرها ازش پشتیبانی میکنن (gcc4.8 بعید میدونم ویژال استودیو 2012 پشتیبانی کاملی داشته باشه هنوز )
توابع لامبدا همونطور که مشخص هستن گونه از توابع این لاین بشمار میان که برای انعطاف بیشتر زبان و سرعت بیشتر ایجاد شدن و مورد ستفاده قرار میگیرن . (این نوع با توابعی که به صورت Inline تعریف میشن متفاوتن که بالا توضیح دادم) توابع لامبدا هم چون واقعا کاربردی هستن و بعضی کاراها رو خیلی راحت میکنن استفاده های زیادی دارن.
lambda expression و anonymous method تو سی شارپ هم معادل همین مفهوم سی ++ هستن که میشه ازشون استفاده کرد.
نوشته اصلی توسط jellyfish
جناب حسین سلام . ببینین من الان موضوع صحبتم سی شارپه . در اموزش اون به دانشجوها در مبانی رویکرد consoleApplication هست . یعنی چیدمان دستورات برای اجرای کار با for . if . ... . در پیشرفته علیرغم اینکه هدف اموختن تکنیکهای نوشتن برنامه های بزرگه اساتید سریع شروع به توضیحات منوها میکنن . این یعنی دانشجوها کپی پیست و اصلا سبک برنامه نویسی رو ندارن و نمیدونن یعنی چی ؟ من سعی میکنم با جزئیات جلو برم که با دید بازتری کارکنم و با خوندن مثالهای مختلف تفاوتها رو میبینم . یعنی یک صورت سوال با چند روش . معلومه که اگر برنامه ای شی گرا باشه کم غلط تر . با توسعه بیشتر . خواندنی تر هست علیرغم اینکه در نوشتنی بودن بدتر . ولی چون من تازه کارم یک برنامه رو از هر روشی انجام میدم تا کارم بهتر بشه . در مورد پاسکال حق با شماست ولی ++c رو کار نکردم . از اونجایی که همیشه عجولم و زودی میخام جواب تو ذهنم رو پیدا کنم بد توضیح میدم . ببخشید . ولی از لینک دوستمون خیلی خوشم اومده . شما هم اصلا رو در باسی نکنید . اگر اشتباهی داشتم بگید . دوست دارم برنامه هام رو مثل ایشون منم بزارم . اونوقت میبینید که چی کار میکنم . فعلا بجای استفاده از متد ها و ... سعی میکنم از دستورات و نوشتن اونها استفاده کنم . مثل فاکتوریل . عدد نپر و ... . .
سلام ممنونم که توضیح دادید متوجه سوالتون شدم .
اما من بیشتر منظورم ویرایش پست اولتون با عنوان بهتر بود. الان ماژولار یعنی چی ؟ یکی برفرض مثال مشکل شما رو داشته باشه خیلی بعیده بتونه با استفاده از اسم تاپیک به این مطلب برسه . برای همین عرض کردم لطف کنید یه عنوان مناسبتر انتخاب کنید و پست اول رو ویرایش کنید که اگه یکی مثل شما این مشکل رو داشت بتونه این مطلب رو ببینه و احیانا مشکلش برطرف بشه .
من رو دروایسی نمیکنم فقط مطلبی که به ذهنم میرسه سعی میکنم بگم و دوست ندارم سوء برداشتی بشه (ما متاسفانه چند مورد داشتیم برای همین حساسیم که خدای نکرده رفتار یا برخورد ما باعث نشه دوستان سوئ تفاهمی براشون پیش بیاد یا از ما ناراحت بشن )
شما برنامه ها رو بزارید و لطف هم بکنید مثل جناب مهندس توضیح مناسب رو هم بدید عجول نباشید تا زحمتی که میکشید برای همه قابل استفاده باشه .
پس یادتون نره لطف کنید پست اول رو با این توضیحات یا توضیحات بهتر تکمیل کنید و یه عنوان مناسبتر هم انتخابکنید که ادم با دیدنش بدونه با چی طرفه.
خیلی ممنونم
رای من خیلی خوشحال کننده اس که کسی مثل شما در بین ماست
مطمئنا برای من هم خوشحال کننده است که میتونم با شما و دیگران تبادل اطلاعات کنم ، چون باعث میشه هم اطلاعات خودم بالا بره و بروز بشه و همینطور به بچه های دیگه کمکی کرده باشم البته اگر چیزی بلد باشم...
نوشته اصلی توسط Hossein
چیزی که به ذهن من میرسه برای شبیه سازی تعریف تابع تو تابع در سی ++ استفاده از lambda function ها هست:
با lambda expression تو C# آشنا بودم اما نمیدونستم تو C++ عبارات lambda اضافه شده ، با msvc2012 که تست کردم جواب داد با کامپایلر mingw هم تست کردم جواب داد...
در مورد زبان سی اگه بتونید رفرنسی گیر بیارید خیلی خوب میشه چون من چیزی در این رابطه نمیدونم (هرچند سی کار نیستم ولی تو کتاب پرات هم اینطور اومده بود که سی چنین قابلیتی نداره بنظرم)
چیزی که به ذهن من میرسه برای شبیه سازی تعریف تابع تو تابع در سی ++ استفاده از lambda function ها هست:
با lambda expression تو C# آشنا بودم اما نمیدونستم تو C++ عبارات lambda اضافه شده ، با msvc2012 که تست کردم جواب داد با کامپایلر mingw هم تست کردم جواب داد...
در مورد زبان سی اگه بتونید رفرنسی گیر بیارید خیلی خوب میشه چون من چیزی در این رابطه نمیدونم (هرچند سی کار نیستم ولی تو کتاب پرات هم اینطور اومده بود که سی چنین قابلیتی نداره بنظرم)
خیلی ممنونم دیدم مقاله رو . اما اونجا هم اومده که خود زبان پشتیبانی نمیکنه منتها تو GCC براش یه لنگویج اکستنشن درنظر گرفتن و فقط اونجا پشتیبانی میشه ازش:
Standard C and C++ do not support nested functions, but: GCC supports nested functions in C, as a language extension
سلام دوستان . من ++c کار نکردم . و لینکهای دوستمون باعث شد تا با فکر بهتری سرچ کنم . بیشتر وبلاگ ها رو دیدم . خوب هست ولی تو تریس زیاد جواب نمیده و من رو هر سوال وقت زیادی میزارم . لطفا در مورد سی شارپ لینکهای خوبی مثل اولین لینک معرفی تون که قسمتهای مشخصی شامل ارایه . توابع . ... . داره رو معرفی کنین . ممنون . .
. لطفا در مورد سی شارپ لینکهای خوبی مثل اولین لینک معرفی تون که قسمتهای مشخصی شامل ارایه . توابع . ... . داره رو معرفی کنین . ممنون . .
مطمئنا بهترین Reference برای یاد گیری C# خود msdn مایکروسافت است ، اما اگر می خواهید روی دات نت به صورت کامل مسلط شید ، و از جزئیات اون با خبر شید پیشنهاد میکنم کتاب CLR Via Csharp که اثر آقای جفری ریچر هستُ مطالعه کنید...
ممنون جناب Tishab .اولیه رو دیده بودم .ولی در کل برای من دومی خیلی بهتره . سومی هم خوبه ولی چهار رومیه خوب نیست . در کل سی شارپ رو از کتاب طراحی سیستم های شی گرا با زبان #c از انتشارات فن اوری نوین ( بابل - چهار راه نواب - کاظم بیگی - جنب حسینیه منصور کاظم بیگی - طبقه همکف - کد پستی : 4716773447 - تلفن : (0111) 2256687 ) دنبال میکنم . این کتاب روش اموزشی جدید مثل فیلمهای اموزشی دانشگاههای انلاین رو داره و طوریه که به تنهایی میتونی پیش بری . امیدوارم همه استفاده کنن . من میخام وقتی یک برنامه رو شروع میکنم بتونم با یاد گرفتن مطالب جدید همون رو گسترش بدم . گیرم اینطوریه . مثلا سریها رو بلدم . الان دیگه هرچی فرمول بهم بدن میتونم برنامش رو بنویسم ولی تو متد همین سریها به خاطر تنوع زیاد و استثناها میمونم . منظورم ارسال و دریافت متغیرها با out . ref ... هست . در کل میخام مثال های حل شده رو پرینت بگیرم و بخونم . این چیزیه که دنبالشم . .
جناب Tishab شما استادین ؟ نرم افزار ؟ اخه بچه ها استاد خطاب میکنن . من که دورم و تا حالا زیارتتون نکردم ولی فکر میکنم شما و فرشته خانم از دانشجوهای سابق و یا از اساتید فعلیه دانشگاه هستید . اگه اینطوریه یکم مثال برامون بزارین . ممنون .
جناب Tishab شما استادین ؟ نرم افزار ؟ اخه بچه ها استاد خطاب میکنن . من که دورم و تا حالا زیارتتون نکردم ولی فکر میکنم شما و @Freshte فرشته خانم از دانشجوهای سابق و یا از اساتید فعلیه دانشگاه هستید . اگه اینطوریه یکم مثال برامون بزارین . ممنون .
نه..... استاد نیستم ..!!
ویرایش توسط Tishab : 8th May 2013 در ساعت 01:05 AM
علاقه مندی ها (Bookmarks)