
良いコードを書く力をつけるためにCodewarsをやろう
突然ですが、エンジニアのみなさん、コードを書いていますでしょうか?
もし、良いコードを書きたかったら「Codewars」がおすすめです。
今回は、実際にCodewarsをやってみて感じた以下のことを紹介しようと思います。
・やってみてよかったこと
・気をつけていること
・継続的にやるためにしていること
Codewarsとは
一言でいうとプログラミング学習サイトです。
問題が出てくるので回答して正解していくことで自分のレベルを上げていきます。また、他の人がどうやって回答したかもチェックできます。
たとえばこんな問題が出てきます。
Implement a function which convert the given boolean value into its string representation.
この関数の名前と引数と戻り値の型だけ与えられているので、問題に正解できるように回答します。
回答はこんな感じになります。
func booleanToString(_ b: Bool) -> String {
return b ? "true" : "false"
}
テストコードが書いてあるのでテストを実行して正解かを確認します。
正解したら回答を提出して完了です。
Codewarsをやってよかったこと
まだ始めて3ヶ月ですが、始めてみてよかったなと思っています。
次の効果が得られたかなと思います。
・map、filter、reduceを使う癖が付いた
・業務以外の場所でプログラミングする習慣ができた
・言語の中ですでに用意されている関数について詳しくなった
同じような効果が得たい方は特におすすめです。
気をつけていること
Codewarsでプログラミングをする上で自分が特に気をつけていることを3つ紹介します。
1. 変数名に気をつける
なるべく汎用的な名前ではなく、その変数にあった名前にするほうがよいです。たとえば、郵便番号に変数名をつけたい場合はnumberではなく、zipcodeにするなどです。
変数名のテクニックはリーダブルコードに載っているので、ぜひ読んでみてください。
2. map、filter、reduceを使う
forループではなく、mapやfiter、reduceを意識的に使うようにしています。
これはそちらを使ったほうが簡潔に書くことができるためです。たとえば、ある配列を2倍するような関数をつくる場合、forだとこう書きます。
func doubled(a : Array<Int>) -> Array<Int> {
var result = [Int]()
for item in a {
result.append(item * 2)
}
return result
}
そしてmapを使うとこのように書けます。
func doubled(a : Array<Int>) -> Array<Int> {
return a.map { $0 * 2 }
}
このような感じでforループより少ない行数で簡単に書くことができます。
この例では簡単なため効果は薄いですが、より複雑な処理になる場合はさらに効果が望めます。
3. すでにある関数は使う
簡単な処理であれば関数が用意されていることが多いです。
たとえばSwiftでは文字列を置換したいときはreplacingOccurrences(of: "before", with: "after")を使い、文字列にある文字列が含まれているかを確認するときはcontains("certain")を使います。
このようにすでに関数が用意されている場合は、車輪の再発明にならないようにこちらを使ったほうがよいです。一見、複雑そうな問題でも、こういった関数の組み合わせで解けることがあります。
継続させるためにやっていること
こういったことは初日に頑張りすぎてしまったり、三日坊主になってしまいがちです。しかし、継続してやっていくことが大事なのです。
継続させるためにやっていること、それはこれです。
日報に今日のCodewarsと題して問題と答えを書く
これだけです。
自分は去年の年末に始めて3ヶ月が経とうとしています。この間、継続できたのはこれのおかげといっても過言ではありません。人の目があると不思議と続けられるんです。
日報の文化が会社にない方はnoteやブログに上げるのでも良いかもしれません。
ぜひ試してみてください。
最後に告知させてください
Onsen*というアプリを作っています。
最近弊社はOnsen*(オンセン)という睡眠や身体のお悩みを解決する
入浴アプリ(iOS)をリリースしました。
Onsen*は、入浴や睡眠の質の向上を後押しし、
「自分と向き合う時間」を応援します。
さらに温泉発のオリジナル入浴剤とアプリを組み合わせる事で、
全く新しい入浴体験をお届けします。
▼ App Store Onsen*
https://apps.apple.com/jp/app/id1468066358
▼ Onsen*入浴剤通販
https://on-sen.jp/collections/dailymineral
▼ Onsen* Twitter
https://twitter.com/onsen_cure
▼ Onsen* note
https://note.com/onsen_cure