Extend en klasse del 3: Funktion på funktion

Hvis din kode er struktureret fornuftigt, så kan de funktioner du selv har tilføjet til en klasse også genbruges i nye funktioner.
Så, denne gang genbruger vi vores random() funktion fra 2. del til at lave en funktion som er kritisk for ethvert spil kort, og også nyttig i andre sammenhænge, nemlig en shuffle-funktion.

Koden er super simpel, så den får næsten lov til at stå for sig selv:


public function shuffle() {
	var _temp_arr:SuperArray = new SuperArray();
	while (this.length > 0) {
		_temp_arr.push(this.random(true))
	}
	while (_temp_arr.length > 0) {
		this.push(_temp_arr.shift());
	}
}

De to ting der primært er værd at bemærke er at _temp_arr også er af SuperArray typen, hvilket gør at vi kan genbruge random() funktionen fra tidligere, hvilket sker her:

_temp_arr.push(this.random(true))

Og, selvom det jo er et meget simpelt eksempel, så viser det hvordan man med meget få linier og en masse genbrug kan tilføje lækker ny funktionalitet.

Den komplette SuperArray klasse ser nu sådan her ud:


package {
	dynamic public class SuperArray extends Array {

		public function SuperArray(... optionalArgs) {
			for each (var value:* in optionalArgs){
				this.push(value);
			}
			//trace(length);
		}

		public function random(_delete:Boolean = false):* {
			var _random:Number = Math.floor(Math.random() * this.length);
			var _obj:*;
			if(_delete) { //hvis true fjernes elementet
				_obj = this.splice(_random, 1);
			} else { //Ellers returneres det bare
				_obj = this[_random];
			}
			return _obj;
		}

		public function shuffle() {
			var _temp_arr:SuperArray = new SuperArray();
			while (this.length > 0) {
				_temp_arr.push(this.random(true))
			}
			while (_temp_arr.length > 0) {
				this.push(_temp_arr.shift());
			}
		}

	}
}

Som skrevet tidligere, så sig endelig til hvis du har en ide til noget ny funktionalitet som du mener vores SuperArray mangler.

Note: Den kode som kopierer de sorterede elementer fra _temp_arr og tilbage til hovedarrayet kan sagtens optimeres, men denne måde at gøre det på var temmeligt selvforklarende.



Del:These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • digg

Skriv en kommentar