カテゴリー: プログラミング関係

Pythonのコーディングスタイル

Pythonで一般的なコーディングスタイルがあるそうです。

http://pep8-ja.readthedocs.org/ja/latest/

PEP8というそうです。その中でも重要そうなものを簡単に紹介したいと思います。

  1. インデントは半角スペース4つ、タブは使わない!
  2. 79文字以下で文字を折り返す
  3. プログラムのまとまりが分かるように適せん空行を入れる
  4. 文字コードはUTF-8を使う
  5. 「”」を使うか「’」を使うかは統一する。(個人的には「’」で統一した方がいいかも)
  6. 関数の説明には「docstring」という形式を用いる。(後述)
  7. 演算子の前後、コンマの後ろにはスペースを入れる。括弧の内側にはスペースを入れない。
  8. 命名規則について
    1. モジュール名:全て小文字の短い名前
    2. クラス名:CapWords 方式(単語の頭文字を大文字にしてつなげる)
    3. 関数名:小文字のみ、必要に応じて単語をアンダースコアで区切る
    4. メソッド、インスタンス名:小文字のみ、必要に応じて単語をアンダースコアで区切る
    5. 定数:全て大文字、必要に応じて単語をアンダースコアで区切ります
    6. メソッドの第一引数:常に「self」

という感じです。

 

=docstringとは=

Python的お作法に則って書かれた関数につける説明。
3重クオート「”””」を用いて記述する。以下、例。

[python]
def konoyarou(n):
    """引き数の入力された数値の分だけ「このやろう!」
    を連結した文字列を返す。
    param int : Number of repetitions 繰り返す回数
    return str : Concatenated string 連結された文字列
    """
    return ‘このやろう’ * n
[/python]

ここに詳しい説明があるので興味のある方はどうぞ。

=docstringの説明終わり=

ということで、これらを守ってPythonをコーディングしましょう!

英語ができないと…

先日こんな記事を書きました。

[Ruby]配列のデフォルト値を0にする | INFORMATICS FINDER

この記事では、Rubyのデフォルト値を0で初期化するためにはどうすれば良いか
ということを書いていました。
まあ、Fixum#to_iを使ったらいいのではないかということで〆めています。

しかし先ほどこんなものを見つけました。

Can I create an array in Ruby with default values? | Stack Overflow

ちなみに、リンク先はプログラマー用のQ&Aサイトで
「Rubyで配列を作成する際にデフォルト値を設定するにはどうすれば良いか?」
という質問内容です。様々な解答が寄せられています。

わぉ。すでに議論されていたとは…。

 

しかも4年前…。

 

to_iメソッドで「0」に初期化できる!すごいこと思いついた!と思ったのですが、とうの昔に既出でした。

まあ、rubyは車輪の再発明も推奨している文化ではあるのですが、4年も遅れた情報を嬉々としてブログに掲載してしまうのはお恥ずかしいあまりです。

英語圏にも目を向けなくてはならないということを痛感しました。

[Ruby]配列のデフォルト値を0にする

どうもこんにちは,Rubyを使っていてハッシュみたいにある要素にアクセスしたときに値が存在しない場合のデフォルト値を設定できれば嬉しいなと思っていたのですが,どうもそういう機能がないようなので,0に初期化する方法を見つけました。

要は無限の要素に対して0で初期化したいわけです。

a = Array.new(,0)
5.times{|i| a[i] += 1}
p a => [1, 1, 1, 1, 1]

みたいなことがしたいわけです。
※もちろんこんな書き方はありません。

ぱっと考え付くのは,if文などを使って条件わけをすることですが,
そんなの全然スマートじゃない!

というわけで・・・
考えてみました。

今回注目したのは,
「nilに対して#to_iを行うと0になる」
という性質です。

これを使って,書くと

a = Array.new()
5.times{|i| a[i] = a[i].to_i + 1}
p a => [1, 1, 1, 1, 1]

みたいにワンラインで書くことができます。
※これはちゃんと動きます。

なので,if文とかで2行以上やりたくないときは使ってみてください。

まあ,2回目以降は数値に対して#to_iメソッドを使ってるのでエレガントではないですね・・・。

2015/9/19(土)追記
後で知ったのですが、Integer#to_iメソッドはselfを返すらしいので
この書き方はあながち間違ってないかもしいれないですね~。
http://docs.ruby-lang.org/ja/2.1.0/class/Integer.html#I_TO_I

UNITYで神になる。

廣鉄夫著の「UNITYで神になる本」を買って読んでます。
Amazonのリンクはこちら

最近インターフェースにはまっているので、「まあ、3Dもカバーしといた方がいいだろう」という動機のもとUNITYを触ってみたくなり上記の本を購入しました。
つまりゲームを作りたいとかいう感じではないです。

とりあえず、本に沿ってポチポチやってたら、簡単な世界と主人公ができました。
UNITY超簡単!

Demoを公開しましたので、確認してみてください。
で作った世界を自由に走り回れます。(操作は矢印キーです。)
残念ながら、google chromeは対応していないみたいなので、Firefoxとかで見ていただけると嬉しいです。
このレベルが半日でできます。(驚き)

これからUNITYを勉強していきたいと思います。

juman_knpを公開しました

日本語形態素解析システムのJUMANと、日本語文の構文・格・照応解析を行うシステムのKNPのラッパーをgemパッケージとして公開しました。
これで、Rubyを使って言語処理がしやすくなったと思います。

以下のコードでインストールできます。

[ruby]
gem install juman_knp
[/ruby]

詳しい使い方はこちらを見ていただけると良いかと思います。

初めて作ったgemなので、色々と不手際な部分があると思いますが、使っていただけると嬉しいです。

また、コメントなどもいただけると改良ができると思います。