見出し画像

C言語の人がPythonを学んだ時に落ち着かないこと

おはようございます!
ケイコバです。

昨日、ProgateでPythonのレッスン5つを終えました。

この5つのレッスンを通じて、Pythonの基本的な書き方と、クラスや継承の考え方についてが学べるようになっています。

Pythonは書いてて楽しいし、効率よく、かつコードの見た目もスッキリさせる工夫がされている言語だということがよく分かりました。
一方で普段仕事でC言語(たまにPerl)を使っている私にとって、Pythonの構文は「え、これでいいの!?」と落ち着かない部分もありました。

今日は普段C言語を使っている方がPythonを始めた時に感じるであろう落ち着かないポイントを3つ挙げてみました。

インデントがスコープを表す

pythonでは、例えば関数を定義した際やif文を書くときであっても、{ }で括る必要はありません。

/* C言語の関数定義 */
int Func(void)
{
 ・・・
}
/****/

/* Pythonの関数定義 */
def Func():
    ・・・
/****/

スコープは{}で表すと言うのが染み付いているC言語の人は、
「この関数どこまでなの?」
「この下に別の実装書いてもエラーにならないの?」

と不安になりますが、これでいいんです。

C言語にとってはインデントは体裁を整えるための工夫でしかないですが、
Pythonはその構文のスコープを意味する"記号"なのです。

Pythonの特徴として誰が書いても読みやすい同じようなコードになる、と言うのがありますが、こうしてインデントそのものに意味を持たせることで実現しているわけですね。

優秀なfor文

for文はとても優秀で、ユーザーが細かいことを気にしなくてもPythonが勝手に処理をしてくれます。

下記は配列をfor文で処理する場合の違いを書いてみました。

C言語の場合は、
・配列を定義して、
・その際に要素数を何らかわかるようにしておいて(ここではMAX_NUMで定義されているものとして)、
・for文ではインデックスの変数(i)が要素数未満になるように条件を書いて、、、
と言う処理が必要です。

Pythonの場合、
・配列を定義して
・for文に配列からデータを取り出す変数(ここではdata)と配列を書く
だけです。

/* C言語の場合 */
int array[MAX_NUM] = { 0, 1, 2, 3 };

for(int i = 0; i < MAX_NUM; i++)
{
    array[i] = xxxx・・・ /*処理*/
}
/****/

/* Pythonの場合 */
array = [ 0, 1, 2, 3 ]

for data in array:
    data = xxxx・・・ /*処理*/

/****/

その配列に要素がいくつあるか、配列からとってきた値が何番目の要素か、そんなことはPythonが勝手に判断してくれるので、ユーザはfor文の中で意識する必要は無いわけですね。

C言語の書き方に慣れていると、Pythonの書き方は要素数や条件を指定していないので大丈夫なの?と思ってしまいますが、これで良いのです。
単純に配列の全要素に処理をかけるのであれば、Python側でうまくやってくれます。

もちろん要素数を指定したり、インデックスの開始番号を指定したりする場合はそれに応じた書き方があります。
Pythonの場合配列操作の構文も多彩なので便利ですが、一方でその多彩な構文を知っている必要があると言うのが難しい部分なのかもしれませんね。
C言語だったら変数操作してガリガリ実装すれば大抵何でもできるので。。。

switch文は無い

if〜else〜で書くか、switchで書くか、C言語の人は悩む場面が多いかと思います。

同じことを実現しているはずなのに、if〜else〜で書いたらレビューで「ここはswitchだろ」なんて指摘されたり。。

Pythonはそんなことで悩む必要はありません。
なぜならswitch文など存在しないので。

なのでPythonで複数の条件で分岐するような記述をしたい場合、基本的にif〜elif〜を連ねていくことになります。

あまり分岐が多いとSwitchが使える方がスッキリする気がするし、if〜else〜を連打することに拒否感があるCプログラマーも多いと思います。

でもこの辺の潔さが、上の方でも書いた"誰が書いても同じようなコード"になるための仕組みなんですかね。

終わりに

今日はC言語利用者が新たにPythonを学習した際に感じるであろう落ち着かないポイントを3つ並べてみました。

力任せに実装できてしまい属人性の強いC言語に対して、
誰が書いても同じような実装になることをコンセプトにしているPython。

細かい部分でも結構構文の違いがあるものですね。

私のように普段C言語しか使わない人からすると落ち着かない部分がたくさんありそうですが、簡単にキレイにかけるPythonはとても魅力的な言語ですね。


最後まで読んでいただき、ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?