いろんな言語で、思わず「かっこいい!」「使ってみたい!」と思ってしまう書き方をまとめました。
Swift
Optional と if
Swift といえば Optional
ですよね。
if文と合わせて書くと気持ちいいことこの上ない Optional
ですよね
// specialObject.value が Optional 型だったとすると
if let value = specialObject.value {
// nilじゃないときの処理
...
}
かっこいい!!
- 変数定義
- nilかどうかのif
- 代入された変数にはOptionalが取れる
という3つの挙動を同時にやってて、しかもそれをここまであっさりと書いてしまう鬼畜ぶり。思わず惚れちゃいそうになりますよね。
Enum と switch
Swift といえば Enum
のことも忘れてはいけません。
例えば Enum
を下記のように定義しているとします。
enum Result<Value> {
case success(Value)
case failure(Error)
}
例えばこのクラスを返すメソッドがあるとすると、こんな書き方ができます。
load { result in
switch result {
case .success(let data):
// 成功時の処理
case .failure(let error):
// 失敗時の処理
}
}
result
の Enum
の値を switch
文で分岐しつつ、どの値かによって返ってくるデータを変数に入れるという、なぜかわからないがすごいことをしている気分になれる書き方ですね。
これを使いこなせたら、気持ちいいでしょうね!
参考URL:https://www.swiftbysundell.com/posts/the-power-of-result-types-in-swift
Python
Python といえばリスト内包表記でしょう。
他の言語でいういわゆる map
関数のような動作を for
文でやるという奇想天外な発想。
[ i*2 for i in nums ]
for
文の両側に カッコを付けると map
みたいに動くんですね。
さすがPython! おれたちにできない事を平然とやってのけるッ!
そこにシビれる!あこがれるゥ!!
しかもこれ、 if 文がつけれちゃいます。
[ i*2 for i in nums if i % 2 == 0]
みたいな。
なにこの書き方。天才かよ。
さらに
[ i*2 if i % 2 == 1 else i*3 for i in nums ]
else
までつけれちゃいました。
鬼か。1行で書かないと死ぬ病気か。
Python には、 map
や reduce
なんて使わず何がなんでも for
文でやってしまいたいという「スゴ味」があるッ!
どうですか? 書きたくてうずうずしてきましたね。
Javascript
Javascript からは、ES6
で導入された書き方でかっこいいものを紹介します。
まずは Shorthand property names
ですね。
// すでに変数 a, b が定義されているとする
{ a, b }
// => { a: a, b: b } と同義
変数がすでに定義されていると key
を省略できるんですね。
スマートですよね。効率化したいという精神がにじみ出てます。
あと、変数への分割代入も捨てがたいです。
// obj = { a: 'are', b: 'boa', c: 'core' } とする
let { a, b } = obj;
最初見たときは、何してんだこれ、って思いましたが、慣れると気持ちいいんですよね。
書きながら フフッ とニヤけてしまうこと受け合いです。
Ruby
Rubyは構文ではなく、メソッドです。残念ながら構文としてはそれほどかっこいい構文が思いつきませんでした。
tap
Ruby で大好きなメソッドです。 tap
メソッドは、実行したオブジェクトをリターンしつつ、そのオブジェクトを yield
するというメソッドです。
理解するまでは、「ん? よくわからんからもう一度説明して」を無限ループしてしまうメソッドですね。
例えば、このように使います。
# どこかのメソッド内での文
return params.tap { |p| p.test = 'aaa' if p.a.nil? }
params を返しつつ、 params の内容を更新しているというものです。
このやったった感、たまりませんね。
then
RubyKaigi2018 ではこのネーミングをつけたMatzへのバッシングが多かった then
です。
then
は実行したオブジェクトを yield
しつつ、 ブロックの返り値を返します。
これを使うと気持ちよく chain ができます。
1.then { |x| x + 1 }.then { |y| y + 1 }
=> 3
こんな具合にどんどん連鎖できるわけですね。
メソッド chain
ってやるだけでなんかできるエンジニア感が出て俺スゲーって謎の優越感に浸れるんですよ。
正直たまらん
終わりに
どうでしたか?
いろんな言語を書きたくなりましたよね。
次の機会に他の言語のかっこいい書き方も紹介していきたいと思います。
また、俺はこんなかっこいい書き方知ってるぜ!という方々、 ぜひコメント欄で暴れていただきたい 。