巷で話題のプログラミング言語「Python」。
ふだんはC#やC++、PHPなどの言語を使用しているボクですが、最近ひょんなことからPythonをよく触っています。
まだなれているとは言えないので、はっきりとはいえませんが、
やっぱりPythonはめんどくさい!
です。(T T)
【めんどくさい理由①】関数の仕様がほかと違っている!
たとえば、もっとも基本的な関数のひとつであるprintを例に取ってみます。
C言語などでは、printを実行するごとに同じ行に追記されていきますよね。
print("A")
print("B")
print("C")
結果>ABC
これはPHP、Javascript、C#などでも同様です。ほとんどの言語でprint(echo)関数は同じ行に追記される仕様になっています。
同じ行に出力されるので、気楽に文字列の結合ができるのです。
print("result:");
print(data[0]);
>result:1//データをかんたんに整形して表示できる!
ところが、Pythonでは自動的に改行されてしまいます!
print("A")
print("B")
print("C")
結果>
A
B
C
↑これ、長年プログラミングをしている身からすると、とっても不自然です。
CでもC#でもPHPでも、ほぼすべての言語で、改行は自動的には行われません!
このように、Pythonでは、他の言語と仕様が違っている関数がとても多いのが特徴です。
この仕様の違いが理由で、感覚的に書けないという印象があります。
とくに他の言語でしっかり学んできた人にとっては、扱いにくい印象を受けると思います。経験的にこう書けばいいだろうと思って実行してみると、予想外のエラー・トラブルにぶち当たります。
ちなみに、printに関しては、endオプションをつけてあげると、改行しないで出力することができます。
print('bravo', end='')
ですが、オプションが長い。
デフォルトで改行しないようにしておいてくれれば、応用が効きやすいのに…と思ってしまいます。
よくつかわれるライブラリの仕様にも、さまざまな問題があります。
例えば、Jsonライブラリを使ってjsonを出力すると、null部分がNoneに変わっていたり。。。
{'result': None}
こんなのjsonじゃないでしょ。
「オプションつければ大丈夫」って言われるけど、オプションをつけないといけないことが問題なんです。
多くのプログラマーが使いやすいようにするためには、デフォルトで他言語と互換性のある標準仕様の動作をしてくれなければいけないはずです。
【めんどくさい理由②】インデントがややこしい
Pythonはifやforのまとまりをインデントで表現する必要があります。
これも非常に厄介です。
①の理由とも重なりますが、他の多く(というかほぼすべて)の言語は{}でまとまりを表現します。
if(a==0){
hoge();
}
インデントがずれていても、しっかり実行できます。
しかし、Pythonはインデントが揃っていないと、正しく実行することができません。
if a==0:
hoge()
インデントというのはスペースでつくっても、tabでつくっても見た目は同じです。
しかし、Pythonでは、すべてのインデントをスペースかtabのどちらかに統一することが求められます。これが揃っていないと、初心者あるあるの「unexpected indent」エラーとなってしまいます。
どこのインデントがおかしいのか、延々さがす羽目になります。
こんなことなら、ほかの言語のように、{}でくくる仕様のほうがラクだと思うのですが・・・
【めんどくさい理由③】うしろの関数を呼び出せない
Pythonでは、ほかの関数を呼び出したいとき、さきに呼び出し先の関数が定義されている必要があります。
def hoge1():
def hoge2():
hoge3()//エラー!
def hoge3():
hoge2()//OK!
この例だと、hoge2からhoge3を呼びだすことはできません。
Pythonはスクリプトを上から順に読み込んでいます。よって、hoge2からhoge3を呼び出そうとしている時点では、hoge3は読み込まれていないので、実行できずエラーとなります。
これも時代遅れな感じが否めないんですよね~
同様の仕様なのは、C言語くらいです。PHP(CLIでも)やC#、Node.jsでは後ろに定義されている関数も呼び出すことができるのに、かんたんを謳っているPythonができないとはどういうことだ?(;´д`)トホホ…
と思っていたけど…
このようにPythonに批判的な見方をしていたボクですが、最近はPythonの便利さがわかってきました。
というのも先日、Linuxで大量のテキストファイルから正規表現に一致する部分を抽出するという作業をやったのです。数百に及ぶhtmlから画像ファイルのURLを抽出し、テキストファイルに書き出すというものでした。はじめsedコマンドでやろうとしたのですが、めちゃくちゃ大変。パイプに、オプションに、正規表現に、と悪戦苦闘。ところが、Pythonをつかったら瞬殺でした!!
- globでファイルをリスト化し、
- forでファイルを開き、
- findallで抽出
さくっと完結できました。
たしかに、プログラミングに慣れていると、ほかの言語のほうが圧倒的にストレスなく、直感的にプログラミングできます。でも、ちょっとした作業なら、シェルスクリプトをつかうよりもかんたんに自動化でき、OSを乗り越えて流用できるし、便利だなあと思うようになりました。
「次世代のシェルスクリプト」みたいな感覚で使うと、Pythonの恩恵を感じることができそうです。
先述したprint関数も、自動作業中にログを出力する用途なら、自動で改行してくれたほうがたしかに便利ですもんね。
とはいえ、複雑なことをしようとすると無理が生じてきやすいのは確かだと思われます。かんたんだからと言う理由で、なんでもかんでもPythonでという考えだと、かえって苦労する可能性があります。
やっぱりプログラムは適材適所。用途にあった言語をつかうのがいいということでしょう。
コメント