コードリファクタリング—より良いコードの書き方

プログラミングの世界には、学ぶべきことがたくさんあります。

フロントエンドWeb開発の3年後、私はこれまでにないほどコーディングが苦手です。プログラミングの世界には学ぶべきことがたくさんあるので、謙虚で十分な開発者が自分のコードが完璧だと言うことを敢えてしないでしょう。

私はキャリアの大部分でCSSスキルを磨いてきました。そのため、正当な理由でJavaScriptスキルに自信がありません。常に成長を求めるポジティブな人である私は、この不十分さの感覚を自己嫌悪ではなく動機に変えることを選びました。

以下は、採用プロセスのために作成した同僚の上級同僚のコードテストです。彼は他のチームメイトと共有して、このコードテストを使用して候補者のプログラミングスキルを判断する効率についてフィードバックを提供できるようにしました。この機会を利用して、コードについて考えるために1日中専念することで、JavaScriptのスキルを向上させました。

質問

バージョン番号文字列が与えられたときに関数を記述します。 「1.12.4」とsemver範囲文字列、つまり「〜1.12.0」、指定されたバージョンが指定されたsemver範囲内にあるかどうかをブール値として返します。
semver範囲は、次の3つのパターンをサポートする必要があります。
 1)完全一致
 2)^同じメジャーバージョン範囲の大きいバージョン
3)〜同じマイナーバージョン範囲の大きいバージョン

最初の試み

最初の試みでは、.substring()、大文字小文字の切り替え、forループ、およびif条件を使用して、タスクを完了する最も簡単な方法を探しました。コードはいように見えますが、動作します。これらはすべてJavaScriptの基本であるため、このソリューションを完了するのは非常に簡単です。コーディングの私の習慣は、最初にそれを動作させ、満足するまでリファクタリングし、最後に完了したと考えることです。それはおそらくほとんどの人にとって最良の方法ではありませんが、私はこの方法で作業することに慣れています。 (将来的には、コーディングを開始する前に、作業方法を変更し、より多くの時間を思考に費やしたいと考えています。)

二度目の試み

私はスイッチケースの部分とif条件が非常にいので、それらを書き直そうとしました。 .forEach()のようにshouldMatchで配列をループできる関数を見つけたいと思っていましたが、結果=== trueのときにループを破ることができるので、グーグルで探して.some()を見つけました。私はこの機能を覚えていなかったことをかなり恥ずかしく思いましたが、私は自分を許しました。結局のところ、私たちが頻繁に使用しない機能があり、それらを忘れるのは自然なことです。私の態度は:あなたがそれらを有用であると思うならば、それらをもっと使ってください、そして、あなたはそれらを覚えるでしょう。

第三の試み

上級エンジニアとコードを共有し、建設的なフィードバックをくれました。彼は、rangeSymbolを取得するより良い方法を考え、宣言後にrangeNumArrを変更しないようにするように頼みました。最後になりましたが、彼は.some()に非常に似ている.every()を使用するように私に言ったが、代わりに戻り値がfalseの場合にループが中断します。私は彼のアドバイスを受けて、さらにいくつかの変更を加えました。その結果、美しいコードが作成されました。

結論

あなたが何かに不得意であることを認め、改善を求めることは非常に重要です。

必要な場合は助けを求めてください。誰もが異なる思考プロセスを持っているため、異なる視点を持つことは常に良いことです。他の人の意見に刺激されることもあります!

コーディングの練習をしているときに、単純な機能に時間を浪費していることを恐れないでください。プログラミングは創造的なプロセスであり、適切に行うとかなりの頭脳力を消費することを忘れないでください!

この記事が気に入ったら拍手してください!

時間があるときはいつでも、フロントエンドの実験とプログラミングに関する私の考えを共有します;)