Мне нравится ответ user64141, но обнаружил, что он может быть более обобщенным. Вот мое взятие:
public abstract class ExpectedThrowableAsserter implements Runnable {
private final Class<? extends Throwable> throwableClass;
private final String expectedExceptionMessage;
protected ExpectedThrowableAsserter(Class<? extends Throwable> throwableClass, String expectedExceptionMessage) {
this.throwableClass = throwableClass;
this.expectedExceptionMessage = expectedExceptionMessage;
}
public final void run() {
try {
expectException();
} catch (Throwable e) {
assertTrue(String.format("Caught unexpected %s", e.getClass().getSimpleName()), throwableClass.isInstance(e));
assertEquals(String.format("%s caught, but unexpected message", throwableClass.getSimpleName()), expectedExceptionMessage, e.getMessage());
return;
}
fail(String.format("Expected %s, but no exception was thrown.", throwableClass.getSimpleName()));
}
protected abstract void expectException();
}
Обратите внимание, что при выходе из инструкции «fail» в блоке try блокируется связанное исключение исключения; использование return в операторе catch предотвращает это.
Все заглавные буквы - это традиционное C-обозначение макропостоянной препроцессора. Очень полезно иметь их в пространстве имен, отличном от чего-либо еще, поскольку препроцессор будет заменять то, где он находит имя, независимо от таких вещей, как область действия.
Константа в том смысле, в котором Джефф использовал семантически, переменную, которая не может быть изменено Он подчиняется всем принципам области видимости и всему и семантически идентичен неконстантной переменной с тем же значением.
Другими словами,
#define max_length 5
является проблемой, потому что кто-то может использовать max_length
как переменная в другом контексте, где это обычно было бы безопасно, в то время как
const int max_length = 5;
- просто объявление переменной. Следовательно, есть преимущество в использовании
#define MAX_LENGTH 5
, потому что соглашение состоит в том, что только константы препроцессора являются заглавными буквами,
Я использую ALL_CAPS для макросов и символов препроцессора. Так что мои константы до C99 C были ALL_CAPS, но не на каком-либо другом языке, который я знаю.
Я переназначил свой колпачок на клавишу Ctrl (Woo Emacs!). Поэтому я думаю, что это плохой стиль, когда мне нужно вводить 30-символьные имена, удерживая нажатой клавишу shift
Некоторые люди считают ВСЕ КОПИИ «старой школой». Обратите внимание на разницу между:
const string ErrorMessage = "Некоторое сообщение об ошибке.";
и
const string ERROR_MESSAGE = "Некоторое сообщение об ошибке.";
Оба полностью пригодны для использования, но версия ALL CAPS меньше используется новыми разработчиками, такими как те, которые начинали с .NET.
Я считаю, что это плохой стиль кодирования, если ваша команда использует другой стиль. Кроме этого, мне все равно. По крайней мере, когда я вижу ВСЕ CAPS в некотором общем коде, я могу догадаться, что это константа.
Точно так же, как писать все жирным шрифтом, не очень хорошая идея
Я не думаю, что это неправильно . В основном это личный выбор. Для личного кодирования делай что хочешь. Для профессионального кодирования следуйте политике компании.
Ну, есть старая проблема с читабельностью. Обычный тест легче читать.
Однако есть исключения. Такие языки, как SQL, обычно пишутся в верхнем регистре (хотя регистронезависимо).
Кроме того, есть и другие способы, такие как различие между «константами» и обычными переменными, которые вы увидите во многих языках, таких как PHP Python и т. Д., Хотя Джеффу по какой-то причине это не нравится, и это явно противоречит рекомендациям по стилю кода C #.
В общем, я не думаю, что это где-то неправильно, но я думаю, что следует всегда старайтесь следовать общим рекомендациям. Находясь в Риме, делайте как римляне - при кодировании Python следуйте PEP 8 :)
Единственная убедительная причина для меня - последовательность в стиле. Для не-NET языков, таких как Java / C ++, константы всех заглавных букв, безусловно, приемлемы.
Для C # стандартом является использование PascalCase, как отмечено здесь: Соглашение об именовании C # для констант?
Я не думаю, что это плохой стиль кодирования. Может быть, старомодно, но не плохо. Это делает константы отличными от других переменных.
Честно говоря, я не думаю, что это плохой стиль кодирования. Действительно, даже официальный стиль кода Java делает константы всеми прописными ( http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html ), как и другие языковые соглашения.
Теоретически, читать сложнее - нам, людям, нравится использовать переменную высоту букв для увеличения скорости чтения (мы можем вывести много информации, исходя только из грубой формы слова и первых / последних букв). Однако у меня нет проблем с короткими, все заглавными фразами. Вряд ли он «кричит» (вашему компилятору совершенно не важно, насколько вы грубы), и ясно показывает, что имена могут быть изменяемыми, а имена - нет.
Кричать хорошо. В случае константы она говорит читателю
, НЕ ДУМАЙТЕ О ИЗМЕНЕНИИ МЕНЯ ПОЗЖЕ КОД
Но я понимаю, обижаются ли программисты на софт.
Вы обнаружите, что многие высказывания Джеффа в первую очередь противоречивы, а точность - вторичная проблема. Его блог не был бы таким популярным, если бы он не был изредка подстрекательским. (Рассмотрим последнюю строку Смерть Космическим Неверным : «Тем не менее, только придурок будет использовать вкладки для форматирования своего кода».) Это честно субъективно. Не принимайте все, что он говорит, за Истину и Добро - так не должно быть. Если вы не согласны, идите надрать ему задницу в комментариях и посмотрите, ответит ли он. : )
Я думаю, что ALL_CAPS_CONSTANTS
идеальны: они мгновенно узнаваемы и знакомы. Часть руководств по стилю моего рабочего места (а их у нас не так много) - писать все статические константы в заглавных буквах. Не парься; просто используйте то, что использует остальная часть вашей команды. Выбор StudlyCaps
против camelCase
против SCREAMING_CAPS
стоит обсуждения, возможно, 90 секунд.
У Джеффа есть кое-что, что можно сказать по этому поводу в комментариях:
Однако, с другой стороны, и поэтому я все еще использую все заглавные буквы и подчеркивание
Меньше кода? Это достойное дело заслуживает серьезного обсуждения.
Но называете ли вы что-то "фу", "Foo", "_foo" или "FOO"? Мех.
Соглашения об именах очень противоречивый и религиозный. Разработчики должны выбрать то, что они как то, что, надеюсь, нет слишком сильно расходится с "местным конвенции ", и просто пойти с этим. много обсуждения и выкручивания рук переименование не стоит.
Тем не менее, я думаю, что все колпачки действительно Трудно прочитать!
Я также использую это для констант, но я также могу понять, почему некоторым людям это не нравится. Это все равно, что писать все строчными буквами на немецком или других языках.