ðŠ Dart åºæ¬ææ³
Flutter ã¢ããªéçºã§äœ¿çšãã Dart èšèª ã®åºæ¬ææ³ãäœç³»çã«åŠç¿ããŸãã åæŠå¿µãæ®µéçã«è§£èª¬ããå®éã®ã³ãŒãäŸãšãšãã«èšèªæ©èœãç¿åŸããŠãããŸãã
1. 倿°ãšããŒã¿å
1-1. 倿°ã®æŠå¿µ
倿°ãšã¯ãããã°ã©ã å ã§ããŒã¿ãæ ŒçŽããåŸããåç §ã»æäœããããã®ä»çµã¿ã§ãã æ°åŠã®ãx = 5ããšåæ§ã«ãååãä»ããŠããŒã¿ã管çã§ããŸãã
倿°ã䜿ãããšã§ãåãå€ãäœåºŠãæžãå¿ èŠããªããªããå€ãå€ãã£ããšããäžç®æãä¿®æ£ããã ãã§æžã¿ãŸãã äŸãã°ãåŠçã®ååãäœåºŠã䜿ãå Žåãæ¯åãç°äžå€ªéããšæžã代ããã« studentName ãšãã倿°ã«æ ŒçŽããŠããã°ã åŸãããäœè€è±åãã«å€æŽããããšãã倿°ã®å€ãäžåºŠå€ããã ãã§å šäœã«åæ ãããŸãã
1-2. 倿°å®£èšã®æ¹æ³
Dart ã§ã¯åå®å šæ§ãéèŠããŠããã倿°å®£èšæã«ããŒã¿åãæç€ºçãŸãã¯æé»çã«æå®ããŸãã åå®å šæ§ãšã¯ãééã£ãçš®é¡ã®ããŒã¿ãæ··å ¥ããããšãé²ãä»çµã¿ã§ãã äŸãã°ãæ°å€çšã®å€æ°ã«æååãå ¥ããããšãããšãšã©ãŒã«ãªãããã°ãæªç¶ã«é²ããŸãã
// åæšè«ã«ãã宣èš
var name = 'Tanaka'; // StringåãšããŠæšè«ããã
var age = 20; // intåãšããŠæšè«ããã
// æç€ºçãªåæå®
String university = 'æ±äº¬å€§åŠ';
int studentId = 12345;
double gpa = 3.75;
bool isGraduated = false;
// äžå€å€æ°ã®å®£èš
final currentYear = 2024; // å®è¡æã«å€ã決å®ãããäžå€å€æ°
const pi = 3.14159; // ã³ã³ãã€ã«æå®æ°
// final ãš const ã®éã
// final: ããã°ã©ã å®è¡äžã«äžåºŠã ãå€ãèšå®ïŒäŸïŒçŸåšæå»ïŒ
// const: ããã°ã©ã äœææã«æ¢ã«å€ã決ãŸã£ãŠããïŒäŸïŒååšçïŒ
1-3. åºæ¬ããŒã¿å
|åå |説æ |äŸ|
|int| æŽæ°| 42, -10, 0|
|double| æµ®åå°æ°ç¹æ° |3.14, 0.5, -2.7|
|String| æåå| 'Hello', "World"|
|bool |çåœå€ |true, false|
1-4. æååæäœ
String firstName = '倪é';
String lastName = 'ç°äž';
// æååè£éïŒå€æ°åã蟌ã¿ïŒ
String fullName = '$lastName $firstName'; // â 'ç°äž 倪é'
// æååé£çµ
String greeting = 'ããã«ã¡ã¯ã' + fullName + 'ãã';
2. æŒç®å
2-1. ç®è¡æŒç®å
æ°å€èšç®ã«äœ¿çšããåºæ¬çãªæŒç®åã§ãããããã¯æ°åŠã®ååæŒç®ãšåãèãæ¹ã§ããã ããã°ã©ãã³ã°ã§ã¯èšå·ãå°ãç°ãªããŸãã
int a = 10, b = 3;
int sum = a + b; // å ç®: 13
int diff = a - b; // æžç®: 7
int product = a * b; // ä¹ç®: 30
double quotient = a / b; // é€ç®: 3.333...
int remainder = a % b; // å°äœ: 1ïŒ10ã3ã§å²ã£ãäœãïŒ
// å°äœæŒç®åïŒ%ïŒã®äœ¿çšäŸ
// - å¶æ°ã»å¥æ°ã®å€å®: number % 2 == 0 ãªãå¶æ°
// - åšæçãªåŠç: ææ¥ã®èšç®ãªã©
2-2. æ¯èŒæŒç®å
å€ã®å€§å°é¢ä¿ãç䟡æ§ãå€å®ããŸãã
int score1 = 85, score2 = 92;
bool isEqual = score1 == score2; // false
bool isNotEqual = score1 != score2; // true
bool isLess = score1 < score2; // true
bool isGreater = score1 > score2; // false
bool isLessEqual = score1 <= score2; // true
2-3. è«çæŒç®å
è€æ°ã®æ¡ä»¶ãçµã¿åãããéã«äœ¿çšããŸããæ¥åžžäŒè©±ã®ãããã€ãããããŸãã¯ããããã§ã¯ãªããã«å¯Ÿå¿ããŸãã
bool hasLicense = true;
int age = 20;
bool canDrive = hasLicense && (age >= 18); // ANDæŒç®ïŒäž¡æ¹ãšãçã®å Žåã®ã¿çïŒ
bool needsPermission = age < 18 || !hasLicense; // ORæŒç®ïŒã©ã¡ããäžæ¹ã§ãçãªãçïŒãNOTæŒç®ïŒçåœãå転ïŒ
// è«çæŒç®åã®æå³
// && (AND): ãå
èš±ãæã£ãŠããããã€ã18æ³ä»¥äžãâ é転å¯èœ
// || (OR): ã18æ³æªæºããŸãã¯ãå
èš±ãªããâ èš±å¯ãå¿
èŠ
// ! (NOT): ãå
èš±ãããã®å察 â ãå
èš±ãªãã
3. å¶åŸ¡æ§é
3-1. æ¡ä»¶åå²ïŒifæïŒ
ããã°ã©ã ã®å®è¡ãããŒãæ¡ä»¶ã«å¿ããŠåå²ãããŸãã ãããããªãããããããã§ãªããã°ãããããšããæ¥åžžçãªå€æãã³ãŒãã§è¡šçŸããä»çµã¿ã§ãã
int score = 85;
if (score >= 90) {
print('åªç§');
} else if (score >= 70) {
print('è¯å¥œ');
} else if (score >= 60) {
print('åæ Œ');
} else {
print('äžåæ Œ');
}
// æ¡ä»¶ã¯äžããé çªã«ãã§ãã¯ãããæåã«çã«ãªã£ãæ¡ä»¶ã®åŠçãå®è¡ããã
// else ã¯ãã©ã®æ¡ä»¶ã«ãåœãŠã¯ãŸããªãå Žåãã®åŠç
3-2. å€åå²ïŒswitchæïŒ
ç¹å®ã®å€ã«å¯Ÿããè€æ°ã®åŠçãã¿ãŒã³ãå¹ççã«èšè¿°ããŸãã
String grade = 'A';
switch (grade) {
case 'A':
print('åªç§ãªæçžŸã§ã');
break;
case 'B':
print('è¯å¥œãªæçžŸã§ã');
break;
case 'C':
print('æšæºçãªæçžŸã§ã');
break;
default:
print('æçžŸã確èªããŠãã ãã');
}
4. å埩åŠçïŒã«ãŒãïŒ
4-1. foræ
æå®åæ°ã®ç¹°ãè¿ãåŠçãè¡ããŸãããâåç¹°ãè¿ããã1ãã10ãŸã§é çªã«åŠçããããšãã£ã 決ãŸã£ãåæ°ã®åŠçã«é©ããŠããŸãã
// åºæ¬çãªforæ
for (int i = 1; i <= 5; i++) {
print('$iåç®ã®åŠç');
}
// ãªã¹ãã®èŠçŽ ãé æ¬¡åŠç
List<String> subjects = ['æ°åŠ', 'è±èª', 'ç©ç'];
for (int i = 0; i < subjects.length; i++) {
print('${i + 1}. ${subjects[i]}');
}
// foræã®æ§é : for (åæå; ç¶ç¶æ¡ä»¶; æŽæ°åŠç)
// i = 0: ã«ãŠã³ã¿ãŒå€æ°iã0ã§åæå
// i < subjects.length: iããªã¹ãã®é·ãããå°ããéã¯ç¶ç¶
// i++: æ¯åiã1å¢ãã
4-2. for-inæ
ã³ã¬ã¯ã·ã§ã³ã®åèŠçŽ ã«å¯ŸããŠåŠçãå®è¡ããŸãã
List<String> courses = ['ããã°ã©ãã³ã°', 'ããŒã¿ããŒã¹', 'ãããã¯ãŒã¯'];
for (String course in courses) {
print('履修ç§ç®: $course');
}
4-3. whileæ
æ¡ä»¶ãçã§ããéãåŠçãç¶ç¶ããŸãã
int count = 1;
while (count <= 3) {
print('ã«ãŠã³ã: $count');
count++; // count = count + 1 ã®çç¥åœ¢
}
5. 颿°
5-1. 颿°ã®å®çŸ©ãšåŒã³åºã
颿°ã¯ç¹å®ã®åŠçããŸãšããŠååãä»ããåå©çšå¯èœã«ããä»çµã¿ã§ãã æçã®ã¬ã·ãã®ããã«ããææïŒåŒæ°ïŒãåãåã£ãŠã決ãŸã£ãæé ã§åŠçããçµæïŒæ»ãå€ïŒãè¿ãããšããæµãã§ãã åãåŠçãäœåºŠãæžãå¿ èŠããªããªããã³ãŒãã®ä¿å®æ§ãåäžããŸãã
// æ»ãå€ããã颿°
int calculateSum(int a, int b) {
return a + b;
}
// æ»ãå€ããªã颿°
void displayMessage(String message) {
print('ã¡ãã»ãŒãž: $message');
}
// 颿°ã®åŒã³åºã
int result = calculateSum(10, 20); // 30ãè¿ããã
displayMessage('Hello, Dart!'); // æ»ãå€ãªããç»é¢ã«åºåã®ã¿
// 颿°ã®å©ç¹
// 1. åå©çšæ§: åãåŠçãäœåºŠã§ãåŒã³åºãã
// 2. ä¿å®æ§: åŠçã倿Žãããæã¯é¢æ°å
ã ãä¿®æ£ããã°ãã
// 3. å¯èªæ§: è€éãªåŠçã«ååãä»ããããšã§çè§£ãããããªã
5-2. åŒæ°ã®çš®é¡
// äœçœ®åŒæ°ïŒå¿
é ïŒ
void greet(String name, int age) {
print('$name ããïŒ$age æ³ïŒ');
}
// ååä»ãåŒæ°ïŒãªãã·ã§ã³ïŒ
void createUser({String? name, int age = 0, bool isActive = true}) {
print('ãŠãŒã¶ãŒ: $name, 幎霢: $age, ã¢ã¯ãã£ã: $isActive');
}
// å¿
é ã®ååä»ãåŒæ°
void sendEmail({required String to, required String subject, String? body}) {
print('To: $to, Subject: $subject');
}
// 䜿çšäŸ
greet('ç°äž', 20);
createUser(name: 'äœè€', age: 22);
sendEmail(to: 'user@example.com', subject: 'éèŠãªãç¥ãã');
5-3. ç¢å°é¢æ°ïŒççž®èšæ³ïŒ
åäžã®åŒã§è¡šçŸã§ãã颿°ã¯ç¢å°èšæ³ã§ç°¡æœã«èšè¿°ã§ããŸãã
// éåžžã®é¢æ°
int square(int x) {
return x * x;
}
// ç¢å°é¢æ°
int square(int x) => x * x;
// è€éãªäŸ
String formatGrade(int score) => score >= 80 ? 'åª' : score >= 60 ? 'è¯' : 'å¯';
6. ã³ã¬ã¯ã·ã§ã³
6-1. ListïŒãªã¹ãïŒ
é åºä»ãã®èŠçŽ éåã管çããŸããè²·ãç©ãªã¹ããæçžŸäžèЧã®ããã«ã è€æ°ã®åãçš®é¡ã®ããŒã¿ãé çªã«äžŠã¹ãŠä¿åã§ããŸããåèŠçŽ ã«ã¯0ããå§ãŸãçªå·ïŒã€ã³ããã¯ã¹ïŒãèªåçã«å²ãåœãŠãããŸãã
// ãªã¹ãã®äœæ
List<String> fruits = ['ããã', 'ããã', 'ãªã¬ã³ãž'];
List<int> numbers = [1, 2, 3, 4, 5];
// èŠçŽ ãžã®ã¢ã¯ã»ã¹
print(fruits[0]); // 'ããã'ïŒã€ã³ããã¯ã¹ã¯0ããéå§ïŒ
print(fruits.length); // 3
// èŠçŽ ã®è¿œå ã»åé€
fruits.add('ã¶ã©ã'); // æ«å°Ÿã«è¿œå
fruits.remove('ããã'); // æå®ããèŠçŽ ãåé€
print(fruits); // ['ããã', 'ãªã¬ã³ãž', 'ã¶ã©ã']
// ãã®ä»ã®äŸ¿å©ãªã¡ãœãã
// fruits.insert(1, 'ã¡ãã³'); // æå®äœçœ®ã«æ¿å
¥
// fruits.clear(); // å
šèŠçŽ ãåé€
// bool isEmpty = fruits.isEmpty; // 空ãã©ãã確èª
6-2. MapïŒãããïŒ
ããŒãšå€ã®ãã¢ã§ããŒã¿ã管çããŸããèŸæžãé»è©±åž³ã®ããã«ã ãååïŒããŒïŒãã§ãæ å ±ïŒå€ïŒããæ€çŽ¢ã§ããä»çµã¿ã§ãããªã¹ããšéããçªå·ã§ã¯ãªãæå³ã®ããååã§ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸãã
// ãããã®äœæ
Map<String, int> studentScores = {
'ç°äž': 85,
'äœè€': 92,
'éŽæš': 78
};
// å€ã®ååŸã»èšå®
print(studentScores['ç°äž']); // 85
studentScores['髿©'] = 88;
// ããŒã®ååšç¢ºèª
if (studentScores.containsKey('äœè€')) {
print('äœè€ããã®ç¹æ°: ${studentScores['äœè€']}');
}
// ãã®ä»ã®äŸ¿å©ãªã¡ãœãã
// studentScores.keys; // å
šãŠã®ããŒãååŸ
// studentScores.values; // å
šãŠã®å€ãååŸ
// studentScores.remove('ç°äž'); // æå®ããŒã®èŠçŽ ãåé€
6-3. SetïŒã»ããïŒ
éè€ãèš±ããªãèŠçŽ ã®éåã§ãã
Set<String> uniqueColors = {'èµ€', 'é', 'ç·', 'èµ€'}; // éè€ã¯èªåçã«é€å»
print(uniqueColors); // {èµ€, é, ç·}
// èŠçŽ ã®è¿œå ã»ç¢ºèª
uniqueColors.add('é»');
bool hasRed = uniqueColors.contains('èµ€'); // true
7. ã¯ã©ã¹ãšãªããžã§ã¯ã
7-1. ãªããžã§ã¯ãæåã®åºæ¬æŠå¿µ
ã¯ã©ã¹ã¯é¢é£ããããŒã¿ïŒããããã£ïŒãšæ©èœïŒã¡ãœããïŒããŸãšããèšèšå³ã§ãã ãªããžã§ã¯ãã¯ã¯ã©ã¹ããäœæãããå ·äœçãªã€ã³ã¹ã¿ã³ã¹ã§ãã
äŸãã°ãåŠçããšããã¯ã©ã¹ãäœãã°ãååã»åŠç±çªå·ã»æçžŸãªã©ã®ããŒã¿ãšã æçžŸãèšç®ããã»æ å ±ã衚瀺ãããªã©ã®æ©èœãã²ãšãŸãšãã«ã§ããŸãã ãã®ã¯ã©ã¹ãããç°äžå€ªéããäœè€è±åããšãã£ãå ·äœçãªåŠçãªããžã§ã¯ããäœæã§ããŸãã
7-2. ã¯ã©ã¹ã®å®çŸ©
class Student {
// ããããã£ïŒã€ã³ã¹ã¿ã³ã¹å€æ°ïŒ
String name;
int studentId;
double gpa;
// ã³ã³ã¹ãã©ã¯ã¿
Student(this.name, this.studentId, this.gpa);
// ã¡ãœãã
void displayInfo() {
print('åŠçå: $name, åŠç±çªå·: $studentId, GPA: $gpa');
}
bool isHonorStudent() {
return gpa >= 3.5;
}
// ã²ãã¿ãŒïŒããããã£ã®ããã«äœ¿ãã颿°ïŒ
String get status => isHonorStudent() ? 'åªçç' : 'äžè¬åŠç';
}
// ã¯ã©ã¹ã®æ§æèŠçŽ
// - ããããã£: ãªããžã§ã¯ããæã€ããŒã¿ïŒname, studentId, gpaïŒ
// - ã³ã³ã¹ãã©ã¯ã¿: ãªããžã§ã¯ãäœææã®åæååŠç
// - ã¡ãœãã: ãªããžã§ã¯ããå®è¡ã§ããåŠçïŒdisplayInfo, isHonorStudentïŒ
// - ã²ãã¿ãŒ: ããããã£ã®ããã«ã¢ã¯ã»ã¹ã§ããèšç®çµæïŒstatusïŒ
7-3. ãªããžã§ã¯ãã®äœæãšäœ¿çš
// ã€ã³ã¹ã¿ã³ã¹ã®äœæ
Student student1 = Student('ç°äžå€ªé', 12345, 3.8);
Student student2 = Student('äœè€è±å', 12346, 3.2);
// ã¡ãœããã®åŒã³åºã
student1.displayInfo(); // åŠçå: ç°äžå€ªé, åŠç±çªå·: 12345, GPA: 3.8
print(student1.status); // åªçç
// ããããã£ãžã®ã¢ã¯ã»ã¹
student2.gpa = 3.6; // GPAãæŽæ°
print(student2.isHonorStudent()); // true
8. Null Safety
8-1. Nullã®æŠå¿µ
Nullã¯ãå€ãååšããªããç¶æ ã衚ããŸããã¢ã³ã±ãŒãã®æªèšå ¥æ¬ãã ãŸã èšå®ãããŠããªãèšå®å€ãªã©ã衚çŸããéã«äœ¿çšããŸãã Dart 2.12以éã§ã¯ãnullå®å šæ§ã«ãããnullãããããªãå€ããæç¢ºã«åºå¥ããå®è¡æãšã©ãŒãé²ãä»çµã¿ãå°å ¥ãããŠããŸãã
// nullèš±å¯åïŒ?ãä»ããïŒ
String? optionalName; // nullã代å
¥å¯èœ
int? optionalAge;
// nulléèš±å¯åïŒããã©ã«ãïŒ
String definitelyName = 'Tanaka'; // nullã¯ä»£å
¥äžå¯
// null ãã§ãã¯
if (optionalName != null) {
print(optionalName.length); // å®å
šã«ã¢ã¯ã»ã¹å¯èœ
}
// nullå®å
šæ§ã®å©ç¹
// - å®è¡æã®ãNullPointerExceptionããšã©ãŒãé²ãã
// - ã³ã³ãã€ã«æã«æœåšçãªãã°ãçºèŠã§ãã
// - ããå®å
šã§ä¿¡é Œæ§ã®é«ãã³ãŒããæžãã
8-2. Nullå®å šæŒç®å
String? nullableName;
// nullåäœæŒç®åïŒ??ïŒ
String displayName = nullableName ?? 'ã²ã¹ã'; // nullãªã'ã²ã¹ã'ã䜿çš
// null代å
¥æŒç®åïŒ??=ïŒ
nullableName ??= 'ããã©ã«ãå'; // nullã®å Žåã®ã¿ä»£å
¥
// nullèªèæŒç®åïŒ!ïŒ
String definitelyNotNull = nullableName!; // nullã§ãªãããšãä¿èšŒ
9. éåæåŠç
9-1. éåæåŠçã®å¿ èŠæ§
ãããã¯ãŒã¯éä¿¡ããã¡ã€ã«èªã¿èŸŒã¿ãªã©ãæéã®ãããåŠçãå®è¡ããéã UIããããã¯ããªãããã«éåæåŠçã䜿çšããŸãã
äŸãã°ãã€ã³ã¹ã¿ã°ã©ã ã§åçãèªã¿èŸŒãã§ããéããã¹ã¯ããŒã«ãããããããã¿ã³ã¯æäœã§ããŸãã ããã¯ç»åèªã¿èŸŒã¿ïŒæéã®ãããåŠçïŒãéåæã§è¡ããUIæäœïŒããã§ããåŠçïŒããããã¯ããªãããã§ãã
9-2. Future ãš async/await
// éåæé¢æ°ã®å®çŸ©
Future<String> fetchUserData(int userId) async {
// æš¡æ¬çãªé
å»¶åŠç
await Future.delayed(Duration(seconds: 2));
return 'ãŠãŒã¶ãŒ$userId ã®ããŒã¿';
}
// éåæé¢æ°ã®åŒã³åºã
Future<void> main() async {
print('ããŒã¿ååŸéå§');
String userData = await fetchUserData(123);
print(userData); // 2ç§åŸã«åºå
print('åŠçå®äº');
}
// éåæåŠçã®ããŒã¯ãŒã
// Future<T>: å°æ¥çã«å€TãåŸãããããšã衚ãå
// async: ãã®é¢æ°ã¯éåæåŠçãå«ãããšã宣èš
// await: éåæåŠçã®å®äºãåŸ
ã€ïŒãã®è¡ã§äžæåæ¢ïŒ
9-3. ãšã©ãŒãã³ããªã³ã°
ããã°ã©ã ãå®è¡ããŠãããšããšã©ãŒïŒäŸå€ïŒãçºçããããšããããŸãã
ããšãã°æ¬¡ã®ãããªå Žåã§ãïŒ
ã»ãããã¯ãŒã¯ãåæãããŠããŠããŒã¿ãååŸã§ããªã
ã»ååšããªããã¡ã€ã«ãèªãããšãã
ã»ãµãŒããŒãå¿çããªãããªã©
ãã®ãããªã倱æãããããããªãåŠçãã«å¯ŸããŠãããã°ã©ã ãå®å šã«ç¶ããããã®ä»çµã¿ã try-catch ã§ãã
Future<void> safeDataFetch() async {
try {
String data = await fetchUserData(456);
print('ååŸæå: $data');
} catch (error) {
print('ãšã©ãŒãçºçããŸãã: $error');
} finally {
print('åŠççµäº');
}
}
ð¯ ãŸãšã
ãã®ç« ã§ã¯ãDartèšèªã®åºæ¬çãªææ³èŠçŽ ãäœç³»çã«åŠç¿ããŸããã
ç¿åŸããå 容:
倿°å®£èšãšããŒã¿åã®çè§£
æŒç®åã«ããå€ã®æäœ
å¶åŸ¡æ§é ã«ããåŠçãããŒã®å¶åŸ¡
颿°ã«ããåŠçã®æœè±¡å
ã³ã¬ã¯ã·ã§ã³ã«ããããŒã¿ç®¡ç
ã¯ã©ã¹ã«ãããªããžã§ã¯ãæåããã°ã©ãã³ã°
Nullå®å
šæ§ã«ããå
ç¢ãªã³ãŒãäœæ
éåæåŠçã«ããå¹ççãªããã°ã©ã å®è¡
Discussion