Я начинаю новый проект с нуля и хочу, чтобы он был чистым / имел хорошие стандарты кодирования. В каком порядке опытные разработчики здесь любят раскладывать вещи внутри класса?
A: 1) общедоступные методы 2) частные методы 3) общедоступные вары 4) частные вары
B: 1) публичные vars 2) частные vars 3) публичные методы 4) частные методы
C: 1) общедоступные вары 2) общедоступные методы 3) частные методы 4) частные вары
Обычно мне нравится размещать общедоступные статические переменные вверху, но тогда будет ли публичный статический метод перечисляться перед вашим конструктором или конструктор всегда должен быть указан первым? Что-то в этом роде...
Я знаю, что это сложно, но я просто подумал: каковы лучшие практики для этого?
PS: нет, я не использую Cc #. Я знаю. Я луддит.
источник
Ответы:
В « Чистом коде» Роберт С. Мартин советует кодировщикам всегда помещать переменные-члены в начало класса (сначала константы, затем частные члены), а методы должны быть упорядочены таким образом, чтобы они читались как история, которая не вызывает читателю придется слишком много прыгать по коду. Это более разумный способ организации кода, нежели модификатор доступа.
источник
Лучшая практика - быть последовательным .
Лично я предпочитаю ставить
public
сначала методы, затемprotected
методы, а затемprivate
методы. Члены данных должны вообще всегда быть частными или защищенными, если у вас есть веские основания для того , чтобы не быть так.Мое объяснение для размещения
public
методов наверху состоит в том, что они определяют интерфейс для вашего класса, поэтому любой, кто просматривает ваш файл заголовка, должен иметь возможность немедленно увидеть эту информацию.В общем,
private
иprotected
члены менее важны для большинства людей , глядя на файл заголовка, если они не рассматривают изменения внутренних элементов класса. Хранение их «в стороне» гарантирует, что эта информация будет храниться только по мере необходимости , что является одним из наиболее важных аспектов инкапсуляции.источник
Думаю, у меня другая философия по этому поводу, чем у большинства. Я предпочитаю группировать связанные элементы вместе. Я терпеть не могу прыгать, чтобы работать с классом. Код должен течь, и использование довольно искусственного упорядочения, основанного на доступности (общедоступный, частный, защищенный и т. Д.) Или экземпляр против статического или член против свойства против функции, не помогает сохранить хороший поток. Поэтому, если я создаю общедоступный метод,
Method
который реализуется с помощью частных вспомогательных методовHelperMethodA
иHelperMethodB
т. Д., То вместо того, чтобы размещать эти методы далеко друг от друга в файле, я буду держать их близко друг к другу. Точно так же, если у меня есть метод экземпляра, который реализован статическим методом, я тоже сгруппирую их вместе.Так что мои занятия часто выглядят так:
источник
Лично я предпочитаю, чтобы наверху был публичный, защищенный и закрытый. Причина этого в том, что когда кто-то открывает заголовок, он видит то, к чему он может получить доступ, а затем более подробную информацию по мере прокрутки вниз.
Не нужно смотреть на детали реализации класса, чтобы использовать его, тогда дизайн класса выполнен плохо.
источник
Раньше я очень заботился. За последние несколько лет при использовании современных IDE практически все можно получить всего в 1 или 2 нажатия клавиши, я позволил своим стандартам существенно ослабить. Теперь я начинаю со статики, переменных-членов, затем конструкторов, после чего я особо не беспокоюсь об этом.
В C # я позволяю Resharper организовать все автоматически.
источник
Это будет мой заказ
Я использую следующие правила:
Идея состоит в том, что вы определяете объект (данные) до поведения (методов). Статику нужно разделять, потому что на самом деле они не являются частью объекта или его поведения.
источник
Я в целом согласен с публичным, защищенным, частным порядком, а также со статическими данными, данными-членами, порядком функций-членов.
Хотя я иногда группирую членов группы (геттеры и сеттеры), я обычно предпочитаю перечислять членов внутри группы БУКВЕННО, чтобы их было легче найти.
Мне также нравится выстраивать данные / функции по вертикали. Я делаю табуляцию / пробел вправо достаточно, чтобы все имена были выровнены в одном столбце.
источник
Каждому свое, и, как говорит Эльзо, современные IDE упростили поиск участников и их модификаторов с помощью цветных значков в раскрывающихся меню и т. Д.
Я считаю, что программисту более важно знать, для чего был разработан класс и как от него ожидать поведения.
Итак, если это синглтон, я сначала ставлю семантику (статический класс getInstance ()).
Если это конкретная фабрика, я сначала помещаю функцию getNew () и функции регистрации / инициализации.
... и так далее. Когда я говорю «первый», я имею в виду вскоре после c'tors и d'tor - поскольку они являются способом создания экземпляра любого класса по умолчанию.
Следующие ниже функции находятся в:
в зависимости от того, предназначался ли класс в первую очередь как хранилище данных с некоторыми функциями или поставщик функций с несколькими членами данных.
источник
Некоторые редакторы, такие как Eclipse и его дочерние продукты, позволяют вам переупорядочивать в общем виде вары и методы в алфавитном порядке или как на странице.
источник
Последовательность публичных, за которыми следуют защищенные и частные, для меня более читабельна. Лучше просто описать логику класса в комментариях в верхней части файла заголовка и упорядочить вызовы функций, чтобы понять, какая доза класса и алгоритмы используются внутри.
Я использую Qt c ++ какое-то время и вижу какие-то новые ключевые слова, такие как,
signal
иslot
я предпочитаю продолжать заказывать, как указано выше, и делиться своей идеей с вами здесь.источник