FLEX程序设计--函数
函数:函数是封装起来的一段特定的代码块,目的是为了更好的重用代码,更容易维护.
1.定义函数
格式:作用域 function 函数名(参数1,参数2,....) : 返回类型
{
函数体
}


/*************************************
* 创建获取全名的函数
* ************************************/
private function GetFullName(fName:String, lName:String):String
{
// 组合名字
var fullName:String = fName + " " + lName;
// 返回全名
return fullName;
}
2.函数调用
格式:函数名(参数1,参数2,参数3,...);


//包
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.


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
{
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.值参数:值参数传入函数体后复制一个副本在函数内使用不会影响外部变量的值.


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 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默认参数:定义了默认参数后,传值时可以将其省略,但是默认参数必须放在非默认参数后面.


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属性获得参数的个数.


// 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)参数:接受多个以逗号分割的参数.


/************************************
*

* */
private function RestArguments(

{
trace("输出所有参数:");
for (var i:uint = 0; i < args.length; i++)
{
trace(args[i]);
}
}
//

RestArguments(10, 20, 30);
/*返回结果:
10
20
30
*/
6.递归函数:反复调用自身的函数.


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
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?