Yarn: クラス命名における接頭辞と接尾辞

作成日 2018年10月29日  ·  17コメント  ·  ソース: FabricMC/yarn

「BiomeDesert」と「DesertBiome」など。または「ComponentTranslatable」と「TranslatableComponent」。

前者は、エディターで名前をソートするときに利点があり、私の個人的な好みです。 後者はJava開発でより一般的であり、他のほとんどの人に好まれています。

discussion

最も参考になるコメント

はい。 私はすでにそれが座って、それを行うための努力だけまともな金額だが、それを行う上で夢中です。

全てのコメント17件

先日@asiekierkaとのプライベートディスカッションから:

22:34 <kasheek> I have a 'block' package with:
22:34 <kasheek> 'BedBlock'
22:34 <kasheek> 'CactusBlock'
22:34 <kasheek> 'MagmaBlock'
22:34 <kasheek> and I import them all into one of my classes. I can:
22:34 <kasheek> - look at the imports, in alphabetical order, without reading "Block" before each word
22:34 <kasheek> - search for ".BedBlock" and get results for BedBlock *and* BedBlockEntity *and* BedBlockEntityRenderer
22:34 <asie> that last one
22:34 <asie> that's a good argument

最近のほとんどのJavaIDEでの検索は、BlockBed / BedBlockの順序に関係なく、結果が表示されるほどあいまいであると私は主張します。

Mojangは接尾辞(BedBlock)または名前(Bed)のいずれかを使用していると思います。

[をちょきちょきと切る!]

これらのクラスは、おそらく同じパッケージに含まれており、次のような名前が付けられています。

RenderType
RepeaterBlock
RotatedPillarBlock
Rotation
SandBlock

Mojang名にインターフェースのIプレフィックスがないことを示す別の例:

[をちょきちょきと切る!]

前者は、エディタで名前を並べ替えるときに利点があります

これは、すべてが1つの大きな「シンク」パッケージ(たとえば、 net.minecraft.src )にマップされる場合に当てはまりますが、パッケージを正しくマッピングする代わりにはなりません。 また、クラスがblocksitemsentitiesようなパッケージに入れられている場合、プレフィックスは冗長になります。

あなたの努力は称賛に値しますが、ここにMCPコンテンツを投稿しないでください。 次回のポイントを示すために、pomfのEnigmaマッピングまたはTinyマッピングを使用するか、名前を直接投稿せずにヒントを示してください。

しかし、研究は高く評価されています! 准将のおかげでMojangがIプレフィックスを使用していないことはすでに知っていましたが、他のヒントは非常に興味深いものです。 ある時点でアルファベット順を自分で検討することを計画していましたが、Minecraftの「内部名」が完全であるか、より改造された開発環境に適していると想定する必要もありません。

私は個人的に接頭辞を付けるのが好きです。つまり、すべてのアイテムがグループ化され、すべてのバイオームがグループ化されるなどです。もちろん、接尾辞は、IronIngotのように、共通点を持つすべてのものをグループ化するという反論です。 IronSword、IronBlock、IronChestplateなど。

@Boundarybreaker実は、とにかくパッケージに入っているということです。 したがって、.blockでは、物事はすでにグループ化されています。 それがBlockBedとBlockChestであるか、BedBlockとChestBlockであるかは関係ありません。

ああ、そうだ。 それは良い点です。 私はmod-dev側からもっと考えていました。 それなら、接尾辞で大丈夫です。

個人的には、すべてのコードで、クラス名にサフィックスの代わりにプレフィックスを使用しています。 そのルールにはいくつかの例外があり、発生するほとんどすべての状況で、プレフィックスを使用することになります。

IDEでオブジェクトのタイプを検索すると、より適切に機能し、正直なところ、私には見栄えがよくなります。

これの多くは意見に基づいており、githubで他のmodsソースコードを見ると、ほとんどの人が接尾辞の代わりに接頭辞を使用するクラス名に満足していることは明らかです。

すべてのmodはMCP名を使用しているため、プレフィックスを使用していると思います。MCP名は、昔、すべてのminecraftが単一のnet.minecraft.srcパッケージに難読化されていなかったため、ほとんどがプレフィックスを使用しています。 ただし、特に新しいコードでは、接尾辞を付けた例がたくさんあります。 例: ILightEngineChunkTaskSurfaceBuilderIWorldCarverIChunkGenSettings実装、構造体のConfig / Pieces / Structureクラス。 レシピと戦利品の世代のコードには、基本クラスの名前を含まない多くの派生クラスがあります。

✓派生クラスの名前を基本クラスの名前で終了することを検討してください。

これは非常に読みやすく、関係を明確に説明しています。 コードでのこの例には、例外の一種であるArgumentOutOfRangeExceptionと、属性の一種であるSerializableAttributeがあります。 ただし、このガイドラインを適用する際には、合理的な判断を下すことが重要です。 たとえば、Buttonクラスは一種のControlイベントですが、Controlはその名前には表示されません。

C#設計ガイドラインから

プレフィックスを使用すると、そのスキームにロックされ、「判断」ができなくなると思います。 しかし、 BlockItemような、広い継承階層には実際には必要ないかもしれません。

考えたばかりですが、JEIの実装を見てください。 APIには前例がないため、改造コミュニティ全体のJEIサポートクラスはMachine + Category / Wrapper / etcです。

既存のmodからの大規模な依存関係のため、MCPには接尾辞の移動がありませんでした。 これはファブリックには当てはまりません。

はい。 私はすでにそれが座って、それを行うための努力だけまともな金額だが、それを行う上で夢中です。

私はちょうど考えました:接頭辞!=逆のスペル、またそれらは異なるフレーバーで来ます

MCPの例:[snip!]

名前の不一致は悪いことであり、[snip!]のような名前はひどいことに同意するでしょう。

私はおそらくこれには遅すぎます...

pomf通信チャネルへのMCPの例の投稿を停止してください。そうしないと、GitHubリポジトリからブロックする必要があります。

このページは役に立ちましたか?
0 / 5 - 0 評価