アラフォーからのプログラミングとデザイン

大人から始めたプログラミングとデザインについてのあれこれ

初心者がインデントの重要性を知るにはPythonがいい

f:id:simpledancer:20171022180002p:plain

PyQを進めています。今日は仕事が休みなので筋トレしてプログラミングして筋トレしてプログラミングして。。。のエンドレスループです。

simpledancer.hatenablog.com

インデントエラーが連発したので改めて調べた

今までRubyもJavaも

「インデント気をつけて」と言われながらもやんわりとしか実行してなかったし

強いて言えばインデントなんて

「見栄えと言うかコードが読みにくいから綺麗にしてね」ってことだという認識でいました(yamlでちょっとその意識は変わったものの)

Rubyist Magazine - プログラマーのための YAML 入門 (初級編)

 

しかしPythonはインデントがちゃんと入ってないとそもそも実行さえできないんですよね(もちろん実行できる場合もありますがPyQの場合合格にならない!)。

さらにインデント「とりあえず入ってればオッケーでしょ」ぐらいの感覚で進めていたところこんなに厳密な縛りがあったとは!

Python入門 - 構文

Python ではインデント(行頭の空白文字の数)が重要な意味を持ち、同じ数の空白でインデントされた文がブロックとみなされます。

a = 3
if a == 5:
    print "AAA"    # if文の対象
    print "BBB"    # if文の対象
print "CCC"        # if文の対象ではない

インデントには通常、4個の空白文字を使用します。タブ文字は、インデントが8の倍数になるように1~8個の空白文字とみなされます。

[空白][空白][TAB]print "AAA"         # 8文字の空白とみなされる

 

知らなかったyo。

かっこでくくらない代わりにインデントでっていうのはもちろん把握していたものの

これって逆にエラーがわかりにくく感じてしまいます。(慣れだと思いますが)

ただし、熟練のプログラマーさんにいつも「コードが見にくい!」と言われていたので

インデントの意識を植え付けられるのでは??と思ったところ確かに書いていました。

codezine.jp

この記法の利点は、プログラマーにインデントを強要できることにあります。プログラミング言語の初学者には、インデントの重要性がわからずに全て左詰めでコードを書いてしまうようなことがたまにあります。しかし、Pythonではそれはできません。ifでブロックを書きたければ、インデントするしかないのです。そのため、Pythonのブロックは誰が書いても見やすい物になります。

 中括弧やendがないのも利点です。ソース中のノイズが少ない分、本当の処理に意識を集中しやすくなります

 

 確かにPythonのコードは他の言語に比べてすっきり見やすい気がする。整然としてるというか。(たとえ私が書いたとしても)

python.keicode.com

つい;を使ってしまったり とりあえずインデントなしでガーッと書いてしまったりしてエラーが出まくってなんだよそれ!で、だいたいindent errorが出てます。そういうわけでまだ全然慣れませんけど。

PyQは楽しく進めてます。

simpledancer.hatenablog.com