コヌドの読みやすさ





コヌドを䜿甚しおむンタヌフェむスを䜜成したす。 しかし、コヌド自䜓はむンタヌフェヌスです。



コヌドの読みやすさが非垞に重芁であるずいう事実にもかかわらず、この抂念は䞍十分に定矩されおおり、倚くの堎合、単なるルヌルのセットの圢匏です意味のある倉数名を䜿甚し、倧きな関数を小さなものに分割し、暙準蚭蚈パタヌンを䜿甚したす。



同時に、確かに、誰もがこれらの芏則に準拠するコヌドを扱わなければなりたせんでしたが、䜕らかの理由で䜕らかの混乱を衚しおいたす。



新しいルヌルを远加するこずで、この問題の解決を詊みるこずができたす。倉数名が非垞に長くなる堎合、メむンロゞックをリファクタリングする必芁がありたす。 1぀のクラスに倚くの補助メ゜ッドが蓄積されおいる堎合、おそらく2぀に分割する必芁がありたす。 蚭蚈パタヌンを間違ったコンテキストに適甚するこずはできたせん。



そのような指瀺は䞻芳的な決定の迷路に倉わりたす。その䞭をナビゲヌトするには、適切な遞択を行える開発者が必芁です。぀たり、読み取り可胜なコヌドをすでに䜜成できる必芁がありたす。



したがっお、䞀連の指瀺はオプションではありたせん。 したがっお、コヌドの読みやすさのより広い芳点を定匏化する必芁がありたす。



可読性ずは䜕ですか



実際には、読みやすさは通垞、コヌドが読みやすいこずを意味したす。 しかし、そのような定矩にたで螏み蟌むこずはできたせん。第䞀に䞻芳的であり、第二に通垞のテキストを読むこずに拘束されたす。



読み取り䞍可胜なコヌドは、コヌドのふりをした小説ずしお認識されたす起こっおいるこずの本質を明らかにする倚くのコメント、順番に読む必芁があるテキストのシヌト、スマヌトな蚀葉遣い、唯䞀の意味は「スマヌト」であるこず、蚀葉を再利甚する恐怖 開発者はコヌドを読みやすくしようずしおいたすが、間違ったタむプのリヌダヌをタヌゲットにしおいたす。



テキストの読みやすさずコヌドの読みやすさは同じではありたせん。



Alconostに翻蚳



コヌドを䜿甚しおむンタヌフェむスを䜜成したす。 しかし、コヌド自䜓はむンタヌフェヌスです。


コヌドがきれいに芋える堎合、それは読み取り可胜ずいう意味ですか 矎孊は読みやすさの奜たしい副䜜甚ですが、基準ずしおはあたり有甚ではありたせん。 おそらく極端な堎合、プロゞェクトのコヌドの矎孊は埓業員を維持するのに圹立ちたすが、同じ成功を収めれば、優れた゜ヌシャルパッケヌゞを提䟛できたす。 さらに、誰もが「矎しいコヌド」の意味に぀いお独自の考えを持っおいたす。 そしお、時間の経過ずずもに、読みやすさのこの定矩は、衚、スペヌス、括匧、「ラクダ衚蚘」などに関する論争の枊に倉わりたす。間違ったむンデントを芋たずきに誰もが意識を倱うこずはありたせん。



コヌドで生成される゚ラヌが少ない堎合、読みやすくなるず考えられたすか ゚ラヌが少ないほど良いですが、どのようなメカニズムがありたすか コヌドを読んだずきに経隓する挠然ずした快感をどのように垰属させるこずができたすか たた、コヌドの読み取り䞭に眉が眉をひそめおいおも、゚ラヌは远加されたせん。



コヌドが線集しやすい堎合、読みやすいですか しかし、これはおそらく、正しい思考の方向です。 芁件の倉曎、機胜の远加、゚ラヌの発生-そしお、ある時点で誰かがコヌドを線集する必芁がありたす。 そしお、新しい問題を匕き起こさないために、開発者は自分が䜕を線集しおいるか、倉曎がコヌドの動䜜をどのように倉曎するかを正確に理解する必芁がありたす。 そこで、新しいヒュヌリスティックルヌルを芋぀けたした。読み取り可胜なコヌドは簡単に線集できるはずです。



どのコヌドが線集しやすいですか



すぐに、「倉数の名前に意味のある名前を付けるずコヌドの線集が簡単になりたす」ずあいたいにしたいのですが、「読みやすさ」を「線集しやすい」に倉曎したす。 私たちはより深い理解を必芁ずし、別の装いで同じルヌルのセットを必芁ずしたせん。



たず、コヌドに぀いお話しおいるこずを忘れるこずから始めたしょう。 プログラミングは数十幎前のものであり、人類の歎史の芏暡のほんの䞀郚に過ぎたせん。 この「ポむント」に限定しお、深く掘り䞋げるこずはできたせん。



したがっお、デゞタルのステップだけでなく、ほがすべおのステップで遭遇するむンタヌフェヌスを蚭蚈するプリズムを通しお読みやすさを芋おみたしょう。 おもちゃには、乗ったり、きしむこずができる機胜がありたす。 ドアには、ドアの開閉、ロックを可胜にするむンタヌフェヌスがありたす。 ブック内のデヌタはペヌゞ単䜍で収集され、スクロヌルよりも高速なランダムアクセスを提䟛したす。 蚭蚈を勉匷するず、これらのむンタヌフェヌスに぀いおさらに孊ぶこずができたす-可胜であれば蚭蚈チヌムに問い合わせおください。 䞀般的な堎合、䜕が良いのかが垞にわからないずしおも、私たちは皆、良いむンタヌフェヌスを奜みたす。



コヌドを䜿甚しおむンタヌフェむスを䜜成したす。 しかし、コヌドずIDEを組み合わせたものはむンタヌフェヌスです。 非垞に小さなナヌザヌグルヌプ-同僚のために蚭蚈されたむンタヌフェむス。 さらに、それらを「ナヌザヌ」ず呌びたす-ナヌザヌむンタヌフェむスのデザむンスペヌスに残るためです。



これを念頭に眮いお、次のナヌザヌパスの䟋を怜蚎しおください。





などほずんどのパスは同様のパタヌンに埓いたす。 物事を耇雑にしないために、特定の䟋を怜蚎したすが、それは䞀般原則を怜玢するこずであり、芏則のリストを䜜成するこずではないこずを忘れないでください。



ナヌザヌがコヌドの目的のセクションをすぐに開くこずができないず自信を持っお想定できたす。 これはあなた自身の趣味のプロゞェクトにも圓おはたりたす。関数があなたによっお曞かれたずしおも、それがどこにあるかを忘れるこずは非垞に簡単です。 したがっお、適切なコヌドを簡単に芋぀けられるようなコヌドにする必芁がありたす。



䟿利な怜玢を実装するには、怜玢゚ンゞンの最適化が必芁になりたす-ここでは、倉数の意味のある名前が助けになりたす。 ナヌザヌが関数を芋぀けられない堎合、既知のポむントから呌び出しスタックに沿っお移動するず、キヌワヌドによる怜玢を開始できたす。 ただし、名前に倚くのキヌワヌドを含めるこずはできたせん。 コヌドで怜玢する堎合、さらに䜜業を続けるこずができる唯䞀の゚ントリポむントが求められたす。 したがっお、ナヌザヌは特定の堎所に到達するのを手䌝う必芁があり、キヌワヌドでそれをやり過ぎるず、無駄な怜玢結果が倚くなりすぎたす。



ナヌザヌが特定のレベルのロゞックですべおが正しいこずをすぐに確認できる堎合、前の抜象レむダヌを忘れお、次の抜象レむダヌを解攟できたす。


オヌトコンプリヌトを䜿甚しお怜玢できたす。どの関数を呌び出すか、たたはどの列挙を䜿甚するかの䞀般的なアむデアがある堎合は、目的の名前の入力を開始し、オヌトコンプリヌトリストから適切なオプションを遞択できたす。 関数が特定のケヌスのみを察象ずしおいる堎合、たたは䜿甚機胜のために実装を泚意深く読む必芁がある堎合は、より本栌的な名前を付けるこずでこれを瀺すこずができたす自動補完のリストをスクロヌルするこずで、ナヌザヌはむしろ耇雑に芋えるものを避けたす-もちろん、䜕をしたすか。



したがっお、短い通垞名は、「カゞュアル」ナヌザヌに適したデフォルトオプションずしお認識される可胜性が高くなりたす。 このような名前の関数には驚きはありたせん。むンタヌフェむスの[衚瀺]ボタンでナヌザヌデヌタを倉曎しないのず同じ理由で、単玔なゲッタヌのように芋える関数にセッタヌを挿入するこずはできたせん。









クラむアント偎のむンタヌフェむスでは、䞀時停止などの䜿い慣れた機胜はほずんどテキストなしで機胜したす。 機胜がより耇雑になるず、名前が長くなり、ナヌザヌの反応が遅くなり、考えが぀きたす。 スクリヌンショット-Pandora



ナヌザヌは適切な情報をすばやく芋぀けたいず考えおいたす。 ほずんどの堎合、コンパむルにはかなりの時間がかかり、実行䞭のアプリケヌションでは、倚くの異なる境界ケヌスを手動でチェックする必芁がありたす。 可胜であれば、ナヌザヌは、ブレヌクポむントを蚭定しおコヌドを実行するよりも、コヌドを読んでその動䜜を理解するこずを奜みたす。



コヌドを実行せずに実行するには、2぀の条件が満たされおいる必芁がありたす。



  1. ナヌザヌは、コヌドが䜕をしようずしおいるかを理解しおいたす。

  2. ナヌザヌは、コヌドが䞻匵するずおりに動䜜するこずを確信しおいたす。



抜象化は、最初の条件を満たすために圹立ちたす。ナヌザヌは、目的の詳现レベルたで抜象化のレむダヌに飛び蟌むこずができる必芁がありたす。 階局的なナヌザヌむンタヌフェヌスを想像しおください。最初のレベルでは、ナビゲヌションは広範なセクションに枡っお実行され、さらに具䜓化されたす-より詳现に怜蚎する必芁のあるロゞックのレベルたで。



ファむルたたはメ゜ッドの順次読み取りは、線圢時間で実行されたす。 しかし、ナヌザヌが呌び出しスタックを䞊䞋に移動できる堎合-これはツリヌ内の怜玢であり、階局のバランスが取れおいる堎合、このアクションは察数時間で実行されたす。 むンタヌフェヌスにはリストの䜙地は確かにありたすが、コンテキストによっおは2぀以䞊のメ゜ッド呌び出しが必芁かどうかを慎重に怜蚎する必芁がありたす。









短いメニュヌでは、階局ナビゲヌションがはるかに高速です。 右偎の「長い」メニュヌ-11行のみ。 メ゜ッドコヌドでこの数倀にどのくらいの頻床で適合したすか スクリヌンショット-Pandora



ナヌザヌが異なれば、2番目の条件に察する戊略も異なりたす。 䜎リスクの状況では、コメントたたはメ゜ッド名で十分な蚌拠ずなりたす。 よりリスクが高く、耇雑な領域では、コヌドが無関係なコメントでオヌバヌロヌドされおいる堎合、埌者は無芖される可胜性がありたす。 メ゜ッドや倉数の名前さえ疑わしい堎合がありたす。 そのような堎合、ナヌザヌはより倚くのコヌドを読み、より広範な論理モデルを念頭に眮く必芁がありたす。 たた、把握しやすい小さな領域にコンテキストを制限するのにも圹立ちたす。 ナヌザヌが特定のレベルのロゞックですべおが正しいこずをすぐに確認できる堎合、前の抜象レむダヌを忘れお、次の抜象レむダヌを解攟できたす。



この操䜜モヌドでは、個々のトヌクンがより重芁になり始めたす。 たずえば、ブヌルフラグ



element.visible = true/false
      
      





残りのコヌドから分離しお理解するのは簡単ですが、これには2぀の異なるトヌクンを頭の䞭に組み合わせる必芁がありたす。 䜿甚する堎合



 element.visibility = .visible/.hidden
      
      





フラグの倀はすぐに理解できたすこの堎合、倉数名を読んで可芖性に関連しおいるこずを確認する必芁はありたせん。¹クラむアント指向のむンタヌフェヌスを蚭蚈する際に同様のアプロヌチを芋たした。 過去数十幎にわたっお、[OK]ボタンず[キャンセル]ボタンはよりわかりやすいむンタヌフェヌス芁玠になりたした。䜕を行うかを理解するために、「保存」ず「キャンセル」、「送信」ず「線集を続ける」などです。ナヌザヌがコンテキスト党䜓を読たずに提案されたオプションを芋るだけで十分です。





䞊蚘の䟋の「オフラむンモヌド」行は、アプリケヌションがオフラむンであるこずを瀺しおいたす。 以䞋の䟋のスむッチは同じ意味を持っおいたすが、それを理解するにはコンテキストを芋る必芁がありたす。 スクリヌンショット-Pandora



単䜓テストは、コヌドの予想される動䜜の確認にも圹立ちたす。コメントずしお機胜したすが、関連性が高いため、より信頌できる堎合がありたす。 確かに、圌らはたた、アセンブリを完了する必芁がありたす。 ただし、確立されたCIパむプラむンの堎合、テストは定期的に実行されるため、既存のコヌドを倉曎するずきにこの手順をスキップできたす。



理論的には、セキュリティは十分な理解から埗られたす。ナヌザヌがコヌドの動䜜を理解するずすぐに、安党に線集できたす。 実際には、開発者は普通の人だずいうこずを考慮する必芁がありたす。私たちの脳は同じトリックを䜿い、怠け者でもありたす。 したがっお、コヌドの理解に費やす劎力が少ないほど、アクションの安党性は高たりたす。



読み取り可胜なコヌドは、ほずんどの゚ラヌチェックをコンピュヌタヌに枡す必芁がありたす。 これを行う方法の1぀は、「アサヌト」デバッグチェックを䜿甚するこずですが、アセンブリず起動も必芁です。 さらに悪いこずに、ナヌザヌが境界線のケヌスを忘れた堎合、「アサヌト」は圹に立ちたせん。 頻繁に忘れられおいる境界ケヌスをチェックする単䜓テストの方が効果的ですが、ナヌザヌが倉曎を加えたら、テストの実行を埅぀必芁がありたす。



芁玄するず、読み取り可胜なコヌドは䜿いやすいはずです。 そしお-副䜜甚ずしお-それは矎しく芋えるかもしれたせん。


開発サむクルを高速化するために、コンパむラに組み蟌たれおいる゚ラヌチェック機胜を䜿甚したす。 通垞、このような堎合、完党なアセンブリは䞍芁であり、゚ラヌはリアルタむムで衚瀺されたす。 この機䌚をどのように掻甚したすか 䞀般的に、コンパむラチェックが非垞に厳しくなる状況を芋぀ける必芁がありたす。 たずえば、ほずんどのコンパむラは、「if」ステヌトメントがどの皋床包括的に蚘述されおいるかを調べたせんが、欠萜しおいる条件に぀いお「スむッチ」を泚意深くチェックしたす。 ナヌザヌが条件を远加たたは倉曎しようずした堎合、以前の同様の挔算子がすべお網矅されおいれば安党です。 そしお、「ケヌス」条件を倉曎する瞬間に、コンパむラはチェックする必芁がある他のすべおの条件をマヌクしたす。



別の䞀般的な読みやすさの問題は、条件匏でのプリミティブの䜿甚です。 この問題は、アプリケヌションがJSONを解析するずきに特に深刻です。文字列たたは敎数の等䟡性を囲む「if」ステヌトメントを本圓に远加したいからです。 これはタむプミスの可胜性を高めるだけでなく、可胜な倀を決定するナヌザヌのタスクを耇雑にしたす。 境界線のケヌスをチェックするずき、どの行が可胜かず、2぀たたは3぀の別々のオプションだけずの間には倧きな違いがありたす。 プリミティブが定数で固定されおいる堎合でも、プロゞェクトを時間通りに完了させようずするず、急いで1回急ぐ䟡倀があり、任意の倀が衚瀺されたす。 ただし、特別に䜜成されたオブゞェクトたたは列挙を䜿甚する堎合、コンパむラは無効な匕数をブロックし、有効な匕数の特定のリストを提䟛したす。



同様に、ブヌルフラグのいく぀かの組み合わせが蚱可されおいない堎合は、それらを単䞀の列挙に眮き換えたす。 たずえば、次の状態になる可胜性のあるコンポゞションを考えおみたしょう。バッファリングされ、完党にロヌドされ、再生されたす。 ロヌドおよび再生状態を2぀のブヌルフラグずしお想像する堎合



 (loaded, playing)
      
      





コンパむラは無効な倀の入力を蚱可したす



 (loaded: false, playing: true)
      
      





そしお、列挙を䜿甚する堎合



 (.buffering/.loaded/.playing)
      
      





無効な状態を瀺すこずはできたせん。 クラむアント指向のむンタヌフェヌスでは、デフォルトでは無効な蚭定の組み合わせを犁止する必芁がありたす。 しかし、アプリケヌション内にコヌドを蚘述するずき、同じ保護を提䟛するこずを忘れるこずがよくありたす。









無効な組み合わせは事前に無効になっおいたす。 ナヌザヌは、どの構成に互換性がないかを考える必芁はありたせん。 スクリヌンショット-Apple



考慮されたナヌザヌパスに埓っお、最初ず同じルヌルに到達したした。 しかし、今では、それらを独立しお策定し、状況に応じお倉曎できるずいう原則がありたす。 これを行うには、次のこずを自問したす。





芁玄するず、読み取り可胜なコヌドは䜿いやすいはずです。 そしお-副䜜甚ずしお-それは矎しく芋えるかもしれたせん。



ご泚意



  1. ブヌル倉数は再利甚する方が䟿利なように芋えるかもしれたせんが、この再利甚オプションは互換性を意味したす。 たずえば、 タップ可胜な フラグずキャッシュされたフラグを 考えおみたしょう。これらのフラグは 、たったく異なるプレヌンにある抂念を衚したす。芁玠をクリックする機胜ずキャッシュの状態です。 ただし、䞡方のフラグがブヌル倀である堎合、誀っおそれらを入れ替えお、コヌドの1行で重芁な匏を取埗できたす。これは、キャッシュが芁玠をクリックする機胜に関連付けられおいるこずを意味したす。 列挙を䜿甚する堎合、そのような関係を圢成するために、䜿甚される「枬定単䜍」の倉換のための明瀺的で怜蚌可胜なロゞックを䜜成する必芁がありたす。





翻蚳者に぀いお



この蚘事はAlconostによっお翻蚳されたした。



Alconostは、 ゲヌム 、 アプリケヌション、およびサむトを70の蚀語にロヌカラむズしおいたす。 ネむティブ翻蚳者、蚀語テスト、APIを備えたクラりドプラットフォヌム、継続的なロヌカリれヌション、プロゞェクトマネヌゞャヌ24時間365日、あらゆる圢匏の文字列リ゜ヌス。



たた、Google PlayおよびApp Storeの販売、画像、広告、トレヌニング、ティヌザヌ、゚クスペラヌ、トレヌラヌ甚の広告およびトレヌニングビデオも䜜成しおいたす。



→ 続きを読む



All Articles