

今回もよろしくお願いします!!

はい、頑張っていきましょうね。
前回は「Hello,world!」と画面に表示させましたが、今回は様々な文字や数字を表示してみましょう!
前回は「Hello,world!」と画面に表示させましたが、今回は様々な文字や数字を表示してみましょう!

楽しみです!
前回の「Hello, world!」のプログラムはこちら↓↓↓
画面に文字列を表示する

改めて、「Hello, world!」プログラムの内容を見てみましょう。
void main(){
print("Hello, world!");
}

これって、print("");のダブルクォーテーションの中に書いた文字を表示してるってことですよね?

ほぼそれで合っていますよ。正確には、print();の括弧内に書かれた文字列を表示しているんです。

文字列? 「文字」じゃないんですか?

プログラミングの世界では、「A」「あ」「1」のように1文字だけの文字を扱う時に「文字」、「ABC」「あいうえお」「123」のように複数の文字を扱う時に「文字列」という言い方をするんです。

なるほど、文字が列のように並んでいるから文字列というわけですね。

その通りです。Dartでは文字列は""(ダブルクォーテーション)または''(シングルクォーテーション)で囲むという決まりがあるので、"Hello, world!"や’ Hello, world!’のように書くわけです。

そういうことなんですね! わかりました。文字列は""で囲む……覚えました!

もちろん、以下のように何回でも書くことができます。void main(){から}の間に書かなければならない点にだけ注意してくださいね。
void main(){
print("タピオカ");
print("ココナッツ");
print("ミルク");
}
実行結果タピオカ
ココナッツ
ミルク
ココナッツ
ミルク

おぉー!! 3行表示されましたね!

print();は、画面に文字を表示した後、自動的に改行します。

何か表示したいと思ったら改行もセットなんですね。

ではここで問題です。ただ改行だけさせたい場合はどのように記述すればよいでしょうか。

何も書かないで改行するってことですか? うーん……。printの中身を空欄にするとか?

ほぼ正解です。正確には、print(""); と表記します。
void main(){
print("タピオカ");
print("");
print("ココナッツ");
print("");
print("ミルク");
}
実行結果タピオカ
ココナッツ
ミルク
ココナッツ
ミルク

ほんとだ! 1行あきましたね!

""の中に文字列を書かないもののことを、「空文字列」といいます。こちらも併せて覚えておいてくださいね。

わかりました!
文字を繋げる(文字列結合)

Dartでは、「+」(プラス)記号を使うことで、文字列と文字列をくっつけることができます。「+」記号は半角で入力してくださいね。
void main(){
print("おはよう" + "ございます");
print("こ" + "んにちは1" + "2345");
print("123" + "456");
}
実行結果おはようございます
こんにちは12345
123456
こんにちは12345
123456

これって何に使うんですか? くっつけたいなら普通に"おはようございます"とか書けばよくないですか?

いい質問です。全くその通りで合っています。決まった文字列を繋げるだけであればわざわざ+記号を使う必要はありませんよね。後ほど「変数」という考え方について解説しますが、その時に重要となる考え方なので、しっかりここで覚えておいてくださいね!

わかりました! 「+」で文字列をくっつける! 覚えました!
計算をさせてみよう

次は、簡単な計算をやってみましょう。「+」「-」はそのまま足し算、引き算ができます。掛け算は「*(アスタリスク)」、割り算は「/(スラッシュ)」を使います。半角で入力してくださいね。

あれ? 「+」って文字列を繋げる役割なんですよね?

はい、「+」には文字列を結合する役割と、足し算をする役割の両方があるんです。以下の例を試してみてください。
void main() {
print(1);
print(10 + 3);
print(10 - 3);
print(10 * 3);
print(10 / 3);
}
実行結果1
13
7
30
3.3333333333333335
13
7
30
3.3333333333333335

足し算したから13、引き算したから7、掛け算したから30で、割り算したから……あれー? 10÷3は3.3333…になるはずですよね? 何で5?

よく気付きましたね! これは不具合ではなく、Dart言語の仕様によるものです。通常の計算では、小数点以下が長くなる場合に不正確な結果が出ることがあります。基本的には気にしなくて良いのですが、もし正確な計算が必要となる場合は、Decimalというものを使います。ここでは詳細は割愛しますね。

へ~……そういうものなんですね。とにかく、超細かい計算では不正確ってことですね!

そういうことです。また、式に基づいて演算(≒計算)を行なうことを「演算」、演算の種類を指定する記号のことを「演算子」と呼びます。「+」「-」「*」「/」は算術演算子と呼ばれます。

なるほど、計算のことを「演算」、計算する記号のことを「演算子」っていうんですね!

はい。視認性のため、演算子の前と後ろには半角スペースを入れましょう。

わかりました!
「+」の使い分け

ふと思ったんですけど、「10+3」を計算させないでそのまま表示したい場合はどうすればいいんですか?

姫野さんは既にその方法を知っているはずですよ。少し考えてみてください。

う~ん……print(10 + 3);だと計算されちゃうんですよね……。

文字列を表示する方法、ありましたよね?

あっ! もじれつ!! ""を使うんですね!! ということは、print("10 + 3");って書けば……!!
void main(){
print("10 + 3");
}
実行結果10 + 3

やったー! できました!!

さすがですね! 次は、「10 + 3 = 13」を表示させてみましょう。「13」の部分は、足し算の結果が出るようにしてくださいね。

そんなの簡単ですよ!! print("10 + 3 = 13");って書くだけじゃないですか!

それ自分で足し算しちゃってるじゃないですか……。「13」のところは、プログラムに計算させます。

なるほどー……そういうことですね。えっと……こんな感じですか??
void main(){
print("10+3=" + 10 + 3);
}

あれー!? エラーになっちゃいました!

実は、Dartでは文字列と数値をそのまま同時に出力することができません。そこで、「10 + 3」の計算結果を文字列として表示するために、${}を使います。

${}って何ですか?

文字列の中に${}を埋め込むと、中括弧の内容を計算して文字列に埋め込んでくれます。

なるほど……。${計算式}……覚えました! そうすると、ダブルクォーテーションの囲いの中に「${10 + 3}」を書けばいいんでしょうか?
void main(){
print("10 + 3 = ${10 + 3}");
}
実行結果10 + 3 = 13

やったー、できましたー!

1つ目の「+」は文字列としての「+」で、2つ目の「+」は足し算をするための「+」ですね。

さっきは文字列をくっつける「+」でしたよね。「+」の使い分け、何となくわかってきた気がします。

では、問題を解いてみましょう。次のプログラムの実行結果を予想してみてください。
void main(){
print("${3 + 5} + 10");
print("3" + "10 + 5");
print("10" + "3 + ${10 + 5}");
}

2行目は「8 + 10」が出ると思います! $の中括弧の中は足し算の「+」、後ろの「+」は文字列結合の「+」だから。

いいですね。3行目はどうでしょうか?

文字列の「3」と「10+5」をくっつける「+」だから……。「310 + 5」でしょうか?

素晴らしいです。最後に4行目。

まず文字列の「10」と文字列結合の「+」。その次に文字列の「3+」があるから、とりあえず「103+」はできますよね。中括弧の中は普通の足し算だから「15」が出て、$で文字列になる……。ってことは、「103+15」でしょうか?
実行結果8 + 10
310 + 5
103 + 15
310 + 5
103 + 15

全問正解です! うまく「+」を使いこなしてくださいね。

が、頑張ります……。