คำถามติดแท็ก enum

Enum (การแจงนับด้วย) คือชนิดข้อมูลที่ประกอบด้วยชุดของค่าที่ตั้งชื่อเรียกว่าองค์ประกอบสมาชิกหรือตัวนับประเภท โดยปกติชื่อตัวนับจะเป็นตัวระบุที่ทำงานเป็นค่าคงที่ในภาษาและมักจะกำหนดไว้ล่วงหน้าด้วยลำดับโดยนัย

8
ทำไมคุณถึงต้องเก็บ Enum ไว้ใน DB
ฉันเคยเห็นคำถามมากมายเช่นนี้เพื่อขอคำแนะนำเกี่ยวกับวิธีการจัดเก็บ enums ในฐานข้อมูล แต่ฉันสงสัยว่าทำไมคุณถึงทำอย่างนั้น สมมุติว่าฉันมีเอนทิตีที่Personมีgenderเขตข้อมูลและGenderenum จากนั้นตารางบุคคลของฉันมีเพศคอลัมน์ นอกจากเหตุผลที่ชัดเจนของการบังคับใช้ความถูกต้องแล้วฉันไม่เห็นว่าทำไมฉันจึงสร้างตารางพิเศษgenderเพื่อทำแผนที่สิ่งที่ฉันมีอยู่ในแอปพลิเคชันของฉัน และฉันไม่ชอบการทำซ้ำที่จริง
69 database  enum 

7
การใช้ขอบเขตที่กำหนดสำหรับบิตแฟล็กใน C ++
enum X : int(C #) หรือenum class X : int(C ++ 11) เป็นชนิดที่มีเขตข้อมูลภายในที่ซ่อนของintที่สามารถเก็บค่าใด ๆ นอกจากนี้ค่าคงที่จำนวนหนึ่งที่กำหนดไว้ล่วงหน้าของXจะถูกกำหนดไว้ใน enum เป็นไปได้ที่จะส่งค่า enum ให้เป็นค่าจำนวนเต็มและในทางกลับกัน ทั้งหมดนี้เป็นจริงทั้งใน C # และ C ++ 11 ใน C # enums ไม่ได้ใช้เพียงเพื่อเก็บค่าของแต่ละบุคคล แต่ยังถืออยู่รวมกันค่าที่เหมาะสมของธงตามคำแนะนำของไมโครซอฟท์ เช่น enums (ปกติ แต่ไม่จำเป็น) ตกแต่งด้วย[Flags]แอตทริบิวต์ เพื่อทำให้ชีวิตของนักพัฒนาง่ายขึ้นผู้ประกอบการระดับบิต (OR, และอื่น ๆ ... ) จะได้รับการโหลดมากเกินไปเพื่อให้คุณสามารถทำสิ่งนี้ได้อย่างง่ายดาย (C #): void M(NumericType flags); M(NumericType.Sign …

3
มันเสียเปล่าไหมที่จะสร้างตารางฐานข้อมูลใหม่แทนที่จะใช้ชนิดข้อมูล enum?
สมมติว่าฉันมีบริการ 4 ประเภทที่ฉันเสนอให้ (พวกเขาไม่น่าจะเปลี่ยนแปลงบ่อย): การทดสอบ ออกแบบ การเขียนโปรแกรม อื่น ๆ สมมติว่าฉันมีบริการจริง 60-80 รายการที่แต่ละบริการจัดอยู่ในหมวดหมู่ข้างต้น ตัวอย่างเช่น 'บริการ' สามารถเป็น "โปรแกรมทดสอบโดยใช้เทคนิค A" และเป็นประเภท "การทดสอบ" ฉันต้องการเข้ารหัสให้เป็นฐานข้อมูล ฉันมากับตัวเลือกไม่กี่: ตัวเลือก 0: ใช้VARCHARโดยตรงเพื่อเข้ารหัสประเภทบริการโดยตรงเป็นสตริง ตัวเลือกที่ 1: enumฐานข้อมูลการใช้งาน แต่enum นั้นชั่วร้าย ตัวเลือก 2: ใช้สองตาราง: service_line_item (id, service_type_id INT, description VARCHAR); service_type (id, service_type VARCHAR); ฉันยังสามารถเพลิดเพลินกับ Referential Integrity: ALTER service_line_item ADD FOREIGN KEY …

5
ทำไมเราต้องใช้ enums ในภาษาที่พิมพ์แบบไดนามิก?
ฉันอ่านรหัสที่นี่และเห็นว่ามีการใช้ enum เพื่อจัดเก็บชื่อของแท็ก html ทำไมเราต้องทำเช่นนี้? ฉันจะได้รับประโยชน์อะไรจากการใช้กลยุทธ์นี้ ฉันรู้ว่า enums มีประโยชน์อย่างไรในการรวบรวมหรือพิมพ์ภาษาแบบคงที่ แต่เมื่อฉันเห็น enums ในภาษาที่พิมพ์แบบไดนามิกฉันอยากรู้อยากเห็นเช่นรหัสตัวอย่างที่ฉันแสดงด้านบน ดังนั้นคำถามโดยทั่วไปแล้วทำไมเราถึงต้องการ enums ในภาษาที่พิมพ์แบบไดนามิกหรือเราต้องการมันทั้งหมด?

3
วิธีการแสดง (enum) ประเภทใน API สาธารณะ
ฉันกำลังทำงานกับ API อย่างง่ายที่ฉันต้องการใช้สำหรับลูกค้าของตัวเองและเพื่อเปิดให้ประชาชนในอนาคต ฉันมีวัตถุ "รายการ" ซึ่งสามารถมี "ประเภท" ที่แตกต่างกัน ประเภทคือ C "typedef enum" ในขณะที่ฉันมี: typedef enum { ItemTypeBool, ItemTypeNumber, ItemTypeDate, } ItemType; (ฉันอาจเพิ่มบางอย่างในอนาคต) ฉันสงสัยว่าฉันควรจะถ่ายโอนมันเป็นจำนวนเต็มหรือตามที่กำหนดไว้ "สตริง" JSON จะเป็น: สำหรับจำนวนเต็ม: { "name": "The name", "type": 0, ... } สำหรับสตริง: { "name": "The name" "type": "boolean" ... } ฉันสงสัยว่ามีวิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้หรือไม่ การรักษาจำนวนเต็มจะลดความซับซ้อนของรหัสเล็กน้อยและลดแบนด์วิดธ์ แต่สตริงจะง่ายขึ้นสำหรับนักพัฒนาที่จะจำ ฉันจำได้ว่าฉันทำงานในโครงการและฉันต้องจำ 1 = …

5
enums สร้างส่วนต่อประสานที่บอบบางหรือไม่?
ลองพิจารณาตัวอย่างด้านล่าง การเปลี่ยนแปลงใด ๆ กับ ColorChoice enum จะส่งผลกระทบต่อคลาสย่อย IWindowColor ทั้งหมด enums มีแนวโน้มที่จะทำให้เกิดการเชื่อมต่อที่เปราะหรือไม่? มีอะไรดีไปกว่า Enum ที่จะยอมให้มีความยืดหยุ่นแบบ polymorphic มากขึ้นหรือไม่? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: ColorChoice getColor() const=0; void setColor( const ColorChoice value )=0; }; แก้ไข: ขออภัยที่ใช้สีเป็นตัวอย่างของฉันนั่นไม่ใช่สิ่งที่เป็นคำถาม นี่คือตัวอย่างอื่นที่หลีกเลี่ยงปลาเฮอริ่งแดงและให้ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ฉันหมายถึงโดยความยืดหยุ่น enum class CharacterType { orc = …

6
เมื่อใดที่ enums ไม่มีกลิ่นรหัส
ภาวะที่กลืนไม่เข้าคายไม่ออก ฉันได้อ่านหนังสือฝึกหัดที่ดีที่สุดมากมายเกี่ยวกับการฝึกฝนเชิงวัตถุและหนังสือเกือบทุกเล่มที่ฉันอ่านมีส่วนที่พวกเขาบอกว่า enums เป็นกลิ่นรหัส ฉันคิดว่าพวกเขาพลาดส่วนที่พวกเขาอธิบายเมื่อ enums ถูกต้อง ดังนั้นฉันกำลังมองหาแนวทางและ / หรือกรณีการใช้งานที่ enums ไม่ได้กลิ่นรหัสและในความเป็นจริงโครงสร้างที่ถูกต้อง แหล่งที่มา: "คำเตือนตามกฎของหัวแม่มือ, enums เป็นรหัสที่มีกลิ่นและควรได้รับการ refactored เพื่อเรียน polymorphic [8]" Seemann, Mark, การฉีดพึ่งพาใน. Net, 2011, p. 342 [8] Martin Fowler et al., Refactoring: การปรับปรุงการออกแบบของรหัสที่มีอยู่ (นิวยอร์ก: Addison-Wesley, 1999), 82 บริบท สาเหตุของภาวะที่กลืนไม่เข้าคายไม่ออกของฉันคือการซื้อขาย API พวกเขาให้กระแสข้อมูล Tick โดยส่งผ่านวิธีนี้: void TickPrice(TickType tickType, double value) ที่ไหน …

9
หนึ่งควรทดสอบค่าของ enum โดยใช้การทดสอบหน่วย?
หากคุณมี enum ที่มีค่าเท่านั้น (ไม่มีวิธีใดที่สามารถทำได้ใน Java) และ enum นี้เป็นส่วนหนึ่งของคำจำกัดความทางธุรกิจของระบบหนึ่งหน่วยการเขียนควรทำการทดสอบหรือไม่? ฉันคิดว่าพวกเขาควรจะเขียนแม้ว่าพวกเขาจะดูเรียบง่ายและซ้ำซ้อนฉันพิจารณาว่าสิ่งที่เกี่ยวข้องกับข้อกำหนดทางธุรกิจควรจะเขียนอย่างชัดเจนในการทดสอบไม่ว่าจะเป็นกับหน่วย / บูรณาการ / UI / ฯลฯ การทดสอบหรือโดยใช้ระบบประเภทของภาษาเป็นวิธีการทดสอบ เนื่องจากค่าที่ enum (เช่นใน Java) ต้องมีจากมุมมองของธุรกิจจึงไม่สามารถทดสอบได้โดยใช้ระบบชนิดที่ฉันคิดว่าควรมีการทดสอบหน่วยสำหรับสิ่งนั้น คำถามนี้ไม่คล้ายกับคำถามนี้เพราะมันไม่ได้แก้ปัญหาเดียวกับของฉัน ในคำถามนั้นมีฟังก์ชั่นธุรกิจ (savePeople) และบุคคลกำลังสอบถามเกี่ยวกับการใช้งานภายใน (forEach) ในนั้นมีชั้นธุรกิจกลาง (ฟังก์ชั่นบันทึกคน) encapsulating การสร้างภาษา (forEach) นี่สร้างภาษา (enum) เป็นสิ่งที่ใช้ในการระบุพฤติกรรมจากมุมมองทางธุรกิจ ในกรณีนี้รายละเอียดการใช้งานจะเกิดขึ้นพร้อมกับ "ธรรมชาติที่แท้จริง" ของข้อมูลนั่นคือ: ชุด (ในแง่คณิตศาสตร์) ของค่า คุณสามารถใช้เซตที่ไม่เปลี่ยนรูปได้ แต่ค่าเดียวกันควรยังคงอยู่ที่นั่น หากคุณใช้อาร์เรย์คุณต้องทำสิ่งเดียวกันเพื่อทดสอบตรรกะทางธุรกิจ ฉันคิดว่าปริศนาที่นี่คือความจริงที่ว่าภาษาสร้างสอดคล้องกับธรรมชาติของข้อมูลได้ดีมาก ฉันไม่แน่ใจว่าฉันอธิบายตัวเองถูกต้องหรือไม่

5
สลับคำสั่ง - จัดการกรณีเริ่มต้นเมื่อไม่สามารถเข้าถึงได้
ถ้าฉันใช้คำสั่ง switch เพื่อจัดการค่าจาก enum (ซึ่งเป็นของชั้นเรียนของฉัน) และฉันมีเคสสำหรับค่าที่เป็นไปได้แต่ละอัน - มันคุ้มค่าที่จะเพิ่มรหัสเพื่อจัดการกับเคส "default" หรือไม่? enum MyEnum { MyFoo, MyBar, MyBat } MyEnum myEnum = GetMyEnum(); switch (myEnum) { case MyFoo: DoFoo(); break; case MyBar: DoBar(); break; case MyBat: DoBat(); break; default: Log("Unexpected value"); throw new ArgumentException() } ฉันไม่คิดว่าเป็นเพราะรหัสนี้ไม่สามารถเข้าถึงได้ (แม้จะมีการทดสอบหน่วย) เพื่อนร่วมงานของฉันไม่เห็นด้วยและคิดว่าสิ่งนี้ปกป้องเราจากพฤติกรรมที่ไม่คาดคิดที่เกิดจากค่าใหม่ที่เพิ่มเข้ามาใน MyEnum ชุมชนพูดว่าอย่างไร

3
ข้อเสียของการนำ singleton ไปใช้กับ enum ของ Java คืออะไร
ตามเนื้อผ้ามักจะใช้เป็นซิงเกิล public class Foo1 { private static final Foo1 INSTANCE = new Foo1(); public static Foo1 getInstance(){ return INSTANCE; } private Foo1(){} public void doo(){ ... } } ด้วย enum ของ Java เราสามารถใช้ singleton เป็น public enum Foo2 { INSTANCE; public void doo(){ ... } } น่ากลัวเหมือนรุ่นที่ 2 คือมีข้อเสียหรือไม่ (ฉันให้ความคิดกับฉันและฉันจะตอบคำถามของฉันเองหวังว่าคุณจะได้คำตอบที่ดีกว่า)
14 java  singleton  enum 

5
มันโอเคที่จะต่อต้านการตั้งชื่อตัวพิมพ์ใหญ่ทั้งหมดสำหรับ enums เพื่อให้การแสดงสตริงของพวกเขาง่ายขึ้นหรือไม่?
หลายครั้งที่ฉันเห็นคนใช้ตัวพิมพ์ชื่อเรื่องหรือแม้แต่การตั้งชื่อตัวพิมพ์เล็กทั้งหมดสำหรับค่าคงที่ enum ตัวอย่างเช่น: enum Color { red, yellow, green; } สิ่งนี้ทำให้การทำงานกับสตริงเป็นเรื่องง่ายและง่ายthrow new IllegalStateException("Light should not be " + color + ".")ตัวอย่างเช่นถ้าคุณต้องการทำ ดูเหมือนว่าจะยอมรับได้มากกว่านี้ถ้า Enum เป็นprivateแต่ฉันก็ยังไม่ชอบ ฉันรู้ว่าฉันสามารถสร้างตัวสร้าง enum ด้วยเขตข้อมูล String แล้วแทนที่ toString เพื่อคืนชื่อดังกล่าวดังนี้ enum Color { RED("red"), YELLOW("yellow"), GREEN("green"); private final String name; private Color(String name) { this.name = name } @Override …
14 java  conventions  enum 

4
การใช้แฟล็กสำหรับการ "จัดกลุ่ม" ผิดหรือเปล่า
ความเข้าใจของฉันอยู่ที่[Flag]enums มักจะใช้สำหรับสิ่งที่สามารถนำมารวมกันที่แต่ละค่าไม่ได้พิเศษร่วมกัน ตัวอย่างเช่น: [Flags] public enum SomeAttributes { Foo = 1 << 0, Bar = 1 << 1, Baz = 1 << 2, } ใด ๆ ที่SomeAttributesคุ้มค่าจะเป็นการรวมกันของFoo, และBarBaz ในสถานการณ์จริงที่ซับซ้อนมากขึ้นฉันใช้ enum เพื่ออธิบายDeclarationType: [Flags] public enum DeclarationType { Project = 1 << 0, Module = 1 << 1, ProceduralModule = 1 << …
12 c#  .net  readability  enum 

8
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะรวม enums ทั้งหมดไว้ในไฟล์เดียวและใช้มันในหลาย ๆ คลาส?
ฉันเป็นนักพัฒนาเกมที่ต้องการฉันทำงานกับเกมอินดี้เป็นครั้งคราวและในขณะที่ฉันได้ทำบางสิ่งบางอย่างซึ่งดูเหมือนเป็นการปฏิบัติที่ไม่ดีในตอนแรก แต่ฉันต้องการคำตอบจากโปรแกรมเมอร์ที่มีประสบการณ์บางคนที่นี่ สมมติว่าฉันมีไฟล์ชื่อenumList.hฉันประกาศทั้งหมด enums ที่ฉันต้องการใช้ในเกมของฉัน: // enumList.h enum materials_t { WOOD, STONE, ETC }; enum entity_t { PLAYER, MONSTER }; enum map_t { 2D, 3D }; // and so on. // Tile.h #include "enumList.h" #include <vector> class tile { // stuff }; แนวคิดหลักคือฉันประกาศ enums ทั้งหมดในเกมใน1 ไฟล์แล้วนำเข้าไฟล์นั้นเมื่อฉันต้องการใช้ enum ที่แน่นอนจากมันแทนที่จะประกาศในไฟล์ที่ฉันต้องการใช้ ฉันทำเช่นนี้เพราะทำให้ทุกสิ่งสะอาดฉันสามารถเข้าถึง enum …

7
เป็นวิธีปฏิบัติที่ดีหรือไม่ที่จะมีค่าพิเศษ“ ALL” ใน enum
ฉันกำลังพัฒนาบริการใหม่ในสภาพแวดล้อมแบบไมโครเซอร์วิส นี่คือบริการ REST เพื่อความง่ายสมมติว่าเส้นทางคือ: / historyBooks และวิธีการ POST สำหรับเส้นทางนี้สร้างหนังสือประวัติศาสตร์ใหม่ สมมติว่าหนังสือประวัติศาสตร์ครอบคลุมยุคหนึ่งในประวัติศาสตร์ เพื่อความกระชับลองสมมุติว่าเรามีเพียงประวัติศาสตร์ยุคต่อไปนี้: โบราณ โพสต์คลาสสิก ทันสมัย enumในรหัสของฉันฉันต้องการที่จะเป็นตัวแทนของพวกเขาใน ร่างกายวิธีของ (น้ำหนักบรรทุก) อยู่ในรูปแบบ JSON erasและควรรวมถึงชื่อสนาม ฟิลด์นี้เป็นรายการeraค่าที่หนังสือเล่มนี้ครอบคลุม ร่างกายอาจมีลักษณะ: { "name": "From the cave to Einstein - a brief history review", "author": "Foo Bar", "eras": ["Ancient", "Post Classical", "Modern"] } ในบริการเฉพาะนี้ตรรกะทางธุรกิจคือ: หากไม่มียุคที่ระบุไว้ในข้อมูลเข้าดังนั้นหนังสือเล่มนี้จะถือว่าครอบคลุมทุกยุคทุกสมัย ในการตรวจสอบ API มีข้อเสนอแนะ: รวมค่าอื่นALLสำหรับยุค enum …
11 rest  api  json  enum 

1
Enum มีคุณสมบัติบูลีนมากมาย
ขณะนี้ฉันกำลังทำงานกับ webapp ซึ่งเรามักจะต้องกำหนดเงื่อนไขของเซิร์ฟเวอร์บางอย่างโดยอิงจากหน้าเว็บที่จะถูกส่งคืนให้กับผู้ใช้ แต่ละหน้าจะได้รับรหัสหน้า 4 ตัวอักษรและรหัสหน้าเหล่านี้มีการระบุไว้ในชั้นเรียนเป็นสตริงคงที่: public class PageCodes { public static final String FOFP = "FOFP"; public static final String FOMS = "FOMS"; public static final String BKGD = "BKGD"; public static final String ITCO = "ITCO"; public static final String PURF = "PURF"; // etc.. } และบ่อยครั้งที่ในโค้ดเราเห็นโค้ดลักษณะนี้ ( …
11 java  design  enum 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.