構文は、概念を表現するための表面上の記法です。

例えば次のコードは、見た目は大きく異なります。

PHP:

$user = $repository->find($id)
    ?? throw new RuntimeException('Not found');

Python:

user = repository.find(id)

if user is None:
    raise RuntimeError("Not found")

Rust:

let user = repository
    .find(id)
    .ok_or(Error::NotFound)?;

しかし、解決している問題は同じです。

ユーザーを検索する
存在すれば値を得る
存在しなければ失敗として処理する

したがって、言語を学ぶ際には、記号をそのまま暗記するのではなく、次の順番で理解すると効果的です。

1. 何を表現しようとしているか
2. どのような型やデータ構造を使うか
3. どの時点で安全性を検査するか
4. その言語ではどの構文で記述するか

言語間で本当に異なるのは、「扱う問題」よりも、どの問題を型で解き、どの問題を実行時検査で解き、どの問題を開発者の規律に委ねるかです。