書籍『エキスパートPythonプログラミング』の「2.3.4 プロキシ」でサンプルコードとして掲載されている、プロキシデコレータの実装例に登場するif文の条件式が、とても綺麗で「おーっ」と思った。
class User(object): def __init__(self, roles): self.roles = roles class Unauthorized(Exception): pass def protect(role): def _protect(function): def __protect(*args, **kw): user = globals().get('user') if user is None or role not in user.roles: raise Unauthorized("I won't tell you") return function(*args, **kw) return __protect return _protect
「もしユーザが何でもない、または、渡された役割がユーザの持つ役割に含まれていなければ」と云う感じだろうか。
高階関数でネストして関数オブジェクトを作って返している部分は置いといて、if文はPythonを知らない人にも意図が伝わるように出来ている。こういうコメント要らずな変数の名前を付けられるようにしたい。
ちなみにデコレータとは、Javaでいうアノテーションの概念を、より簡易に関数指向で定義出来るようにしたものみたい。
構文としては、関数定義のdefの上に@protect('admin')のように重ねてデコレートするだけのシンプルなものなんだけど、色んなパターンの使い道が紹介されていて面白い。
僕は昔から携帯電話は小さくなきゃダメ! と主張していて、スマートフォンもREGZAブランドが冠されたやつのようなゴテゴテとでっかいサイズは嫌なのです。
で、auのISシリーズラインナップの中では、コンパクトなIS05かIS06が良いなーと思ってた。
ただIS06は、とても残念なことにおサイフケータイ未搭載なので自分としてはパス。
で、最近になって、春モデルに位置づけられていたIS05の情報も小出しされてきた。
CPUやバッテリのスペックアップが発表されたり、動画見てもぬるぬる動いてるし、なかなか良さそうじゃないでしょうか?
IS05は一見するとIS03の廉価版に見えるが、Android 2.2や新しいCPUを採用するほか、UIにも磨きがかけられており、IS03から着実に進化していると感じた。ディスプレイやカメラはIS03からスペックダウンしているものの、「幅55ミリ」のコンパクトボディは大きな魅力。機能とサイズのバランスがうまく取れたモデルといえる。
音楽プレーヤ兼ツイッタークライアントとして使ってるiPod touch 4Gも、薄さは文句無いんだけど、60ミリ近くある横幅が「やっぱり片手持ちで操作するには、でかいなー」と感じてしまうので、スリムなIS05にはとても期待しておるのです。2年前にバッテリ交換したW51Sが、充電してもすぐ減って来て困ってるよ!
モバイルSuicaやQUICPayが対応した頃にIS05が投げ売りされてないかなー。
最近のツッコミ
参号館 日記(ariyasacca)