Dart匿名方法函数和闭包
/*
内置方法/函数: print(); 自定义方法:
自定义方法的基本格式: 返回类型 方法名称(参数1,参数2,...){
方法体
return 返回值;
}
*/ void printInfo(){
print('我是一个自定义方法');
} int getNum(){
var myNum=123;
return myNum;
} String printUserInfo(){ return 'this is str';
} List getList(){ return ['111','2222','333'];
} void main(){ // print('调用系统内置的方法'); // printInfo();
// var n=getNum();
// print(n); // print(printUserInfo()); // print(getList()); // print(getList()); //演示方法的作用域
void xxx(){ aaa(){ print(getList());
print('aaa');
}
aaa();
} // aaa(); 错误写法 xxx(); //调用方法 }
//调用方法传参 main() { //1、定义一个方法 求1到这个数的所有数的和 60 1+2+3+。。。+60 /*
int sumNum(int n){
var sum=0;
for(var i=1;i<=n;i++)
{
sum+=i;
}
return sum;
} var n1=sumNum(5);
print(n1);
var n2=sumNum(100);
print(n2); */ //2、定义一个方法然后打印用户信息 // String printUserInfo(String username,int age){ //行参
// return "姓名:$username---年龄:$age";
// } // print(printUserInfo('张三',20)); //实参 //3、定义一个带可选参数的方法 // String printUserInfo(String username,[int age]){ //行参 // if(age!=null){
// return "姓名:$username---年龄:$age";
// }
// return "姓名:$username---年龄保密"; // } // // print(printUserInfo('张三',21)); //实参 // print(printUserInfo('张三')); //4、定义一个带默认参数的方法 // String printUserInfo(String username,[String sex='男',int age]){ //行参 // if(age!=null){
// return "姓名:$username---性别:$sex--年龄:$age";
// }
// return "姓名:$username---性别:$sex--年龄保密"; // } // print(printUserInfo('张三')); // print(printUserInfo('小李','女')); // print(printUserInfo('小李','女',30)); //5、定义一个命名参数的方法 // String printUserInfo(String username,{int age,String sex='男'}){ //行参 // if(age!=null){
// return "姓名:$username---性别:$sex--年龄:$age";
// }
// return "姓名:$username---性别:$sex--年龄保密"; // } // print(printUserInfo('张三',age:20,sex:'未知')); //6、实现一个 把方法当做参数的方法 // var fn=(){ // print('我是一个匿名方法');
// };
// fn(); //方法
fn1(){
print('fn1');
} //方法
fn2(fn){ fn();
} //调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1);
}
void main(){ /*需求:使用forEach打印下面List里面的数据*/ // List list=['苹果','香蕉','西瓜'];
// list.forEach((value){
// print(value);
// });
// list.forEach((value)=>print(value));
// list.forEach((value)=>{
// print(value)
// }); /*需求:修改下面List里面的数据,让数组中大于2的值乘以2*/ List list=[4,1,2,3,4]; // var newList=list.map((value){ // if(value>2){
// return value*2;
// }
// return value; // });
// print(newList.toList()); // var newList=list.map((value)=>value>2?value*2:value); // print(newList.toList()); /*
需求: 1、定义一个方法isEvenNumber来判断一个数是否是偶数
2、定义一个方法打印1-n以内的所有偶数
*/ //定义一个方法isEvenNumber来判断一个数是否是偶数
bool isEvenNumber(int n){
if(n%2==0){
return true;
}
return false;
} printNum(int n){
for(var i=1;i<=n;i++){
if(isEvenNumber(i)){
print(i);
}
}
} printNum(10); }
int getNum(int n){ return n;
} void main(){ // print(getNum(12)); //匿名方法 // var printNum=(){ // print(123);
// }; // printNum(); // var printNum=(int n){ // print(n+2);
// }; // printNum(12); //自执行方法 // ((int n){
// print(n);
// print('我是自执行方法');
// })(12); //方法的递归
// var sum=1;
// fn(n){
// sum*=n;
// if(n==1){
// return ;
// }
// fn(n-1); // } // fn(5);
// print(sum); //通过方法的递归 求1-100的和 var sum=0;
fn(int n){ sum+=n; if(n==0){
return;
}
fn(n-1);
} fn(100);
print(sum); }
/*
闭包: 1、全局变量特点: 全局变量常驻内存、全局变量污染全局
2、局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局 /* 想实现的功能: 1.常驻内存
2.不污染全局 产生了闭包,闭包可以解决这个问题..... 闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存) 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。 */
*/
/*全局变量*/
var a=123; void main(){ // print(a); // fn(){
// a++;
// print(a);
// }
// fn();
// fn();
// fn(); //局部变量
// printInfo(){
// var myNum=123;
// myNum++;
// print(myNum);
// }
// printInfo(); // printInfo();
// printInfo(); //闭包 fn(){
var a=123; /*不会污染全局 常驻内存*/
return(){
a++;
print(a);
};
}
var b=fn();
b();
b();
b();
}
Dart匿名方法函数和闭包的更多相关文章
- 【Dart学习】-- Dart之匿名方法 & 回调函数 & 闭包
一,匿名方法定义 (参数1,参数2,....){ 方法体... return 返回值 } 二,匿名方法特性 可赋值给变量,通过变量进行调用 可在其他方法中直接调用或传递给其他方法 void main( ...
- 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包
0x00 前言 通过上一篇博客<匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的>的内容,我们实现了使用委托来构建我们自己的消息系统的过程.但是在日常的开发中,仍然有很多开发者因为 ...
- JavaScript 闭包系列二(匿名函数及函数的闭包)
一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) { return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...
- C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...
- JavaScript基础---作用域,匿名函数和闭包
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...
- JavaScript基础---作用域,匿名函数和闭包【转】
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】
(function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有 ...
- 第一百一十节,JavaScript匿名函数和闭包
JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...
- JavaScript(第十五天)【匿名函数和闭包】
学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂.(所需基础15章的时候已经声明 ...
随机推荐
- 创建型模式(过渡模式) 简单工厂模式(Simple Factory)
简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类来负责创建其他类的 ...
- python 杂记20191102
上下文管理器: def __exit__(self, exc_type, exc_val, exc_tb):若exc_tb不是空,则说明有异常返回值只能是true或false,若是false,则会把之 ...
- 详解C++中基类与派生类的转换以及虚基类
很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中 ...
- Dubbo官方文档
官方文档:http://dubbo.apache.org/en-us/docs/user/quick-start.html
- sql server 行转列和列转行的使用
1: 行转列 子查询,获取一定数据集结果 SELECT objid,action,count(1) AS [count] FROM T_MyAttention WHERE objid IN(SELEC ...
- Oracle DG 三种模式
DG有下面三种模式– Maximum protection– Maximum availability– Maximum performance 在Maximum protection下, 可以保证从 ...
- learning java AWT 剪贴板 传递文本
import javax.swing.*; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.dat ...
- codevs 1792 分解质因数
1792 分解质因数 题目描述 Description 编写一个把整数N分解为质因数乘积的程序. 输入描述 Input Description 输入一个整数 N 输出描述 Output Descr ...
- ehcache.xml 配置文件备忘录(不建议出现中文注释,此处备忘)
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLoc ...
- 重写Dijkstra
啊我沙雕了,竟然以为DJ的邻接矩阵不用初始化.. #include<bits/stdc++.h> #define R register int using namespace std; / ...