Theory
શ્રેણી 1 એટલે શું?
Till લખ્યાના છ મહિના પછી, તમે તમારો જ code વાંચો છો:
if (item.category == 1) { applyMealDiscount(); }
1 એટલે ભોજન? પીણું? જાણવા માટે તમે વીસ મિનિટ સુધી ફેંદો છો. એ દરમિયાન સાથી category = 7 સંઘરે છે, એવી શ્રેણી જે અસ્તિત્વમાં જ નથી, અને compiler ખુશીથી હા પાડે છે.
જાદુઈ આંકડા programs ને સડાવે છે. C++ પાસે બરાબર આના માટે બનેલું નાનું ઓજાર છે: આંકડાઓને નામ આપો, અને સમૂહને પ્રકાર આપો.
Theory
Menu ના પાટિયાના નિશ્ચિત વિભાગ
Canteen ના menu ના પાટિયા પર બરાબર ત્રણ વિભાગ છે: નાસ્તો, ભોજન, પીણાં. કોઈ વાનગી ક્યારેય વિભાગની બહાર ટાંગાતી નથી, અને કોઈ મરજી પડે ત્યારે ચોથો વિભાગ શોધી કાઢતું નથી.
Enum એ તમારા program ની અંદરનું એ પાટિયું છે: નામ આપેલા વિકલ્પોની બંધ યાદી. કોઈ પણ item એમાંના એકમાં જ બેસવી જોઈએ, અને દરેક જણ વિભાગનાં નામ વાંચે છે, વિભાગના આંકડા નહીં.
Theory
Enumeration, ઔપચારિક રીતે
enum (enumeration) એ user-defined પ્રકાર છે જેનાં મૂલ્યો નામ આપેલા પૂર્ણાંક અચળો છે:
enum Category { SNACK, MEAL, DRINK };
મૂળભૂત રીતે નામો 0 થી ગણાય છે: SNACK એ 0, MEAL એ 1, DRINK એ 2.
એ પ્રકારનું variable declare કરો અને વાપરો:
Category c = MEAL;
હવે c અર્થપૂર્ણ રીતે ફક્ત યાદીના સભ્યો જ રાખી શકે, અને if (c == MEAL) અંગ્રેજી જેવું વંચાય છે.
Practical
Till ની શ્રેણીઓ, આખરે નામ સાથે
#include <iostream>
using namespace std;
enum Category { SNACK, MEAL, DRINK }; // 0, 1, 2
enum Tier { REGULAR = 1, MEMBER = 5, STAFF = 10 }; // custom values
int main() {
Category c = MEAL;
if (c == MEAL)
cout << "Thali section" << endl;
cout << c << endl; // prints 1, the underlying integer
cout << STAFF << endl; // prints 10
switch (c) { // enums shine in switch
case SNACK: cout << "snack"; break;
case MEAL: cout << "meal"; break;
case DRINK: cout << "drink"; break;
}
return 0;
}
Theory
પોતાનાં મૂલ્યો અને ચાલુ રાખવાનો નિયમ
તમે જાતે મૂલ્યો સોંપી શકો છો: enum Tier { REGULAR = 1, MEMBER = 5, STAFF = 10 };
જો તમે કેટલાંક સોંપો અને બીજાં છોડી દો, તો સોંપ્યા વગરનું નામ આગલું મૂલ્ય વત્તા 1 લે છે:
enum Code { A = 100, B, C = 200, D };
એ B = 101 અને D = 201 આપે છે.
પોતાનાં મૂલ્યોની ઝંઝટ શા માટે? બહારની હકીકતો સાથે મેળ બેસાડવા: ભૂલના codes, discount ની ટકાવારી, keyboard ના codes, જ્યાં પણ આંકડો પોતે અર્થ વહન કરતો હોય.
Think first
Output ધારો
enum Category { SNACK, MEAL, DRINK }; સાથે till ચલાવે છે:
Category c = DRINK;
cout << c;
Tap કરતાં પહેલાં: પડદા પર બરાબર શું દેખાય છે?
Show the answer
2, DRINK શબ્દ નહીં. Enum નું નામ એ પૂર્ણાંક પરનો પોશાક છે: cout પોશાક ઉતારીને આંકડો છાપે છે (SNACK 0, MEAL 1, DRINK 2). પડદા પર શબ્દ જોઈતો હોય તો તમારે જાતે અનુવાદ કરવો પડે, સામાન્ય રીતે switch થી કે strings ના array થી. નામ છપાશે એવી અપેક્ષા એ enum નું સૌથી સામાન્ય આશ્ચર્ય છે.
Quiz
enum Code { A = 100, B, C = 200, D }; આપેલું હોય, તો B અને D નાં મૂલ્યો શું છે?
- B = 101, D = 201
- B = 0, D = 1
- B = 100, D = 200
- B = 200, D = 300
Show the answer
B = 101, D = 201
ચાલુ રાખવાનો નિયમ: સોંપ્યા વગરનું નામ આગલું વત્તા 1 હોય છે. B એ A(100) પછી આવે છે એટલે B એ 101 છે; D એ C(200) પછી આવે છે એટલે D એ 201 છે. વિકલ્પ B શૂન્યથી શરૂ થતો મૂળભૂત નિયમ લગાડે છે, પણ એ ફક્ત ત્યારે જ લાગુ પડે જ્યારે કોઈ મૂલ્ય સોંપાયું ન હોય. વિકલ્પ C અને D નકલ કરવાના અને કૂદકા મારવાના એવા નિયમો ઉપજાવે છે જે enums માં છે જ નહીં.
Watch out
જાણવા જેવી ઢીલાશ
જૂનાં enums ચૂપચાપ int માં ફેરવાઈ જાય છે, એટલે MEAL + DRINK જેવી બકવાસ પણ compile થાય છે (એ તો ફક્ત 1 + 2 છે). પ્રકાર વાંચનનું રક્ષણ કરે છે, ગણિતનું નહીં.
આધુનિક C++ (C++11) એ enum class ઉમેર્યું: enum class Category { SNACK, MEAL }; ને Category::MEAL જોઈએ છે અને એ ચૂપચાપ થતા રૂપાંતરની ના પાડે છે. જો પરીક્ષા પૂછે કે enums ને type-safe કેવી રીતે બનાવવાં, તો જવાબ એ છે. આ અભ્યાસક્રમ માટે, પહેલાં જૂનું enum પાકું કરો.
Theory
તમારી class ની રચનાઓમાં એ ક્યાં બંધબેસે છે
Enums એ class અને struct ની સાથે user-defined કુટુંબના ત્રીજા સભ્ય છે. આગલા પાઠના Item class માં, member variable તરીકે Category category; એ int કરતાં વધુ સ્વચ્છ છે અને પોતે જ પોતાનું વર્ણન કરે છે. આ જ વિચાર તમને બધે મળશે: HTTP ના status નાં જૂથ, અઠવાડિયાના દિવસો, રમતની અવસ્થાઓ, semester ના આંકડા.
Summary
Key takeaways
- enum Name { A, B, C }; એ નામ આપેલા પૂર્ણાંક અચળોનો user-defined પ્રકાર બનાવે છે.
- મૂળભૂત ગણતરી 0 થી શરૂ થાય છે; પોતાનાં મૂલ્યો ચાલે છે; સોંપ્યા વગરનાં નામ આગલું વત્તા 1 લે છે.
- cout અંદરનો પૂર્ણાંક છાપે છે, ક્યારેય નામ નહીં.
- જૂનાં enums ચૂપચાપ int માં ફેરવાય છે; enum class (C++11) એ કડક આવૃત્તિ છે.
- બંધ સમૂહો માટે enums વાપરો: શ્રેણીઓ, સ્તર, અવસ્થાઓ; એ switch માં સરસ વંચાય છે.
- Memory hook: menu ના પાટિયાના નિશ્ચિત વિભાગ.