FLEX程序设计--函数
函数:函数是封装起来的一段特定的代码块,目的是为了更好的重用代码,更容易维护.
1.定义函数
格式:作用域 function 函数名(参数1,参数2,....) : 返回类型
{
函数体
}
Code
/*************************************
* 创建获取全名的函数
* ************************************/
private function GetFullName(fName:String, lName:String):String
{
// 组合名字
var fullName:String = fName + " " + lName;
// 返回全名
return fullName;
}
/*************************************
* 创建获取全名的函数
* ************************************/
private function GetFullName(fName:String, lName:String):String
{
// 组合名字
var fullName:String = fName + " " + lName;
// 返回全名
return fullName;
}
2.函数调用
格式:函数名(参数1,参数2,参数3,...);
Code
//包
package
{
import flash.display.Sprite;
//类名
public class FunctionExample extends Sprite
{
/*************************************
* 构造函数
* ************************************/
public function FunctionExample()
{
// 调用函数
var fullName:String = GetFullName("Tom", "Green");
// 输出
trace("全名是:" + fullName);
}
/*************************************
* 创建获取全名的函数
* ************************************/
private function GetFullName(fName:String, lName:String):String
{
// 组合名字
var fullName:String = fName + " " + lName;
// 返回全名
return fullName;
}
}
}
//包
package
{
import flash.display.Sprite;
//类名
public class FunctionExample extends Sprite
{
/*************************************
* 构造函数
* ************************************/
public function FunctionExample()
{
// 调用函数
var fullName:String = GetFullName("Tom", "Green");
// 输出
trace("全名是:" + fullName);
}
/*************************************
* 创建获取全名的函数
* ************************************/
private function GetFullName(fName:String, lName:String):String
{
// 组合名字
var fullName:String = fName + " " + lName;
// 返回全名
return fullName;
}
}
}
3.函数作用域:函数是有权限,分为公有和私有.公有关键字public,私有关键字private.
Code
package
{
public class SongInfo
{
/************************************
* 根据歌曲名获取歌手信息
* */
public function GetSinger(songTitle:String):String
{
var singer:String = "";
switch(songTitle)
{
case "改变自己":
singer = "王力宏";
break;
case "夜曲":
singer = "周杰伦";
break;
case "知足":
singer = "五月天";
break;
case "就是爱你":
singer = "陶喆";
break;
}
return singer;
}
/************************************
* 根据歌曲名获取歌手信息
* */
public function GetAlbumInfo(songTitle:String):String
{
return GetAlbum(songTitle);
}
/************************************
* 根据歌曲名获取歌手信息
* */
private function GetAlbum(songTitle:String):String
{
var album:String = "";
switch(songTitle)
{
case "改变自己":
album = "改变自己";
break;
case "夜曲":
album = "十一月的萧邦";
break;
case "知足":
album = "知足";
break;
case "就是爱你":
album = "太平盛世";
break;
}
return album;
}
}
}
package
{
public class SongInfo
{
/************************************
* 根据歌曲名获取歌手信息
* */
public function GetSinger(songTitle:String):String
{
var singer:String = "";
switch(songTitle)
{
case "改变自己":
singer = "王力宏";
break;
case "夜曲":
singer = "周杰伦";
break;
case "知足":
singer = "五月天";
break;
case "就是爱你":
singer = "陶喆";
break;
}
return singer;
}
/************************************
* 根据歌曲名获取歌手信息
* */
public function GetAlbumInfo(songTitle:String):String
{
return GetAlbum(songTitle);
}
/************************************
* 根据歌曲名获取歌手信息
* */
private function GetAlbum(songTitle:String):String
{
var album:String = "";
switch(songTitle)
{
case "改变自己":
album = "改变自己";
break;
case "夜曲":
album = "十一月的萧邦";
break;
case "知足":
album = "知足";
break;
case "就是爱你":
album = "太平盛世";
break;
}
return album;
}
}
}
访问上面的函数:
Code
package
{
import flash.display.Sprite;
public class FunctionScopeExample extends Sprite
{
/*************************************
* 构造函数
* ************************************/
public function FunctionScopeExample()
{
// 调用函数
GetSongInfo("夜曲");
}
/*************************************
* 获取歌曲信息
* ************************************/
private function GetSongInfo(song:String):void
{
// 声明变量
var singer:String = "";
var album:String = "";
// 实例化
var songInfo:SongInfo = new SongInfo();
// 获取歌手信息
singer = songInfo.GetSinger(song);
// 获取所属专辑
album = songInfo.GetAlbumInfo(song);
// 输出结果
trace("歌曲名:" + song);
trace("歌手:" + singer);
trace("所属专辑:" + album);
}
}
}
package
{
import flash.display.Sprite;
public class FunctionScopeExample extends Sprite
{
/*************************************
* 构造函数
* ************************************/
public function FunctionScopeExample()
{
// 调用函数
GetSongInfo("夜曲");
}
/*************************************
* 获取歌曲信息
* ************************************/
private function GetSongInfo(song:String):void
{
// 声明变量
var singer:String = "";
var album:String = "";
// 实例化
var songInfo:SongInfo = new SongInfo();
// 获取歌手信息
singer = songInfo.GetSinger(song);
// 获取所属专辑
album = songInfo.GetAlbumInfo(song);
// 输出结果
trace("歌曲名:" + song);
trace("歌手:" + singer);
trace("所属专辑:" + album);
}
}
}
返回结果:
歌曲名:夜曲
歌手:周杰伦
所属专辑:十一月的萧邦
5.函数的参数
5.1.值参数:值参数传入函数体后复制一个副本在函数内使用不会影响外部变量的值.
Code
public function ArgumentsExample()
{
// 值参数
var fName:String = "Lalo";
trace("传递之前的变量值:" + fName);
PassPrimitives(fName);
trace("传递之后的变量值:" + fName);
}
/************************************
* 值传递参数
* */
private function PassPrimitives(fName:String):void
{
fName = "hello!" + fName;
trace("函数返回值:" + fName);
}
/*返回值
传递之前的变量值:Lalo
函数返回值:hello!Lalo
传递之后的变量值:Lalo
*/
public function ArgumentsExample()
{
// 值参数
var fName:String = "Lalo";
trace("传递之前的变量值:" + fName);
PassPrimitives(fName);
trace("传递之后的变量值:" + fName);
}
/************************************
* 值传递参数
* */
private function PassPrimitives(fName:String):void
{
fName = "hello!" + fName;
trace("函数返回值:" + fName);
}
/*返回值
传递之前的变量值:Lalo
函数返回值:hello!Lalo
传递之后的变量值:Lalo
*/
引用参数:引用参数传入函数体后部会产生一个副本,而是传递一个参数的引用,所以函数内部所做的修改会影响到外部引用变量的值.
Code
public function ArgumentsExample()
{
// 引用参数
var myName:Object = {fName:"Lalo"};
trace("传递之前的变量值:" + myName.fName);
PassByRef(myName);
trace("传递之后的变量值:" + myName.fName);
}
/************************************
* 引用传递参数
* */
private function PassByRef(myName:Object):void
{
myName.fName = "Tom";
trace("函数返回值:" + myName.fName);
}
/*返回结果:
传递之前的变量值:Lalo
函数返回值:Tom
传递之后的变量值:Tom
*/
public function ArgumentsExample()
{
// 引用参数
var myName:Object = {fName:"Lalo"};
trace("传递之前的变量值:" + myName.fName);
PassByRef(myName);
trace("传递之后的变量值:" + myName.fName);
}
/************************************
* 引用传递参数
* */
private function PassByRef(myName:Object):void
{
myName.fName = "Tom";
trace("函数返回值:" + myName.fName);
}
/*返回结果:
传递之前的变量值:Lalo
函数返回值:Tom
传递之后的变量值:Tom
*/
5.3默认参数:定义了默认参数后,传值时可以将其省略,但是默认参数必须放在非默认参数后面.
Code
public function ArgumentsExample()
{
// 默认参数
DefaultArguments(2, 5);
}
/************************************
* 默认参数
* */
private function DefaultArguments(x:int, y:int, z:int = 10):void
{
trace(x, y, z);
}
/*返回结果:2 5 10*/
public function ArgumentsExample()
{
// 默认参数
DefaultArguments(2, 5);
}
/************************************
* 默认参数
* */
private function DefaultArguments(x:int, y:int, z:int = 10):void
{
trace(x, y, z);
}
/*返回结果:2 5 10*/
5.4arguments对象参数:arguments对象是一个数组,保存着所有传递过来的参数信息,可以应用arguments对象获得所有的参数信息,arguments.length属性获得参数的个数.
Code
// arguments 参数
ArgumentsObject(10, 20, 30);
/************************************
* arguments 参数
* */
private function ArgumentsObject(x:int, y:int, z:int):void
{
trace("输出所有参数:");
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}
/*返回结果
10
20
30
*/
// arguments 参数
ArgumentsObject(10, 20, 30);
/************************************
* arguments 参数
* */
private function ArgumentsObject(x:int, y:int, z:int):void
{
trace("输出所有参数:");
for (var i:uint = 0; i < arguments.length; i++)
{
trace(arguments[i]);
}
}
/*返回结果
10
20
30
*/
5.5...(rest)参数:接受多个以逗号分割的参数.
Code
/************************************
* (rest) 参数
* */
private function RestArguments(args):void
{
trace("输出所有参数:");
for (var i:uint = 0; i < args.length; i++)
{
trace(args[i]);
}
}
// (rest) 参数
RestArguments(10, 20, 30);
/*返回结果:
10
20
30
*/
/************************************
* (rest) 参数
* */
private function RestArguments(args):void
{
trace("输出所有参数:");
for (var i:uint = 0; i < args.length; i++)
{
trace(args[i]);
}
}
// (rest) 参数
RestArguments(10, 20, 30);
/*返回结果:
10
20
30
*/
6.递归函数:反复调用自身的函数.
Code
public function SelfFunctionExample()
{
trace("递归函数的结果:" + SelfFunction(6));
trace(GetFullName());
}
* 递归函数
* */
public function SelfFunction(x:int):int
{
if(x == 0)
{
return 0;
}
else
{
return 2 * SelfFunction(x-1) + x * x;
}
}
/*返回结果:
递归函数的结果是:318
*/
public function SelfFunctionExample()
{
trace("递归函数的结果:" + SelfFunction(6));
trace(GetFullName());
}
* 递归函数
* */
public function SelfFunction(x:int):int
{
if(x == 0)
{
return 0;
}
else
{
return 2 * SelfFunction(x-1) + x * x;
}
}
/*返回结果:
递归函数的结果是:318
*/