2016/10/26

[py]型指定しない言語を使う人は、どうやって型を見分けてるのだろうか?

まあ、pythonだけではないのですが。

pythonを使い始めてかなり悩んでいるのが、変数を型宣言せずに使えることです。
なんというか、C言語で言えばすべてがvoidポインタ型になっていて、キャストせずに最後に代入した型として使える、という感じだろうか。

 

いま、プロトコルを解析したり作ったりしているのだが、decode('hex')とか、encode('hex')とか、struct.pack()とか、struct.unpack()とか、そんなのばかり使っている。
技がまだわからないので、bytearray型からprintするときはencode('hex')して、計算するときはdecode('hex')して、とパタパタやっている。

そうしていると、だいたいどこかで間違って、既にprintできる形でできている変数を、さらにencode('hex')して「1234」が「31323334」になったりしてしまう、という悲劇が起きている。
関数化して間違いを少なくしようとはしているのだけど、その関数に与えるのを間違えるのもしばしばだ。

 

だいたい、bytearrayでも、strでも、どっちも同じグループだから同じように扱えてしまうのがいかん!
いかん、と力強くいいたいのだけど、最近の言語はどっちかといえば型を強要しない方向が多かったように思う。
JavaScriptもそうだし、C#もvarが使えるようになったみたいだし。


ということは、使う人がそれに慣れればうまく使えるという意味ではないだろうか。
もしうまく使えないのであれば、そういう傾向は広がらないはずだからだ。

 

思いついたのは、変数の型名を決めることだった。
なんだっけ、なんかそういう名前ルールの名前があったはずだ(コロンブスとかコロンビアとか、なんかそういう感じだったような。。。)。
昔は評判が悪いという人もいた名前付けルールなのだけど、型のない時代にこそ生きてくるのか?

ただまあ、これはこれでけっこうめんどくさい。
関数名は、読んでわかりやすいように、文字列を返すときは「xxStr()」などとしているが、1つでも忘れてしまうと意味が無くなってしまうので、しんどい。

 

 

などと調べていたら、pythonでアノテーションのしくみが導入されるらしいという記事を見かけた。
Javaもそうだったけど、あれはよいよね。
まあ、統合開発環境じゃないと効果が少ないかもしれんが。

はっ、いまpythonをテキストエディタでやってるけど、IDEを使うと悩みが減るのだろうか?

4 件のコメント:

  1. 僕はIntelliJの pyCharm (有料)を使ってるっす。

    返信削除
    返信
    1. Web開発する人は有料版がよい、とありますねー。
      意外と高くない!と思ったのですが、初年度以降は5千円くらいなのか。。
      (買わないけど、値段だけは調べる。)

      削除
    2. IntelliJのpython plugin が良いかもしれません!
      pyCharmの制限付き無料版みたいなやつっす。

      削除
    3. 今回は、無料版pyCharmをインストールしてみました!
      Android Studio、IntelliJ、pyCharmと、なんでバラバラにインストールしてるんだかって^^;

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。