Pythonにはあって、Javaには存在しない文法や特徴

こんにちは、ゆうせいです。

JavaとPythonは、どちらも人気の高いプログラミング言語ですが、文法・スタイル・思想に大きな違いがあります。
特にPythonは、「シンプルで読みやすい」ことを重視した設計になっており、Javaにはない独特な文法がたくさん存在します。


結論:Pythonの特徴的な文法・構文一覧(Javaにはない)

機能・文法PythonJava説明
リスト内包表記ありなし配列生成を1行で書ける簡潔な文法
動的型付けありなし変数に型を指定せず自由に扱える
with 文(コンテキストマネージャ)ありなしファイルなどの後処理を自動化
else付きループありなしループを正常終了したときだけ実行されるブロック
関数もオブジェクト(第一級関数)あり部分的関数を変数として扱える
デコレータ構文(@ありアノテーションとは別物関数やクラスに動的な処理を付与
多重代入ありなし複数の変数に一括代入できる
スライス構文ありなしリストや文字列の一部を簡単に取り出す
タプル(tuple)ありなし複数値をひとまとめにした不変のコレクション
可変長引数(*args, **kwargsありJavaにもあるが書き方が違う任意の数の引数を受け取れる
passありJavaでは空のブロックに {} を書く処理を一時的にスキップする記述

各文法を詳しく解説!


1. リスト内包表記(List Comprehension)

Python独自の超人気構文です!

squares = [x * x for x in range(5)]
# 結果: [0, 1, 4, 9, 16]

Javaでは for ループ+リストへの追加が必要。コードが長くなります。


2. 動的型付け

Pythonは変数に型を指定せずに使えます。

x = 10
x = "文字列"  # OK

Javaでは必ず型宣言が必要(int x = 10;など)


3. with文(コンテキストマネージャ)

自動でファイルを閉じたり、後処理をやってくれる便利な構文です。

with open("sample.txt", "r") as f:
    content = f.read()

Javaでは try-with-resources に似ていますが、with という構文そのものはありません。


4. else付きのループ

for i in range(5):
    if i == 3:
        break
else:
    print("ループを正常終了しました")

  • break せずに最後までループしたときだけ else が実行されます。
  • while でも使えます。

Javaにはこのような構文は存在しません。


5. 関数もオブジェクト(第一級関数)

関数を変数に代入したり、引数として渡したりできます。

def greet(name):
    print("Hello,", name)

f = greet
f("Python")  # 結果: Hello, Python

Javaでもラムダや関数型インターフェースで近いことはできますが、Pythonほど自然ではありません。


6. デコレータ(Decorator)

関数やクラスの定義に別の機能を簡単に追加できます。

def my_decorator(func):
    def wrapper():
        print("Start")
        func()
        print("End")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

Javaのアノテーションとは目的が違い、デコレータは実行時に動作を差し替えるための機能です。


7. 多重代入(Multiple Assignment)

a, b, c = 1, 2, 3

Javaではこのような書き方はできません。1行ずつ書く必要があります。


8. スライス構文

data = [0, 1, 2, 3, 4, 5]
print(data[1:4])  # 結果: [1, 2, 3]

Javaの配列やListでは subList メソッドが必要で、書き方が煩雑です。


9. タプル

point = (10, 20)

タプルは、変更できない(イミュータブル)複数のデータを1つにまとめたデータ構造です。

Javaには専用の構文はなく、必要なら Pair クラスなどを自作・使用します。


10. pass

何もしないけど文法的に空ブロックが必要なときに使います。

def not_implemented():
    pass

Javaでは {} のような空ブロックを書くのが一般的です。


まとめ

Pythonには、コードを短く・読みやすく書くための便利な文法が多数あります。
Javaではこのような書き方はできないか、やや回りくどくなる傾向があります。

Pythonの文法Javaでの代替簡潔さ
リスト内包表記ループ+追加処理Pythonが簡潔
withtry-with-resourcesJavaも可能だが記述が長い
else付きループ無し(完全非対応)Pythonだけ
スライス構文subListメソッドPythonが圧倒的に短い

今後の学習の指針

  • Pythonの「Pythonic(パイソニック)な書き方」に慣れる
  • JavaとPythonの書き方・設計の違いを整理しておく
  • Pythonの文法を使って短く読みやすいコードを書く練習

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。