1.開発の分野で比較する

JavaPython
ソースコードの記述スタイル変数の宣言時に型を示す必要があるなど、明示的な構文を採用している変数の宣言時に型を示す必要がないなど、簡潔な構文を採用している
エントリーポイント(プログラムの実行開始点)の実装方法標準で用意されている「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する
     ファイルの中身は多くのユーザが認めた結果と思えば良い