//dart语言的入口main,没有返回,会自动调用,,参数是list集合
//注意事项定义字符串的时候,可以使用单引号或者双引号
main (List<String> args){
print("hello world");
//定义变量
// 变量类型 变量名称 = 复制 如下
String name = 'name';
int age = 18;
double height = 1.88;
//方法一输出
print(name+'$age');
//方法二输出
print('$name'+'$age');
//注意定义的变量可以修改值,但是不能赋值其他类型
// name=111; 这是错误的写法
// 类型推导 (type inference) 格式如下
// 变量名称 = 赋值 runtimetype 运行的时候可以确定该数据类型
var name1 = "kl";
print(name1.runtimeType);
//如果希望在一个变量数据类型确定后,可以赋值给其他的数据类型,可以使用dynamic类型
dynamic name2 = "123";
print(name2);
name2=123;
print(name2);
//final和const 都是定义常量 他们的区别
// 1 const 复制的时候在编译的时候就确定下来,而final在运行的时候才确定
// 2 const 不可以复制给dataTime.now() final一定赋值后有确定结果后
//就不能再次赋值
//
//数据类型中的数值 有float和double类型
//数据类型的转换 将字符串解析成数字
String name3 = "1234";
int num3 = int.parse(name3);
//dart 中提供了bool类型 true和false
bool isTrue= true;
//dart的类型安全性就是你不能在if中使用非bool类型作判断 ,下面的写法就是错的啊
// var message = 'hello Dart';
// if(message){
// print("我这样做的 ");
// }
//dart字符串是UTF-16编码的序列,你可以用单引号和双引号来创建一个字符串
//可以用''' '''来创建多个字符串,如下
String
name4 =
'''你在吗
你好
你哈''';
print(name4);
//dart 中有3中集合类型,list map和set数据类型
//list 是有序集合 ,set是无序集合,并且元素不是重复的啊
List<String> listname = ["1","2","4","5"];
Set<String> setName = {"kl","ui","python"};
print("$listname"+"====="+"$setName");
Map<String,String> map= {"hello":"niha"};
print("key===${map.keys}"+"value===${map.values}");
listname.forEach((name)=>{
print(name)
});
print(setName.elementAt(1));
//通过key来获取map中的元素
print("获取map元素"+map["hello"]);
int result = sum(10,20);
print(result);
print(total(12,
num2: 23,
));
print(total2(12,13));
// 1.将函数赋值给一个变量
var bar = foo;
print(bar);
// 2.将函数作为另一个函数的参数
test(foo);
// 3.将函数作为另一个函数的返回值
var func =getFunc();
func('kobe');
}
//dart 中函数的定义
// 返回值 函数名
// 返回值
//这是函数的第一种写法
// int sum(num num1,num num2)
// {
// int sumtest = num1.toInt() + num2.toInt();
// return sumtest;
// }
//上面的写法也可以写成下面的写法
int sum(num num1,num num2)=>num1.toInt()+num2.toInt();
// 函数的参数分为可选参数和不可选参数
//可选参数又分为命名可选参数{}和位置可选参数[]
//这是命名可选参数
int total(int num1,{int num2})
{
return num1+num2;
}
//这个是位置可选参数
int total2(int num1,[int num2])
{
return num1+num2;
}
//如果某个可选参数必须传值,可以在他前面添加required修饰 这个包含在package:meta/meta.dart
// int total3(int num1,{int num2, (@required int num3)})
// {
// return num1+num2;
// }
//java和OC都不能将函数作为参数或者赋值一个变量
// 1.定义一个函数
foo(String name) {
print('传入的name:$name');
}
// 2.将函数作为另外一个函数的参数
test(Function func) {
func('coderwhy');
}
// 3.将函数作为另一个函数的返回值
getFunc() {
return foo;
}
//匿名函数,就是没有名字的函数
//词法作用域
//dart中的词法有自己明确的作用域范围,它是根据代码的结构({})依次向外查找