備忘錄_20160105(定位)
修改
回首頁
程式 2024-02-15 11:18:45 1707967125 100
dart 程式語言概覽
dart 程式語言概覽
dart01.dart
// dart01.dart - 在 dart 3.0.6 底下測試
// [cmd]
// dart -v --version 可得知版本
// dart 是程式語言(programming language)
// flutter 是架構(framework)
void main()
{
for(int i=0; i<10; i++)
{
print('Hello, world! - ${i+1}');
}
}
dart02.dart
void main() // 在 dart 3.0.6 底下測試
{
var str1 = "Hello";
String str2 = "Hello"; // 明確宣告為字串
int? iCanBeNull; // 用問號代表此變數可以為 null
iCanBeNull=16;
print(iCanBeNull);
iCanBeNull=null;
print(iCanBeNull);
if(iCanBeNull==null)
{
print("iCanBeNull is null now!");
}
int iCannotBeNull;
print(iCannotBeNull);
// 若未給定值就使用的話,會出現下面錯誤訊息。
// Error: Non-nullable variable 'iCannotBeNull' must be assigned before it can be used.
late int iLateVariable; // 程式設計師掛保證,一定會給予值。
print(iLateVariable);
// 若未給定值就使用的話(跳票了),會出現下面錯誤訊息。
// Error: Late variable 'iLateVariable' without initializer is definitely unassigned.
}
dart03.dart
void main() // 在 dart 3.0.6 底下測試
{
int i01=38; // 64-bit signed non-fractional integer values
double d02=77.35; // 64-bit double-precision floating-point number
BigInt bi03=BigInt.from(654897652351321); // 超大整數,上限是 RAM 的大小...
bool boo04=true;
List list05=[];
list05.add("Hello,");
list05.add("World!");
print(list05.length); // 2
List list06=[4,5,6];
list06.add("7-seven");
list06.add("8-eight");
list06.remove("7-seven");
print(list06.length); // 4
List list07fixed=List.filled(3, "really");
list07fixed[2]="can be modified";
print(list07fixed[0]);
print(list07fixed[1]);
print(list07fixed[2]);
// list07fixed.add("Can cause error!");
// 固定長度的 list ,不能增減,否則會有下面錯誤訊息!
// Unsupported operation: Cannot add to a fixed-length list
// (而且是在執行時期跳出錯誤,不是編譯時就發現錯誤!)
Map map07={}; // map 是 key-value
map07["John"]=18;
Map map08={"Joseph":17, "Amber":38};
map08["Baby"]=1;
map08["Cherry"]=6;
map08.remove("Baby");
var vKeys=map08.keys;
for(int i=0; i<vKeys.length; i++)
{
String strKey=vKeys.elementAt(i);
print(strKey + " -- " + map08[strKey].toString());
}
String str09='使用單引號';
String str10="使用雙引號";
String str11='''三個單引號可以多行喔
很神奇吧!''';
String str12="""三個雙引號也可以多行喔
很神奇吧!""";
print(str11.length);
for(int i=0; i<str11.length; i++)
{
print(i.toString() + " -- " + str11[i]); // 字串可以是陣列
}
print("可以內嵌字串喔→${str09}");
print("字串長度為→${str09.length},對吧!");
Map map13={"First":"Yes"};
final str14=map13['First'] as String;
final String str15="final";
final String str16;
str16="final";
const String str17="const";
int i18=39;
int i19=7;
print(i18 + i19); // 46
print(i18 - i19); // 32
print(i18 * i19); // 273
print(i18 / i19); // 5.571428571428571
print(i18 ~/ i19); // 5
print(i18 % i19); // 4
i18++;
i19--;
if(i18==i19) { print("the same"); }
if(i18!=i19) { print("different"); }
if(i18>=i19)
{
print("bigger");
}
else if( (i18-i19) > 20 )
{
print("block 2");
}
else
{
print("others");
}
// not !
// or ||
// and &&
int iC=0;
while(iC<5)
{
print(iC);
iC++;
}
iC=0;
do
{
print(iC);
iC++;
} while(iC<5);
for(int iC=0; iC<10; iC++)
{
print(iC);
}
print(iC); // 5
// break; continue;
String strSex="male";
switch(strSex)
{
case "male":
print("male checked");
break;
case "female":
print("female checked");
break;
default:
break;
}
}
dart04.dart
String getStrSomething(int iNumber)
{
return "The number is ${iNumber.toString()}. ^^";
}
String getStrV02(int iNumber, [int? iVal])
{
return iNumber.toString();
}
String getStrV03(int iNumber, [int iVal=13])
{
return iNumber.toString()+"--"+iVal.toString();
}
void main() // 在 dart 3.0.6 底下測試
{
print(getStrSomething(38));
print(getStrV03(55));
print(getStrV03(55,66));
}
dart05.dart
String getStrAddV01(int iValue1, {int iValue2=77})
{
return (iValue1+iValue2).toString();
}
String getStrAddV02(int iValue1, {required int iValue2})
{
return (iValue1+iValue2).toString();
}
void main() // 在 dart 3.0.6 底下測試
{
print(getStrAddV01(38));
print(getStrAddV01(20, iValue2:50));
// print(getStrAddV02(12)); // Error: Required named parameter 'iValue2' must be provided.
print(getStrAddV02(12, iValue2:40));
// record variable
(String, int) rec01;
rec01=("roadLength", 12);
(String, {int iLen, String strUnit}) rec02 = ("ChangEn", iLen:6, strUnit:"meters");
print(rec02);
}
dart06.dart
(String, int, int, int) getRecDimension()
{
return ("box", 10, 23, 20);
}
({String strName, int iD1, int iD2, int iD3}) getRecDimensionV2()
{
return (strName:"box", iD1:10, iD2:23, iD3:20);
}
void main() // 在 dart 3.0.6 底下測試
{
var rec1=getRecDimension();
print(rec1.$1);
print(rec1.$2);
print(rec1.$3);
print(rec1.$4);
var (strName, iD1, iD2, iD3)=getRecDimension();
print(strName);
print(iD1);
print(iD2);
print(iD3);
var rec2=getRecDimensionV2();
print(rec2.strName);
print(rec2.iD1);
print(rec2.iD2);
print(rec2.iD3);
var (strName:strName2, iD1:iD12, iD2:iD22, iD3:iD32)=getRecDimensionV2();
print(strName2);
print(iD12);
print(iD22);
print(iD32);
}
dart07.dart
String getStrMessage(int iNumber)
{
if(iNumber==1) { return "First Item!";}
else if(iNumber==2) { return "Second Object!"; }
return iNumber.toString();
}
// 函數名稱可以當成變數使用
void main() // 在 dart 3.0.6 底下測試
{
var theFunc=getStrMessage;
print(theFunc(2));
}
dart08.dart
// 匿名函數
void main() // 在 dart 3.0.6 底下測試
{
var tmpVariable01=(int iNum)=>(iNum+3).toString();
var tmpVariable02=(int iNum) { var i2=iNum+7; print(i2.toString()); };
var tmpVariable03=(int iNum) { return iNum*5; };
print(tmpVariable01(3));
tmpVariable02(5);
print(tmpVariable03(4));
}
dart09.dart
// 函數
func01()
{
print("I am function 01");
}
func02()
{
print("I am function 02");
func01()
{
print("I am function 01 inside function 02");
}
func01();
}
void main() // 在 dart 3.0.6 底下測試
{
func02();
func01();
}
// I am function 02
// I am function 01 inside function 02
// I am function 01
dart10.dart
// 類別
class CBaby1
{
String? strName;
String getStrHello() => "Hello, $strName!"; // 函數
}
class CBaby2
{
String? strName;
String get strHello => "Hello, $strName!"; // 屬性讀取
}
void main() // 在 dart 3.0.6 底下測試
{
CBaby1 oBaby1=CBaby1();
oBaby1.strName="John";
print(oBaby1.getStrHello());
CBaby2 oBaby2=CBaby2();
oBaby2.strName="Amber";
print(oBaby2.strHello);
}
dart11.dart
class CShowStatic
{
static String strLabel = "Static Label:";
String strName="default";
void setName(strName) { this.strName=strName; }
String getStrName() { return this.strName; }
void prints()
{
print(CShowStatic.strLabel+" "+this.strName);
}
static void anotherPrints(CShowStatic obj1)
{
print(strLabel+" "+obj1.getStrName());
}
}
void main() // 在 dart 3.0.6 底下測試
{
var o1=CShowStatic();
var o2=CShowStatic();
o2.setName("John");
o1.prints();
o2.prints();
CShowStatic.anotherPrints(o1);
CShowStatic.anotherPrints(o2);
}
dart12.dart
class Car
{
late String strName1;
late String strName2;
Car(String strName1, String strName2)
{
this.strName1=strName1;
this.strName2=strName2;
}
String getStrFullName() => "$strName1 $strName2";
}
class AnotherCar
{
String strName1;
String strName2;
AnotherCar(this.strName1, this.strName2);
String getStrFullName() => "$strName1 $strName2";
}
void main() // 在 dart 3.0.6 底下測試
{
Car oCar1=Car("toyota","altis");
print(oCar1.getStrFullName());
AnotherCar oCar2=AnotherCar("Toyota","Altis");
print(oCar2.getStrFullName());
}
dart13.dart
class Car
{
late String strName1;
late String strName2;
Car(String strName1, String strName2)
{
this.strName1=strName1;
this.strName2=strName2;
}
String getStrFullName() => "$strName1 $strName2";
}
class TheCar extends Car
{
String strNickName;
TheCar(String strName1, String strName2, this.strNickName) : super(strName1, strName2);
@override
String getStrFullName() => "${super.getStrFullName()} aka $strNickName";
// 這樣也行
// @override
// String getStrFullName() => "$strName1 $strName2 aka $strNickName";
}
void main() // 在 dart 3.0.6 底下測試
{
TheCar oCar1=TheCar("toyota","altis","MyCar");
print(oCar1.getStrFullName());
}
dart14.dart
abstract class Car
{
String strName1;
String strName2;
Car(this.strName1, this.strName2);
String getStrFullName() => "$strName1 $strName2";
}
class TheCar extends Car
{
String strNickName;
TheCar(String strName1, String strName2, this.strNickName) : super(strName1, strName2);
@override
String getStrFullName() => "$strName1 $strName2 aka $strNickName";
}
void main() // 在 dart 3.0.6 底下測試
{
TheCar oCar1=TheCar("toyota","altis","MyCar");
print(oCar1.getStrFullName());
}
dart15.dart
abstract interface class Car
{
String getStrFullName();
}
abstract interface class Car2
{
String getStrNickName();
}
class TheCar implements Car, Car2
{
String strName1;
String strName2;
String strNickName;
TheCar(this.strName1, this.strName2, this.strNickName);
@override
String getStrFullName() => "$strName1 $strName2 aka $strNickName";
@override
String getStrNickName() => "$strNickName";
}
void main() // 在 dart 3.0.6 底下測試
{
TheCar oCar1=TheCar("toyota","altis","MyCar");
print(oCar1.getStrFullName());
print(oCar1.getStrNickName());
}
dart16.dart
class CSkill01
{
method01()
{
print('I am method01');
}
}
mixin class CSkill02
{
method02()
{
print('I am method02');
}
}
class CAll extends CSkill01 with CSkill02 // 用 mixin+with 來達成多重繼承
{
method03()
{
print('I am method03');
}
}
class COnly1 extends CSkill02 {}
void main() // 在 dart 3.0.6 底下測試
{
CAll oA=CAll();
oA.method01();
oA.method02();
oA.method03();
COnly1 oO=COnly1();
oO.method02();
}
dart17.dart
enum CarType {YARiS, CROWN, ALTIS, VIOS, CAMRY}
void main() // 在 dart 3.0.6 底下測試
{
CarType oCT=CarType.YARiS;
print(CarType.values); // [CarType.YARiS, CarType.CROWN, CarType.ALTIS, CarType.VIOS, CarType.CAMRY]
print(oCT); // CarType.YARiS
if(oCT==CarType.ALTIS) { print("ALTIS"); }
else if(oCT==CarType.YARiS) { print("YARiS"); }
else { print("Others"); }
}
dart18.dart
void main() // 在 dart 3.0.6 底下測試
{
List list01=["Happy", "Good"];
list01.add(38);
print(list01);
List<String> list02=["Happy", "Good"];
// list02.add(38); // Error: The argument type 'int' can't be assigned to the parameter type 'String'.
var var03=<String>["Happy", "Good"];
var var04=<String, String?>
{
"key01": "value01",
"key02": "value02",
"kye03": null
};
print(var03);
print(var04);
var var05=<String>[];
var05.add(38.toString());
print(var05);
}
dart19.dart
import 'dart:io';
void function01()
{
for(int i=0; i<5; i++)
{
sleep(Duration(seconds: 1));
print("Index: $i");
}
}
main() // 在 dart 3.0.6 底下測試
{
print("call function");
function01();
print("back to main");
for (int i=10; i<15; i++)
{
sleep(Duration(seconds: 1));
print("Index from main: $i");
}
print("The End");
}
dart20.dart
import 'dart:io';
import 'dart:async';
Future<void> function01() async
{
for(int i=0; i<5; i++)
{
await Future.delayed(Duration(seconds: 1));
print("Index: $i");
}
}
main() async // 在 dart 3.0.6 底下測試
{
print("call function");
function01();
print("back to main");
for (int i=10; i<15; i++)
{
await Future.delayed(Duration(seconds: 1));
print("Index from main: $i");
}
print("The End");
}
dart21.dart
import 'dart:io';
import 'dart:async';
import 'dart:isolate';
Future<void> function01(String strAtLeastOneParameter) async
{
for(int i=0; i<5; i++)
{
await Future.delayed(Duration(seconds: 2));
print("$strAtLeastOneParameter: $i");
}
}
main() async // 在 dart 3.0.6 底下測試
{
print("call function");
Isolate.spawn(function01, "Hello, dart, "); // 獨立的執行緒,但是,當主執行緒結束時,他也會被迫結束。
print("back to main");
for (int i=10; i<15; i++)
{
await Future.delayed(Duration(seconds: 1));
print("Index from main: $i");
}
print("The End");
}