Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@akrisn

コードヘルス - レビューコードを理解する

More than 1 year has passed since last update.

このポストはCode Health: Understanding Code in Reviewを翻訳したものです。

あなたにコードレビューを送ってきた開発者があなたよりも賢く、そのため彼のコードが理解できないということは十分にありえるでしょう。

しかし実際には、もしコードが理解し難いのであれば、おそらく複雑すぎます。もし、あなたが使われているプログラミング言語に詳しいのであれば、健全なコードを読むことはあなたの母語で本を読むとの同じぐらい簡単であるはずです

開発者がPythonのこんなブロックをレビューに送ってきたとしましょう:

def IsOkay(n):
  f = False
  for i in range(2, n):
    if n % i == 0:
      f = True
  return not f

このとき、理解するために何秒もかけないこと。コードレビューのコメントには単にこう書きましょう「私にはこのコードが理解できません」あるいは、より具体的に「関数名や変数名をもっと分かりやすいものにしてください」と。

すると開発者がコードを書き直して、もう一度レビューにと送って来ました:

def IsPrime(n):
  for divisor in range(2, n / 2):
    if n % divisor == 0:
      return False

  return True

こんどは私達にもとても簡単に読むことができます。これがそうすることの利点です。

しばしば、開発者にコードを分かりやすくしてほしいとお願いするだけで、根本的な改善がなされます。この例では、開発者はコードの見通しが良くなったことでパフォーマンスの改善に気づきました --- 関数は数が素数でないときより早く終了し、繰り返しは n ではなく、 n/2 だけ実行されます。

しかしながら、このコードが簡単に理解できるようになったので、多くの問題が見えてきます。例えば、0や1のときの挙動がおかしいです。他にもまだ問題はあります。なにより大事なことに、今では、この関数全体を取り除いて数が素数であるかを検出する既存の関数に置き換えた方がいいということが明らかです1。コードを分かりやすくすることは開発者もレビューアも助けます。

まとめると、よく分からないコードのレビューに時間を無駄にするのはやめましょう。単に分かりやすくするようにお願いすればいいのです。実際、そういったレビューコメントはコードレビューアの持つ最も便利で重要なツールです。


  1. sympy.ntheory.primetest.isprime でしょうか。 

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?