1.開発の分野で比較する
Java | Python | |
ソースコードの記述スタイル | 変数の宣言時に型を示す必要があるなど、明示的な構文を採用している | 変数の宣言時に型を示す必要がないなど、簡潔な構文を採用している |
エントリーポイント(プログラムの実行開始点)の実装方法 | 標準で用意されている「main」メソッド(処理)を使う | 「if __name__ == “__main__”」という特殊な「if」条件文を使う |
機能の実装方法 | クラス(変数とメソッドをまとめた部品の設計図)を使ってプログラムを組み立てる「オブジェクト指向」の言語 | モジュール(追加機能群)を使って自由な設計でプログラムを組み立てる言語 |
習得しやすさ | プログラミング初心者にとってとっつきにくい部分がある | プログラミング初心者でもとっつきやすい |
2.Javaのmainメソッド
Javaでmainメソッドを宣言する
非常に明確に定義された単一のエントリーポイントを持っている
mainメソッドは、プログラムが最初に実行される場所
「public static void main(String[] args)」というフレーズが冗長に映る
例としてmainメソッドを「HelloWorld」クラスに格納する
mainメソッドの予期しない実行を防ぐことができる
Javaは構造や制御を明示することを重視しており、
この厳格さがセキュリティ強化につながっている
public class HelloWorld {
public static void main(String[] args){
System.out.print("Hello World");
}
}
public static void main(String[] args)
はJavaの実行に必須のメソッド
public・・・どこからでも参照可能
static・・・インスタンス可(new)しなくても外部から使用可能
void・・・・戻り値なし
main・・・・メソッド名
String[]・・引数をString型の配列で受け取る
args・・・・引数名の複数形でargumentsの略省
String[] argsはプログラム起動時に指定する値(コマンドライン引数)
引数名argsは、慣習的にargsが使われる、別の名前でも可
JavaはC言語の後継であり、C言語の慣習を受け継いでいるため
C言語で使われている引数名
argc(argument count(引数の個数))
argv(argument vector(引数の配列))
Java 21(2023/9/19にリリース)で
記述の一部を省略できるようになり、改善されている
mainメソッドの引数を省略できる
mainメソッドがpublicじゃなくてもよくなる
書かなくてよさそうなものを書かずにすむのですっきりする
mainメソッドをprivateにすることはできない、protectedは可能
3.Pythonの柔軟なエントリーポイント
Pythonではエントリーポイントの概念は無い
スクリプトの先頭から順にコードが実行される
if name == “main“: という条件文を使うことで
直接実行された場合にのみ実行されるコードを記述することができる
if __name__ == “__main__”について
__name__・・・実行されているモジュール名を指す項目名
モジュールが直接実行された時には「__main__」とセットされる
モジュールがimportされた時には「mymodule」とセットされる
if __name__ == “__main__”以下の部分はimportされただけでは動かない
__name__の詳しい使い方については
「Work Shop」の「if __name__ == “__main__”」を参照
4.違いの理由
言語の設計哲学
Java・・・大規模なシステム開発を想定、プログラム構造を明確にする
Python・・スクリプト言語として誕生、柔軟性と生産性を重視する
静的型付けと動的型付け
Java・・・静的型付け言語、コンパイル時に型チェックされる厳密な構造
Python・・動的型付け言語、実行時に型が決定される柔軟な構造
5.Pythonの悪意ある命令が実行される危険性
Pythonで「import」命令でPythonノジュールを読み込むと
読み込んだタイミングで、トップレベルにある命令が実行される
関数定義(def)された部分は動かない
通常のプログラム部分から動き出す
攻撃者は悪意のある命令をトップレベルに記述し
このファイルを呼び出すよう、他人に勧める
対応策
数多くのユーザの目に触れたであろうファイルをimportする
ファイルの中身は多くのユーザが認めた結果と思えば良い