DevSecOps

8 dez, 2008

Propriedades e Métodos Estáticos

Publicidade

Propriedades estáticas

Assim como variáveis de instância, variáveis estáticas são criadas usando a palavra chave var. Porém, para criar uma propriedade estática, devemos associar a variável o atributo static.

class Matemática {
	static var numero = 19;
}

Assim como outras propriedades de classe, os acessos modificadores devem ser explicitamente definidos (protected, internal, public, private). Caso não sejam definidos, internal é o padrão.

Por convenção, o atributo static deve vir depois do acesso modificador:

public static var numero = 19;

Um detalhe é que uma variável de instância pode ter o mesmo nome que uma variável estática. Logo, dentro do código, sempre usaremos o nome da classe junto à propriedade estática.

package {
	public class Matematica {
		public static var numero = 23;
		public var numero = 3.14;
	}
}

Constantes estáticas

Uma constante é uma variável estática, que mantém seu valor inalterado por todo o algoritmo. Os eventos mantêm essa convenção como padrão, vimos isso durante todo o curso:

MouseEvent.CLICK = "click";
Event.ENTER_FRAME = "enterFrame";

Normalmente utilizamos essas constantes para definir configurações do programa.

package {
	public class Matematica {	
		public static const PI = Math.PI;
	}
}

Métodos estáticos

Métodos estáticos são equivalentes às propriedades e constantes estáticas: são acessados pela própria classe sem a necessidade de instanciá-los para usar.

A classe Mouse contém dois métodos estáticos hide() e show(), ambos para esconder e mostrar o cursor. Outra classe que contám somente métodos estáticos é a conhecida classe Math, que mantém diversos métodos matemáticos, como randomização, potenciação, log e coseno, entre outros.

Um método estático, no entanto, não pode acessar variáveis de instância diretamente em seu corpo, um meio de acessá-lo seria passar essa variável de instância via parâmetro de método.

package {
	public class Matematica {

		public static  const PI = Math.PI;
		
		public static function round(num:Number):Number {
			return Math.round(num);
		}
		public static function sin(num:Number):Number {
			return Math.sin(num);
		}
		public static function atan(num:Number):Number {
			return Math.atan(num);
		}
		public static function cos(num:Number):Number {
			return Math.cos(num);
		}
	}
}


package {	
	public class StringUtils {

		public static function inverse(string:String):String {
			var str:String = "";
			for (var i:Number = string.length; i>=0; i--) {
				str += string.charAt(i);
			}
			return str;
		}
		public static function startsWith(string:String, prefix:String):Boolean {
			var count:Number = prefix.length;
			if (string.substr(0, count) == prefix) {
				return true;
			} else {
				return false;
			}
		}
		public static function endsWith(string:String, suffix:String):Boolean {
			var count:Number = suffix.length;
			if (string.substr(string.length-count) == suffix) {
				return true;
			} else {
				return false;
			}
		}
		public static function equalsIgnoreCase(stringA:String, stringB:String):Boolean {
			if (stringA.toLowerCase() == stringB.toLowerCase()) {
				return true;
			} else {
				return false;
			}
		}
		public static function lTrim(string:String):String {
			var size:Number = string.length;
			for (var i:Number = 0; i<size; i++) {
				if (string.charCodeAt(i)>32) {
					return string.substring(i);
				}
			}
			return "";
		}
		public static function rTrim(string:String):String {
			var size:Number = string.length;
			for (var i:Number = size; i>0; i--) {
				if (string.charCodeAt(i)>32) {
					return string.substring(0, i+1);
				}
			}
			return "";
		}
		public static function trim(string:String):String {
			string = rTrim(string);
			string = lTrim(string);
			return string;
		}
		public static function abbreviate(string:String, length:uint, pattern:String = "..."):String {
			string = string.substr(0, length);
			string = string.substr(0, string.lastIndexOf(" "));
			return string += pattern;
		}
	}
}

Herança

Diferentemente das variáveis, constantes e métodos de instância, características e comportamentos estáticos não são herdados por suas especializações.