ブレースを接続する
Java でブレース配置スタイルの効果を視覚化するのに役立つゲーム
目的は客観的であること
数年前、私が取り組んでいた新しいチームとコーディング スタイルを確立し、合意するのに役立つ創造的なアプローチを思いつきました。私たちは、Java プログラミング言語を使用した新しいプロジェクトのコーディングの初期段階にありました。前もって、チームとして一貫したコード スタイルのガイドラインを決定し、同意するように依頼しました。Java で論争の的になっているコード スタイルの議論の 1 つである、中括弧をどこに配置するかという議論に対処するには、客観的かつ創造的な議論を考え出す必要があることはわかっていました。
対立よりも創造性を選択する
「でもみんなこうしている」という流れに逆らうのは難しい。評判の高い検索会社が特定の Java コーディング スタイルに承認の印を押した場合は、さらに困難です。
特定の装具の配置スタイルについて客観的な議論を提示するために、「Connect the Braces」というゲームを作成しました。作成した 2 つのサンプル クラスからコードを取り出し、それらを PowerPoint デッキに貼り付け、文字どおりコードの上に線を引いて、開始中括弧と終了中括弧を接続しました。このゲームは、私のお気に入りの子供時代のゲームの 1 つである「Connect the Dots」から着想を得ました。
「Connect the Dots」の素晴らしいところは、ルールがシンプルで、ほとんどの人が学校でゲームをプレイしたことがあるということです。「Connect the Braces」も非常にシンプルです。各コード スコープの開始中括弧と終了中括弧を線で結ぶだけです。簡単。
チームにゲームをプレゼンしたのですが、終わった後、誰も「でも他の人はこのようにやっている」という反応はありませんでした。これにより、少なくとも 1 つのチームが装具の配置スタイルに関する創造的な議論にうまく反応したことが確認されました。
ゲームの自動化
私は友人のVladimir Zakharov (Vlad) にこのゲームについて話し、それが私が以前経験した激烈な討論をいかに効果的に鎮圧したかを話しました。私は Vlad に、私が説明したゲームを視覚化するための Java コードを書いてもらえないかと尋ねました。Vlad は私よりもビジュアル プログラミングが得意なので、彼が私よりも早くコードを完成させることはわかっていました。
Vlad は、ソース ファイル内のブレースを接続するだけでなく、さらに良いことを行いました。彼はまた、コードのブロックを緑色のハイライトで色付けしました。これには、空白を視覚的に強調するという追加の利点があります。
次のセクションの画像は、Eclipse Collections Kataの実際のコードで Vlad の自動化されたバージョンの「Connect the Braces」を使用して生成されました。
警告!ゲームスタート!
以下の画像はグラフィックです。一部の開発者は、それらを不快に感じるかもしれません。実際のソース コードは、次のビジュアルの作成に使用されました。このテキストを超えてスクロールした後に見えなくなる画像は、作者ではなく、スクロールする人の責任です。2 回の「Connect the Braces」ラウンドで被害を受けた果物やペットは、作成者ではなく、コード スタイルの選択の結果です。賢明に選択してください。あなたは警告されました!
ラウンド 1: Fruit Enum
ラウンド 2: PetType Enum
乱雑さよりも明快さを選択する
たぶんステーキでできた水着を着て、お腹を空かせたピラニアでいっぱいの荒れ狂う川に足を踏み入れただけだと思います。私は、特定のブレース配置スタイルが「唯一の真のスタイル」であると皆に納得させようとしているわけではありません. 私がコードを書くときに好むスタイルが確実にあり、私が取り組んでいるすべてのプロジェクトでそれを主張しなければなりません。このゲームを使用して自分の主張を提示すると、美学、余白、およびコードのスキャンと読みやすさのための視覚的な追跡の重要性について健全な議論ができることがわかりました。
私は混乱よりも明快さを選びます。シグナル オーバー ノイズ。私は右側のスタイルを選択します。
私の友人ヴラドの言葉を引用すると:
コードを読むとき、私は通常、「何」、例えば、このクラスの責任は何か、このメソッドのコントラクトは何か、このブランチをトリガーする条件は何か、または「どのように」、例えば、このメソッドはどのように機能するのか、このブランチに従うとどうなるかなど。Whats と Hows を視覚的に分離することで、コードをスキャンし、その時点で重要なことに注意を向けることができます。
垂直ブレースのフォーマット スタイルには、署名 (クラスとメソッドの定義) と実装 (変数とコード) の間に空白を挿入することで、「何を」と「どのように」を明確に分離する自然な効果があります。開始中括弧と終了中括弧は常に同じ水平方向の位置にあり、可変性はネストされたスコープの深さに一貫して基づいています (たとえば、if、for、while などの制御ステートメント)。ブレースを含むピラミッド形状のベースが表示されることを期待しているので、ブレースがどこにあるかを知っているので、それらがどこにあるかを安全に無視できます。このスタイルは、IDE に自動書式設定を簡単に実装し、CheckStyle ビルドで適用できます。
私は 20 年以上にわたり、Java でこのブレースの書式設定スタイルを使用して、流れに逆らって泳いでいます。私のせいで、垂直ブレース配置スタイルを使用してフォーマットされたコード ベースを読んだり、コード ベースで作業したりする必要がある開発者に、言いたいことがあります。
どういたしまして!
規則の例外
Java コードを含む本の Powerpoint スライドまたはテキストを作成するときは、別のブレース配置スタイルを選択します。これら 2 つの印刷媒体のみで、ほとんどの場合、コードの行数が少ないスタイルを選択します。ページ間でコードを分割することは望ましくありません。これは、使用可能な垂直方向のスペースの制限のために行われるトレードオフです。この課せられた制限は、IDE で読み取っているコードや、垂直スクロールが正常に機能する GitHub や GitLab などの VCS からソースを読み取るブラウザーには存在しません。
多くのプログラマーの 7 つの効果のないコーディング習慣
「Connect the Braces」ゲームを作成してから数か月後、Kevlin Henneyの素晴らしい講演に出くわしました。Kevlin Henneyは、コーディング スタイルについての講演で他の多くの素晴らしい点の中でも特に、特定の矯正器具の配置スタイルについて素晴らしい議論をしています。
したがって、あなたが疑問に思っている場合に備えて、はい、ブラケットを整列させる正しい方法を決定する方法があります…客観的に.
スポイラーはありません。このトークを見ることを強くお勧めします。警告、この講演は現在のコーディング スタイルを建設的に混乱させる可能性があります。
Java コード スタイルに関する行動喚起
私たちは、バージョン管理システムに何十億行もの Java ソース コードを残し、将来の私たち自身と将来の世代の開発者が保守するようにしています。コード スタイルは、明確さと読みやすさに直接的かつ微妙な影響を与えます。誰もが同じ速度でコードを読むわけではありません。チームとして話し合い、検討すべきアクセシビリティの課題があるかもしれません。コード スタイルに関係なく、最終的には誰もがコードを読み取って解析できるようにする必要があります。What と How を分離し、探しているコードを見つけるサイクルを減らすことができれば、それは良いことです。
チームで受け入れられるコーディング スタイルを構築するための私のルールを次に示します。
- コード スタイルのガイドラインについて、チームと話し合ってください。
- お気に入りの IDE でエンコードおよびカスタマイズされた自動フォーマット ルールを使用して、一貫したコード スタイル ガイドラインをプロジェクトに適用します。
- 一貫性のないコード スタイルのコミット (CheckStyle など) で中断する自動連続ビルドを実行します。
- プロジェクト VCS でコード スタイル ガイドラインを公開します。
- 何か新しいことを発見したり学んだりしたら、勇気を持って時間をかけてコード スタイルのガイドラインを進化させてください。
Connect the Braces ゲームを自由に使用して、コード スタイルに関する合理的かつ客観的な議論を促進してください。特に Java でのブレース配置スタイルに関する議論に適用されます。このスタイルが好きで、過去 7 年間にIntelliJ IDEA for Eclipse Collectionsで使用したコード スタイル設定を確認したい場合は、GitHub にチェックインしてください。
楽しみ!
私は、 Eclipse Foundationで管理されているEclipse Collections OSS プロジェクトの作成者であり、コミッターでもあります。Eclipse Collections は寄稿を受け付けています。

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































