Почему эта «хорошая практика кодирования»? Например, когда я делал консольную игру Rock Paper Scissors, большинство людей предлагали использовать перечисления вместо строк. В чем разница?Почему я должен использовать перечисления вместо строк?
ответ
Проверить это подробное описание
перечисляемого типа (также называется перечисление или перечисление) обеспечивает эффективный способ определить набор именованных целочисленных констант, которые могут быть отнесены к переменной.
Это отличная разбивка перечислений –
Это лишь один из способов, которые вы делаете работу компилятора для вас. Если вы используете строки, компилятор не может помочь вам обнаружить опечатку в значении:
if (move == "rokc") { // just never matches
но если использовать перечисление компилятор только позволяет использовать действительные значения:
if (move == Moves.Rokc) { // compilation error
Я вижу, что интересно, есть ли другие причины? –
@funTertain: Это самый большой, но есть также преимущество в производительности. Значение enum - это просто число в конце, и быстрее работать с числами, чем строки. – Guffa
Производительность, предотвращение орфографических ошибок, лучше автозаполнение от разработки IDE. Если вы пишете API для других разработчиков: лучшая (неявная) документация для допустимых значений для переменной, Примечание: вы также можете делать такие вещи, как Move.Rock.ToString() – Mike
Частично, это является матерью краткости общения. Строки - общие вещи, перечислены конкретные. Отчасти это предотвращает ошибки. Используя строки, вы можете иметь правописание и различия в случае, которые могут вызвать ошибки. Если вы ошибаетесь/ошибочно перечислите, вы получите ошибку компиляции. Если вы просто представляете три простых состояния рока, бумаги, ножниц, это может показаться не слишком важным, но поскольку код, который вы пишете, становится больше, вы обнаружите, что хотите воспользоваться любой возможностью, чтобы уменьшить изменение ошибки и ясности выражения. Любой, кто программирует достаточно долго, будет испытывать трудности с попыткой понять код, который они пишут в прошлом.
Первые перечисления - это просто метки против чисел. Это означает, что в то время как ваш код представляет документы, ножницы и скалы - программа видит 1, 2 и 3. У компьютеров нет проблем с чтением или запоминанием, но люди делают, поэтому ваш код будет читать бумажные удары рок, а компьютер видит 1 удары 3. Это важно с точки зрения производительности.
Список также ограничен. Использование перечисления означает, что вы можете иметь только одно из этих трех значений или оно не будет компилироваться. Использование строк означает, что ваш код должен постоянно проверять равенство во время выполнения, поэтому он становится раздутым, медленным и подверженным ошибкам.
- 1. Почему я должен использовать BeginWrite вместо Write?
- 2. Почему я должен использовать git вместо svn?
- 3. Почему я должен использовать url.openStream вместо url.getContent?
- 4. Почему я должен использовать char вместо varchar?
- 5. Почему я должен использовать DECLARE_DYNAMIC вместо DECLARE_DYNCREATE?
- 6. Почему я должен использовать & вместо &?
- 7. Почему я должен использовать jQuery вместо GWT?
- 8. Почему я должен использовать переменную вместо «0»?
- 9. Почему я должен использовать определение jQuery вместо $?
- 10. Почему я должен использовать ints вместо float?
- 11. Почему я должен использовать var вместо типа?
- 12. Почему я должен использовать POST вместо GET?
- 13. Почему я должен использовать «_object» вместо «объекта»
- 14. Фальши: Почему я должен использовать !!! вместо ! (3 вместо 1 взрыва)
- 15. Почему я должен не использовать 0 в флаг перечисления
- 16. Должен ли я использовать SQLite вместо MySQL?
- 17. Почему я должен использовать [ProtoInclude]?
- 18. Почему я должен использовать Flex?
- 19. я должен использовать React-Bootstrap вместо Bootstrap
- 20. Какой компонент я должен использовать вместо списка?
- 21. Что я должен использовать вместо .__ getlice__?
- 22. Почему я должен использовать nhibernate вместо сущности framework 4
- 23. Почему я должен использовать автоматически реализованное свойство вместо поля?
- 24. Почему я должен использовать OkHttp вместо андроида HTTPClient и AsyncTask
- 25. Почему я должен использовать XMLLIst вместо простого простого XML?
- 26. Почему я должен использовать элемент GetBuffer для CString вместо SetAt?
- 27. Почему я должен использовать 1 бит битовых полей вместо bools?
- 28. Почему я должен использовать float вместо int в этом коде?
- 29. Почему я должен использовать 1 таблицу вместо двух?
- 30. Почему я должен использовать Constant Vertex Attributes вместо Uniforms?
http://stackoverflow.com/questions/11575376/why-use-enums-instead-of-constants – John
[Ответа на этот вопрос Jon Skeet] (http://stackoverflow.com/a/11575421/477420) как было найдено пользователь3360241 имеет очень хорошее объяснение, но, к сожалению, не может быть использован как дубликат из-за несоответствия тегов C#/Java. Ответ Guffa ниже дает C# аромат. –