return

با سلام،

یک تابع داریم که در اون تابع هم تابعی دیگه داره. در تابع دوم باید یک مقداری رو به برنامه اصلی برگردونم که نمیشه و مقدار به تابع اول برمیگرده!
برای حل این مشکل باید چکار کنم؟

ممنون
 

++Hadi++

Active Member
سلام

PHP:
var A:Number=5;
var B:Number=7;
var C:Number;
Fun01();
function Fun01():void
{
    C=2*(Fun02(A,B))+3;
    trace(C);//OutPut:27
}
function Fun02(a:Number,b:Number):Number
{
    return a+b
}
 
تشکر هادی خان

منظور من یه چیز تو این مایه هاست:

PHP:
function qwe(){
function qwer(){
return("a");
}
}

حال من می خوام اون return از تابع اولی بیاد بیرون.

ممنون
 

++Hadi++

Active Member
این کار یکم اشکال داره ولی اینم کد :
PHP:
var A:Number=5;
var B:Number=9;
var C:Number=0;
Fun01();//OutPut:56

function Fun01():void
{
    C=Fun02(A,B);
    trace(C);
    function Fun02(a:Number,b:Number):Number
    {
        return (a*b)+11;
    }
}

تا یه تابع رو صدا نزنی ، اون فعال نمی شه و اشکال سر این بود که شما اونو صدا نزده بودین .
به اون قسمتی که تابع رو صدا می زنین می گن امضای تابع .
کد بالا رو اینجوری هم می شه نوشت :
PHP:
var A:Number=5;
var B:Number=9;
var C:Number=0;
Fun01();//OutPut:56

function Fun01():void
{
    C=Fun02(A,B);
    trace(C);
}
function Fun02(a:Number,b:Number):Number
{
        return (a*b)+11;
}
و فرق این دو تا در اینه که Fun02 در کد دوم ، سراسری هست و در کل جاها قابل دسترسی هست ولی در کد اول و فقط در داخل تابع Fun01 قابل دسارسی هست .
یعنی :
PHP:
var A:Number=5;
var B:Number=9;
var C:Number=0;
C=Fun02(A,B);
trace(C);//OutPut:56

function Fun01():void
{
    C=Fun02(A,B);
    trace(C);
}
function Fun02(a:Number,b:Number):Number
{
        return (a*b)+11;
}

ولی در حالتی که خودت نوشتی اینطوری می شه :
PHP:
var A:Number=5;
var B:Number=9;
var C:Number=0;
C=Fun02(A,B);
trace(C);//OutPut:Error :1180: Call to a possibly undefined method Fun02.

function Fun01():void
{
    function Fun02(a:Number,b:Number):Number
    {
        return (a*b)+11;
    }
}

دیدی ، بهتره اونو سراسری تعریف کنی نه محلی ، اینو یه بار در مورد متغیر بهت گفته بودم .
بای...
 
شکراً جزیل و اجراً عظیم

هادی خان ببینید فرض کنید یه تابع به نام fun0 داریم حالا تو این تابع یه سری کارها انجام میشه که نیاز است یک فانکشن دیگه داخل اون تعریف کرد به نام fun1 مثل همون مثال خودم. حالا جوابی رو که fun1 ایجاد میکنه باید از fun0 خارج بشه، یعنی اینکه در کل وقتی میزنیم:
PHP:
fun0(1,4);
باید جواب fun1 بیاد بیرون.
آیا راهی برای انجام این کار هست؟

ممنون
 

firestar9000

New Member
اگه منظورت رو درست فهميده باشم مي توني از نام گذاري هم استفاده كني. به مثال زير يه توجهي كن.

PHP:
var iNum = 0 ;
outermost :
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if( i==5 && j==5 ){
break outermost;
}
iNum++ ;
}
راستي يادت باشه كه مخخف function بهتره كه func باشه

شايدم بتوني اين طوري كني.
PHP:
function myFunc1(value1:Number):void{
function myFunc2(value2:Number):void{
// your code and command
}
return value1*value2
};
 
آخرین ویرایش:
ممنون

اما این یک مثال خیلی واضحه:
PHP:
loadFile("start.txt");

function loadFile(a:String):String {
	var loader:URLLoader = new URLLoader();
	var request:URLRequest = new URLRequest(a);
	try {
		loader.load(request);
	} catch (error:Error) {
		trace("Unable to load requested document.");
	}
	loader.addEventListener(Event.COMPLETE, completeHandler);
	function completeHandler(event:Event) {
		var loader:URLLoader = URLLoader(event.target);
		return loader.data;
	}
}

برای این کد چه باید کرد؟
 

++Hadi++

Active Member
return رو وقتی در یه تابع قرار می دی ، کارش اینه که یه چیزی رو بر گردونه . پس باید نوع خروجی تابع خودتو از نوع خروجی قرار بدی فرض کن قراره تابع زیر یه String رو بیرون پاس بده پس در تعریف اون می نویسی :
PHP:
trace(FunString());//OutPut:Hello
function FunString():String
{
    return "Hello";
}
به عبارت String در تعریف اون نگاه کن ، باید نوع خروجی return شده ات با نوع اون در تعریف برابر باشه .
وقتی تابعی قرار هست عبارت یا شی خاصی رو بیرون return کنه ، این تابع شبیه به یه متغیر پیشرفته عمل می کنه یعنی چی ؟
یعنی اینکه شی تابع شما مثل یه متغیر Convertor عمل می کنه که وقتی چیزایی رو بهش پاس می دین یا اگه چیزی رو واسه ورودی نیاز نداشته باشه ، اون چیزی که ازش خارج می شه در محاسبات قرار می گیره ، دو دستور زیر معادل همند :
PHP:
var A:Number=5;
var B:Number=10;
var C:Number=0;
C=A+B;
trace(C);//OutPut:15
دستور بالا با دستور پایین هم ارزه :
PHP:
var A:Number=5;
var C:Number=0;
function B():Number
{
    return 10;
}
C=A+B();
trace(C);//OutPut:15
پس می بینی که در مورد توابع بازگرداننده مقادیر ، می شه گفت اونا نقش متغیر های پیشرفته رو عمل می کنند که می تونن روی یه سری عملیات خاص کار کنند و به صورت پیشرفته تر ، چیزی رو از خودشون خارج کنند و در محاسبات قرار بدن .
این دستور درست هست :
PHP:
loadFile("start.txt");
function loadFile(a:String):void
{
    var loader:URLLoader = new URLLoader();
    var Request:URLRequest = new URLRequest(a);
    try
    {
        loader.load(Request);
       }
    catch (error:Error)
    {
            trace("Unable to load requested document.");
    }
    finally
    {
          loader.addEventListener(Event.COMPLETE, completeHandler);
    }
}  
function completeHandler(event:Event):void
{
        var Str:String =String(event.target.data);
        trace(Str);
}
از توابع بازگرداننده مقدار یا شی ، در جایی استفاده می شه که قرار هست یه سری عملیات خاص روی عده ای از متغیر ها و مقادیر انجام بگیره و خروجی خاصی از نوع خاص بیاد بیرون تا از اون خروجی در عملیات محاسباتی استفاده شه .
بای....
 
خسته نباشید و تشکر بابت مطالب ارزشمندتون ...
خوب آقا هادی نمیشه کاری کرد که وقتی این تابع رو زدیم:
PHP:
trace(loadFile("start.txt"));
محتویات start.txt نماش پیدا کنه؟
چه راهی رو برای کار ما پیشنهاد میکنید؟

ممنون
 
آخرین ویرایش:

++Hadi++

Active Member
سلام
چون نیاز هست از یه تابع برای Complete شدن به یه تابع دیگه بریم ، پس یه جورایی بی نتیجه به نظر می رسه ، من این کار رو کردم :
PHP:
trace(loadFile("start.txt"));
function loadFile(a:String):String
{
    var loader:URLLoader = new URLLoader();
    var Request:URLRequest = new URLRequest(a);
    var Text:String;
    loader.load(Request);
    loader.addEventListener(Event.COMPLETE, completeHandler);
    loader.addEventListener(IOErrorEvent.IO_ERROR, err);
    function completeHandler(event:Event):void
    {
        Text=String(event.target.data);
    }
    function err(event:Event):void
    {
         Text="Unable to load requested document.";
    }
    return Text;
}
و جواب null بود ، حتی واسه setTimeout هم نیاز هست به تابع دیگه ای بریم و چون پای رویداد و تابع دیگه وسط هست ، پس همه اینها در یک پالس زمانی اجرا اتفاق نمی افتند و از نظر من این بی نتیجه هست و شاید راهی باشه دوست عزیز ولی اون به ذهن من نرسید .
بای...
 

جدیدترین ارسال ها

بالا