画面にこう出れば正解
どの言語で書いても、同じ入力なら画面に出る文字は1文字も違わない、というのが正解の決め方です(例は Python で動かしたときのコマンドです)。
名前を渡す
$ python3 hello.py 太郎
こんにちは、太郎さん!名前を渡さない
$ python3 hello.py
こんにちは、ゲストさん!英字の名前
$ python3 hello.py Alice
こんにちは、Aliceさん!めずらしい漢字(𠮷)
$ python3 hello.py 𠮷田
こんにちは、𠮷田さん!10言語のプログラム
どれもそのまま保存して動かせます。毎朝、上の正解の例をすべて実際に動かして確かめています。
hello.php8.4.26 で 4 / 4 件の出力が正解と一致
<?php
// 名前を受け取ってあいさつする
$name = $argv[1] ?? 'ゲスト';
echo "こんにちは、{$name}さん!\n";
動かし方(ファイルを保存したフォルダで) ・ PHP を入れる
$ php hello.php 太郎
hello.py3.14.7 で 4 / 4 件の出力が正解と一致
# 名前を受け取ってあいさつする
import sys
name = sys.argv[1] if len(sys.argv) > 1 else "ゲスト"
print(f"こんにちは、{name}さん!")
動かし方(ファイルを保存したフォルダで) ・ Python を入れる
$ python3 hello.py 太郎
hello.go1.27.2 で 4 / 4 件の出力が正解と一致
// 名前を受け取ってあいさつする
package main
import (
"fmt"
"os"
)
func main() {
name := "ゲスト"
if len(os.Args) > 1 {
name = os.Args[1]
}
fmt.Printf("こんにちは、%sさん!\n", name)
}
動かし方(ファイルを保存したフォルダで) ・ Go を入れる
$ go run hello.go 太郎
hello.js24.15.0 で 4 / 4 件の出力が正解と一致
// 名前を受け取ってあいさつする
const name = process.argv[2] ?? "ゲスト";
console.log(`こんにちは、${name}さん!`);
動かし方(ファイルを保存したフォルダで) ・ JavaScript を入れる
$ node hello.js 太郎
Hello.java21.0.12 で 4 / 4 件の出力が正解と一致
// 名前を受け取ってあいさつする
public class Hello {
public static void main(String[] args) {
String name = args.length > 0 ? args[0] : "ゲスト";
System.out.println("こんにちは、" + name + "さん!");
}
}
動かし方(ファイルを保存したフォルダで) ・ Java を入れる
$ java Hello.java 太郎
hello.cs10.0.402 で 4 / 4 件の出力が正解と一致
// 名前を受け取ってあいさつする
var name = args.Length > 0 ? args[0] : "ゲスト";
Console.WriteLine($"こんにちは、{name}さん!");
動かし方(ファイルを保存したフォルダで) ・ C# を入れる
$ dotnet run hello.cs -- 太郎
hello.rs1.99.0 で 4 / 4 件の出力が正解と一致
// 名前を受け取ってあいさつする
fn main() {
let name = std::env::args().nth(1).unwrap_or_else(|| "ゲスト".to_string());
println!("こんにちは、{name}さん!");
}
動かし方(ファイルを保存したフォルダで) ・ Rust を入れる
$ rustc hello.rs && ./hello 太郎
hello.rb4.0.7 で 4 / 4 件の出力が正解と一致
# 名前を受け取ってあいさつする
name = ARGV[0] || "ゲスト"
puts "こんにちは、#{name}さん!"
動かし方(ファイルを保存したフォルダで) ・ Ruby を入れる
$ ruby hello.rb 太郎
hello.kt2.4.21 で 4 / 4 件の出力が正解と一致
// 名前を受け取ってあいさつする
fun main(args: Array<String>) {
val name = args.firstOrNull() ?: "ゲスト"
println("こんにちは、${name}さん!")
}
動かし方(ファイルを保存したフォルダで) ・ Kotlin を入れる
$ kotlinc hello.kt -include-runtime -d hello.jar && java -jar hello.jar 太郎
hello.swift6.3.3 で 4 / 4 件の出力が正解と一致
// 名前を受け取ってあいさつする
let args = CommandLine.arguments
let name = args.count > 1 ? args[1] : "ゲスト"
print("こんにちは、\(name)さん!")
動かし方(ファイルを保存したフォルダで) ・ Swift を入れる
$ swift hello.swift 太郎
この回でやること
- 画面に文字を出す(
print・echo・console.logなど) - プログラムを動かすときに、外から値を渡す(コマンドライン引数)
- 値が渡されなかったときに、代わりの値を使う
解説
画面に文字を出す
どの言語にも、文字を画面に出す命令があります。Python は print、JavaScript は console.log、PHP は echo、Java は System.out.println です。名前は違っても、やっていることは同じです。
外から名前を受け取る
プログラムを動かすとき、ファイル名の後ろに書いた言葉は「コマンドライン引数」として、プログラムに渡されます。python3 hello.py 太郎 なら、「太郎」が渡されます。
受け取り方は言語ごとに違います。Python は sys.argv、JavaScript(Node.js)は process.argv、Go は os.Args という並び(配列)に入っています。並びの最初(0番目)にはプログラム自身の名前などが入っているので、渡した名前は1番目(JavaScript は2番目)です。Java・C# は args、Ruby は ARGV で、こちらは0番目から渡した値が入っています。
名前が無いときは「ゲスト」にする
名前を渡さずに動かすと、並びの1番目はありません。そのまま読むと、言語によってはエラーで止まります。そこで「並びの長さが1より大きいか」を確かめたり、「無ければこの値」と書ける書き方(??・||・unwrap_or_else など)を使ったりして、「ゲスト」を入れています。
つまずきやすいところ
- 日本語が文字化けする: Windows のコマンドプロンプトで日本語が化けるときは、Windows Terminal を使うか、
chcp 65001と入力してから動かしてみてください - PHP で変数のすぐ後ろに日本語を書く:
"こんにちは、$nameさん!"と書くと、PHP は$nameさんまでを変数の名前だと思います。{$name}のように{}で囲みます
練習
- 「こんにちは」を「おはようございます」に変えてみましょう
- 名前を2つ受け取って「こんにちは、太郎さんと花子さん!」と出してみましょう