NTT DATA TECH
👴

C/C++の世界に閉じこもっていたオジサンがPythonに触れてみる  ~基礎編~ 第4/10回

に公開

はじめに

こんにちは、NTTデータに勤務する一人のオジサンです。

これまでC/C++言語を使って、がっつりとポインタやら参照やらに向き合いながら、プログラムを書いてきました。構造体と仲良くなり、クラスに振り回され、newとdeleteに責任を持つ。そんな人生でした。

しかし時代は変わり、AIだ、データサイエンスだ、機械学習だと騒がれる中、「とりあえずPythonに触れないとまずい」という危機感に駆られて、Pythonの世界へ足を踏み入れた。。。

そんなオジサンの独り言です。
勘違いがあっても、多めにみてください。

構文の違いを噛みしめる

Pythonの入門書を読み進め、「制御構文」の章へと差しかかる。

// cpp
int x = 10;
if (x > 5) {
    printf("大きい\n");
}
else if (x == 10) {
    printf("ぴったり\n");
}
else {
    printf("それ以下\n");
}
# python
x = 10
if x > 5:
    print("大きい")
elif x == 10:
    print("ぴったり")
else:
    print("それ以下")

なるほど。
型も書かない、セミコロンもない、波カッコもない。
最初はPythonのこの“緩さ”に戸惑っていたが、だいぶ筋が見えてきた。
カタチは違えどやってることは同じだ。

大事なのは、「何をするか」そこは変わってない。
そうか私は今、C/C++という言語の背広を脱いで、
PythonというTシャツに着替え始めてるのかもしれない。

まだ袖は通しきれてないけど。。。
これはこれで、悪くない着心地だ。

意味 C/C++ Python
等しい == ==
異なる != !=
AND && and
OR || or
NOT ! not

こうやって、if文に使いそうな演算子の違いを並べてみると
等しい・異なるは、どっちも変わらない。世界共通語みたいで嬉しくなる。
しかし、その下
AND、OR、NOT、ここで急に文化の違いが顔を出す。

C/C++では、&&、||、!、と何ともいえない記号の強さがあり
頭の中に直接、条件が突き刺さってくる。
無駄がなく。容赦もない。
まさに機械だ。

対して、Pythonは and, or, not。
文字で書かれていて、あまりにも自然すぎる。
if x > 0 and y < 10:

これ、もう日常会話じゃないか。
「そして」「または」「〜でなければ」
書いてある通りに読める。

昔の自分なら、「記号の方が速い」「短い方が正義だ」と思っていた。
だけど、人に伝えることを重視するなら、Pythonの書き方は理にかなってる。
やるじゃないか。。。Python。

構文の違いを噛みしめる2

// cpp
for (int i = 0; i < 5; i++) {
    printf("%d\n", i);
}

for (int i = 3; i < 8; i++) {
    printf("%d\n", i);
}

for (int i = 0; i < 10; i += 2) {
    printf("%d\n", i);
}

for (int i = 5; i > 0; i--) {
    printf("%d\n", i);
}
# python
for i in range(5):
    print(i)

for i in range(3, 8):
    print(i)

for i in range(0, 10, 2):
    print(i)

for i in range(5, 0, -1):
    print(i)

これだ。
何度書いてきたか分からない、おなじみの for 三点セット。
初期化、条件、更新。
この3つで1セット、それが私たちの流儀だった。
まるで職人の型。
頭で考えずとも、指が自然に書いてしまうレベルの慣れ。
「何をどこから、どこまで、どう進めるか」
それを明文化しなきゃ始まらない。
回す前から、意志がにじみ出る。
それがC++の流儀だ。

そして、これがPythonか。
「range()」 に、全部詰め込んできやがった。
開始、終了、ステップ―全部この中に。

わかってるやつの手際の良さだな。
まるで、仕込み済みの食材が冷蔵庫に並んでる感じ。
必要なものを取り出して、火にかけるだけ。。。そんな軽快さ。

range(3, 8) って見ただけで、3から7まで回すんだな。
range(0, 10, 2) も、偶数だけを歩いていく足音が聞こえてくる。
そして range(5, 0, -1)逆方向に流れていくカウント。

C++のi-- に相当する、逆巻く川の流れを
たった一つの引数で表してくるとは、流石だな。。。Python。

おわりに

if文にfor文、ああ、もう大丈夫だ。

最初は括弧もセミコロンもなくて戸惑ったけど、
いつの間にか、それがない方が自然に思えてきた。

インデントで流れを表すこのスタイルも、慣れてしまえばむしろ見やすい。

こうしてスッと書けて、スッと動く。
そんなPythonの空気感に、ちょっと染まってきてるのかもしれない(笑)

この先、関数やクラスが出てくると思うが
うん、この調子ならたいていのことは、もう困らないんじゃないか?

そう思っていた。この時までは。
if文とfor文の中に、あんなトリッキーな「そんなのアリかよ」的な構文があるなんて。

Python。。。まだまだ手の内を見せてなかったんだな

デジタルテクノロジーディレクター®

デジタルテクノロジーディレクター®

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています