Skip to main content

கட்டமைக்க

கண்ணோட்டம்

Wave மொழியில் உள்ள கட்டமைப்புகள் பயனர் வரையறுக்கப்பட்ட தரவு வகைகளை அறிவிப்பதற்கான முக்கிய தொடரியல் கூறுகளாகும். பல்வேறு வகையான மதிப்புகளை ஒரு தருக்க அலகுக்குள் தொகுப்பதன் மூலம் அவற்றை வெளிப்படுத்த கட்டமைப்புகள் உங்களை அனுமதிக்கின்றன, இது சிக்கலான தரவு கட்டமைப்புகளை தெளிவாகவும் பாதுகாப்பாகவும் வடிவமைக்க உங்களை அனுமதிக்கிறது.

Wave இன் கட்டமைப்பு மதிப்பு வகையாக செயல்படுகிறது. அனைத்து புலங்களும் வெளிப்படையான வகையைக் கொண்டிருக்க வேண்டும், மேலும் கட்டமைப்பு நிகழ்வை உருவாக்கும் போது அனைத்து புலங்களும் துவக்கப்பட வேண்டும். இந்த விதிகள் கட்டமைப்பின் நிலை எப்போதும் முழுமையானதாகவும் கணிக்கக்கூடியதாகவும் இருப்பதை உறுதி செய்கிறது.

கட்டமைப்பு அறிவிப்பு தொடரியல்

struct முக்கிய சொல்லைப் பயன்படுத்தி கட்டமைப்புகள் அறிவிக்கப்படுகின்றன. கட்டமைப்பின் பெயர் PascalCase ஐப் பயன்படுத்துகிறது, மேலும் ஒன்று அல்லது அதற்கு மேற்பட்ட புலங்களை கட்டமைப்பின் உடலில் வரையறுக்கலாம்.

புலங்கள் name: type; வடிவத்தில் அறிவிக்கப்படுகின்றன, மேலும் ஒவ்வொரு புல அறிவிப்புக்குப் பிறகும் அரைப்புள்ளி தேவைப்படுகிறது.

struct Box {
size: i32;
weight: f32;
}

ஒரு கட்டமைப்பை அறிவிக்கும் போது, புலங்கள் உருவாக்கப்படும் வரிசை நினைவக வேலை வாய்ப்பு வரிசையின் அதே வரிசையில் பயன்படுத்தப்படுகிறது. ஒரு கட்டமைப்பிற்குள் புல அறிவிப்புகள் மட்டுமே அனுமதிக்கப்படும்; செயல்பாடுகள் அல்லது முறைகளை சேர்க்க முடியாது. செயல் தர்க்கம் கட்டமைப்பிற்கு வெளியே தனித்தனியாக வரையறுக்கப்படுகிறது.

கட்டமைப்பை உருவாக்கும் தொடரியல்

கட்டமைப்பு பெயரைப் பயன்படுத்தி எழுத்து வடிவில் கட்டமைப்புகள் உருவாக்கப்படுகின்றன. கட்டமைப்பு எழுத்துக்கள் StructName { field_name: value; ... } வடிவத்தில் எழுதப்பட்டுள்ளன.

var b: Box = Box {
size: 42;
weight: 10.5;
};

ஒரு கட்டமைப்பை உருவாக்கும் போது, அனைத்து வரையறுக்கப்பட்ட புலங்களும் துவக்கப்பட வேண்டும். ஏதேனும் ஒன்று விடுபட்டால், தொகுத்தல் பிழை ஏற்படும்.

துவக்கத்தின் போது புலங்களை உருவாக்கும் வரிசையானது கட்டமைப்பு அறிவிப்பு வரிசையுடன் பொருந்த வேண்டியதில்லை, ஆனால் ஒவ்வொரு புலத்திற்கும் அனுப்பப்பட்ட மதிப்பின் வகையானது கட்டமைப்பில் வரையறுக்கப்பட்ட வகையுடன் சரியாகப் பொருந்த வேண்டும். Wave கட்டமைப்பு புலம் துவக்கத்தின் போது மறைமுக வகை மாற்றத்தை அனுமதிக்காது.


கட்டமைப்பு புல அணுகல் தொடரியல்

புள்ளி குறியீட்டைப் பயன்படுத்தி கட்டமைப்பின் புலங்கள் அணுகப்படுகின்றன. புல அணுகல் வாசிப்பதற்கும் எழுதுவதற்கும் ஒரே தொடரியல் பயன்படுத்துகிறது.

println("Size: {}", b.size);
println("Weight: {}", b.weight);

இல்லாத புலப் பெயரைப் பயன்படுத்த முயற்சித்தால், தொகுக்கும் படியின் போது பிழை ஏற்படும். கட்டமைப்பு ஒரு மதிப்பு வகை என்பதால், முழு கட்டமைப்பையும் ஒதுக்கும்போது அல்லது அதை ஒரு செயல்பாட்டு வாதமாக அனுப்பும்போது, கட்டமைப்பில் உள்ள அனைத்து புலங்களும் ஒன்றாக நகலெடுக்கப்படுகின்றன.


கட்டமைப்பு முறை வரையறை தொடரியல்

Wave மொழியானது கட்டமைப்புகளுக்குள் நேரடி முறைகளை வரையறுக்கவில்லை. அதற்கு பதிலாக, proto திறவுச்சொல்லைப் பயன்படுத்தி கட்டமைப்பில் இணைக்கப்பட்ட முறைகளின் தொகுப்பை அறிவிக்கவும்.

proto தொகுதி என்பது ஒரு குறிப்பிட்ட கட்டமைப்பைச் சேர்ந்த செயல்பாடுகளின் ஒரு பகுதி, இந்தத் தொகுதிக்குள் வரையறுக்கப்பட்ட செயல்பாடுகள் தொடர்புடைய கட்டமைப்பின் முறைகளைப் போலவே பயன்படுத்தப்படுகின்றன.

இந்த முறையானது self ஐ முதல் அளவுருவாகக் கொண்டு ஒரு கட்டமைப்பு நிகழ்வை அனுப்புகிறது. self என்பது கட்டமைப்பின் முழு மதிப்பையும் குறிக்கிறது மற்றும் மதிப்பை நகலெடுப்பதன் மூலம் அனுப்பப்படுகிறது.

proto Box {
fun print(self) {
println("size={}, weight={}", self.size, self.weight);
}

fun added_size(self, x: i32) -> i32 {
return self.size + x;
}
}

proto பிளாக் கட்டமைப்பு பிரகடனத்தின் அதே கோப்பில் இருக்க வேண்டிய அவசியமில்லை. பல proto தொகுதிகள் ஒரே கட்டமைப்பிற்கான முறைகளை விநியோகிக்கப்பட்ட வரையறையை அனுமதிக்கின்றன.

முறை அழைப்புகள் புள்ளி குறியீட்டைப் பயன்படுத்துகின்றன மற்றும் வழக்கமான செயல்பாட்டு அழைப்புகளைப் போலவே செயல்படுகின்றன.

b.print();
var n: i32 = b.added_size(5);

கட்டமைப்புகளை செயல்பாட்டு வாதங்களாகப் பயன்படுத்துதல்

கட்டமைப்புகள் செயல்பாடுகளுக்கு வாதங்களாக அனுப்பப்படும் போது, அவை நகல்-மூலம்-மதிப்பு முறைகளாகக் கருதப்படுகின்றன. ஒரு செயல்பாட்டின் உள்ளே ஒரு கட்டமைப்பின் புலங்களை நீங்கள் மாற்றினாலும், அது அழைப்பாளரின் கட்டமைப்பு நிகழ்வைப் பாதிக்காது.

fun calc(box: Box) -> i32 {
return box.size * 2;
}

ஒரு செயல்பாட்டின் வருவாய் மதிப்பாக ஒரு கட்டமைப்பைப் பயன்படுத்தும்போது அதே மதிப்பு நகலெடுப்பு நிகழ்கிறது. இந்த நடத்தை கட்டமைப்பு மாறாத தன்மை மற்றும் கணிக்கக்கூடிய தரவு ஓட்டத்தை உறுதி செய்கிறது.


உள்ளமைக்கப்பட்ட கட்டமைப்பு

Wave இல், நீங்கள் மற்ற கட்டமைப்புகளை கட்டமைப்பின் புல வகையாகப் பயன்படுத்தலாம். கட்டமைப்புகள் முழுமையான வகைகளாக இருப்பதால், அவை மற்ற கட்டமைப்புகளுக்குள் சுதந்திரமாக கூடு கட்டப்படலாம்.

struct Position {
x: i32;
y: i32;
}

struct Player {
name: str;
pos: Position;
}

உள்ளமைக்கப்பட்ட கட்டமைப்புகளின் புலங்கள் வரிசையான புள்ளி குறியீட்டைப் பயன்படுத்தி அணுகப்படுகின்றன.

var p: Player = Player {
name: "Alice";
pos: Position { x: 10; y: 20; };
};

println("Player X: {}", p.pos.x);
println("Player Y: {}", p.pos.y);

ஒரு கட்டமைப்பிற்குள் கூடு கட்டுவதன் மூலம் நீங்கள் மற்றொரு கட்டமைப்பை எழுத்துப்பூர்வமாக எழுதலாம். இந்த வழக்கில், அனைத்து புல துவக்க விதிகளும் சமமாக பொருந்தும்.


கட்டமைப்புகளின் வரிசை

வரிசைகளில் உறுப்பு வகைகளாக கட்டமைப்புகளைப் பயன்படுத்தலாம். Wave இன் வரிசை தொடரியல் array<type, length> வடிவமைப்பைப் பயன்படுத்துகிறது, மேலும் கட்டமைப்பு வகையையும் அப்படியே குறிப்பிடலாம்.

var players: array<Player, 3> = [
Player { name: "A"; pos: Position { x: 1; y: 2; }; },
Player { name: "B"; pos: Position { x: 3; y: 4; }; },
Player { name: "C"; pos: Position { x: 5; y: 6; }; }
];

கட்டமைப்பு வரிசையின் கூறுகளை அணுகும் போது, முதலில் வரிசை குறியீட்டைப் பயன்படுத்தவும் புள்ளி குறியீட்டைப் பயன்படுத்தி கட்டமைப்பின் உள்ளே புலங்களை அணுகலாம்.

println("Second Player X: {}", players[1].pos.x);

கட்டமைப்புகளில் அடிப்படை செயல்பாடுகள் சாத்தியமா

Wave இன் கட்டமைப்பு பயனர் வரையறுக்கப்பட்ட வகை என்பதால், இது தானாக எண்கணிதம் அல்லது ஒப்பீட்டு செயல்பாடுகளில் பங்கேற்காது.

உங்களுக்கு கட்டமைப்பு சமத்துவ ஒப்பீடு, வரிசைப்படுத்துதல், ஹாஷிங், எண் செயல்பாடுகள் போன்றவை தேவைப்பட்டால். proto தொகுதி மூலம் நடத்தையை நீங்கள் வெளிப்படையாக வரையறுக்க வேண்டும். Wave கட்டமைப்புகளுக்கு மறைமுகமான ஆபரேட்டர்களை வழங்காது, கொள்கையளவில், அனைத்து செயல்களும் வெளிப்படையாக வரையறுக்கப்பட்டுள்ளன.