背景
「初心者向けの言語はPythonだ!!」と、よく耳にする。 しかし、初心者にPythonを勉強してもらうと、変数型の意識が薄れてしまうことが多い。
関数オブジェクトを渡す関数にintを渡したり、doubleを渡す関数にstringを渡したり。。。
そこで、本当に初心者向けの言語は何かを考察してみる。
初心者向け言語の要素だと思うこと
- 入力・出力が簡単 -> 多用するのでやたら長いと困る
- 変数型に厳しい -> 初心者こそ変数の型は意識すべき
- 環境構築が簡単 -> 実行環境が手軽に用意できる
- Hello Worldがシンプルに記述できる -> ちょっとしたプログラムはシンプルに書ける
- オブジェクト指向の勉強ができる -> 必要なときに簡単にクラスを使える
結論
早速の結論だが、個人的に最も初心者向けだと思ったのは、Kotlinである。
KotlinはIntelliJ IDEAをインストールすれば手軽に実行環境を用意することができる。
// 2整数の和を求める関数
fun add(v1: Int, v2: Int): Int {
return v1 + v2
}
// はじめに実行される関数
fun main() {
print("name: ")
val name = readLine() // 入力
println("Hello, $name!")
val sum = add(2 , 3)
println("2 + 3 = $sum")
}
自明な時は変数型を記述する必要はないが、IntelliJ IDEAでは自動で型を認識してくれるので、自然と型を意識できる。
他の言語はどうなんだい?
上述のプログラムと同等のものを他の言語でも記述して比較する。
C++
型はあるが、環境構築が大変。特にWindowsでは、環境変数を通すのが初心者には難しい。
PleiadesのサイトからEclipseをインストールすれば簡単に環境構築できそう。
あと入出力がちょっと特殊。
#include <iostream>
#include <string>
// 2整数の和を求める関数
// 関数は使用箇所より先に記述する
int add(int v1, int v2) {
return v1 + v2;
}
// はじめに実行される関数
int main() {
std::string name;
std::cout << "name: ";
std::cin >> name;
std::cout << "Hello, " << name << "!" << std::endl;
int sum = add(2, 3);
std::cout << "2 + 3 = " << sum << std::endl;
return 0;
}
Java
Javaはとにかく長い。main関数も出力も長すぎる。クラスを知らない初心者にとって意味不明な「呪文」がたくさんある。
import java.util.Scanner;
public class MyClass {
// はじめに実行される関数
public static void main(String[] args) {
System.out.print("name: ");
String name = new Scanner(System.in).nextLine();
System.out.println("Hello, " + name + "!");
int sum = add(2, 3);
System.out.println("2 + 3 = " + sum);
}
// 2整数の和を求める関数
private static int add(int v1, int v2) {
return v1 + v2;
}
}
Python
Microsoft Storeでインストールするだけで環境構築できる。
また、上述の通り型が無い。アノテーションで型を書くことを強制できれば初心者向けかもしれない。関数のオーバーロードができないので、型が曖昧になりやすい。
引数の型がint, float, np.arrayで動作可能にしたいときに、型を書いたり、条件分岐で処理を分けたりするのが大変。
# 先頭から順に実行される
name = input("name: ")
print(f"Hello, {name}!")
# 2整数の和を求める関数
# 「: int」は型指定 ※書かなくても実行可
def add(v1: int, v2: int) -> int:
return v1 + v2
# 変数に型を付けることもできる
sum: int = add(2, 3)
print(f"2 + 3 = {sum}")
その他
リクエストがあったら他の言語でも書きます。