皆さん、突然なんですがDartをflutter専用言語だと思っていませんか???
僕も昔はそう思っていました。(ほんとにすいません)
もしかしたらRubyとRailsみたいな関係だと思っている人がいるかも知れません。
それは個人的にそれはすごくもったいないと思うので、この記事を見てDartちょっとおもしろそう!!使ってみよ!ってなることを願ってます!
そもそもDartとは
An approachable, portable, and productive language for high-quality apps on any platform
とトップページに書いてある通りいろんなプラットフォームでめっちゃ簡単に動かせるのが魅力な言語です。
もともとはJavaScriptを置き換えるためにGoogleが開発した言語です。
DartとはGoogle社によって2011年に開発されたWebアプリケーション向けのプログラミング言語です。開発された目的はJavaScriptにおける課題を解決するためであり、あらゆるプラットフォームの高速アプリ向けにクライアントに最適化された言語として誕生しました。しかし行き足は思ったようにいかず、開発者のGoogleはDartのあり方をJavaScriptへコンパイルする言語として位置づけ直しました。2018年にはDart2をリリースしており、強力な型システムなどの言語機能の強化が行われております。
元記事
Worst Programming Languages to Learn in 2018という記事では一時期学ぶべきではない言語1位にもなっていました...
(2019年にFlutterが出てからはビリは抜け出しました)
こんな感じの結構不憫な言語です。
Dartとの出会い
僕はもともとPythonを使ってまして(小4くらいで)その時にPythonのインデントに苦しめられまして高2くらい(2024くらいですね)にやっぱりWebやりてえと思ってProgateでRailsを途中までやりましたが後半がそれなりに難しくて飽きてやめてしまいました。これじゃだめだと思って
the-web-developer-bootcamp-2021-japanという素晴らしいUdemyの教材を見つけてJSを勉強しました。
そのあとやっぱりRubyが好きだなと思ってRails tutorialを少しやったんですが飽きてしまって...
TechTrainでRailsをやろうと思ってRails tutorialを完全に終わらせました(最後の方めちゃむずかった)
で昔一回触ったけどプログラミングの知識がほぼなくて、しかもAIがなかった時代に触って挫折したFlutterを触ってみようと思って色々調べたときにDartって言語はなんぞや?ってなりました。
でもとりあえずFlutter触ってみて割と使いやすいぞ????
これDartのおかげなんか?と思ってDart単体で使おうとしたのが始まりです。
Dartのいいところ
- exeファイルにコンパイルできるからRuby,js,Pythonとかのスクリプト言語よりプログラミングしない人でも渡しやすい。
- 静的型付け言語だけどあんまり明示的に書かなくても動く(動的型付けのが得意だったから)
- いい感じに機能が多すぎないし少なすぎない(GoはちょっとCLI書くのには機能が少なすぎる資格コード多すぎる)
- TSの記述が嫌い(なんかダサいし読みづらい)
- 関数の戻り値を宣言時に一番左に書く(めっちゃ見やすくなる)
Dartで遊んでみよう!!
まずはみんなおなじみHello Worldですね
void main(){
print("Hello World");
}
さきほどメリットで言った関数宣言時に戻り値を左に書くはこういうことです
void main(){
print(helloWorld());
}
String helloWorld(){
return "Hello World";
}
int numberFunc(int num){
return num ** num;
}
ちなみにDartには**演算子がないので標準ライブラリから pow関数を呼び出します
import "dart:math";
void main(){
print(numberFunc(11));
}
num numberFunc(int num){ //* num型(number型)を返す
return pow(num,num); //* pow関数はnum型が返される
}
この画像のようにDartの拡張機能をvscodeに入れとくと返ってくる型が見えるのがめちゃいいです。
個人的にはTypeScriptみたいな言語よりも返ってくる方と受け取る型が見やすいので好きです
Dartで遊んでみる(finalとconstの違い)
Dartを触ったことがある人ならfinalとconstの違いが一回は迷ったことあるんじゃないすか?(特にJS触ったことある人なら)
最近やっと完全に理解したので一応書いときます。
finalとは
完全にJSでいうconstです。
実行時に決まる値です。
constとは
じゃあconstは何やねんって思ったと思うんですけどね
Dartはコンパイルできる言語なんですよ。
だから常に一定の値である値しかconstにできません。(ただの数字とか)
若干わからないと思うのでコード例をこれから出します。
コード例
まずは動く基本のfinalとconst
void main(){
final String name = "aqa"; //* これは当然行ける
const String nm = "aqa"; //* これもどんなときでも値が変わらないから行ける
}
大丈夫なfinal
void main(){
final today = DateTime.now();
//* jsでいうDate.now()ね あとfinalとかつけたら型名省略できるよ
}
finalは実行時に決まるのでDateTime.now()のような実行時によって変わるものでも大丈夫です。
ですがconstは先程言ったように常に一定の値である値しかconstにできません。
なので上のコードをconstに変えるとエラーが出ます。
void main(){
const today = DateTime.now();
}
のようにエラーが出ます。
これがconstとfinalの決定的な違いです。
こっから先はCLI作成してみようってコーナーです。
今書いてます