ActionScript 3
प्रकार
खोज…
कास्टिंग टाइप करें
टाइप कास्टिंग या तो ऑपरेटर के साथ की as
है:
var chair:Chair = furniture as Chair;
या Type()
में मान को लपेटकर Type()
:
var chair:Chair = Chair(furniture);
यदि कलाकार के as
विफल रहता है, तो उस कलाकार का परिणाम null
। इस फिल्म में रैपिंग से विफल रहता है Type()
, एक TypeError
फेंक दिया है।
कार्य प्रकार
कार्य प्रकार के होते हैं Function
:
function example():void { }
trace(example is Function); // true
वे प्रकार के साथ अन्य वेरिएबल द्वारा संदर्भित किया जा सकता है Function
:
var ref:Function = example;
ref(); // ref.call(), ref.apply(), etc.
और वे मानकों जिसका प्रकार है के लिए तर्कों के रूप में पारित किया जा सकता Function
:
function test(callback:Function):void {
callback();
}
test(function() {
trace('It works!');
}); // Output: It works!
वर्ग का प्रकार
वर्ग घोषणाओं के संदर्भ टाइप किए जाते हैं Class
:
var spriteClass:Class = Sprite;
आप उस वर्ग के इंस्टेंसेस को टाइप करने के लिए Class
टाइप किए गए चर का उपयोग कर सकते हैं:
var sprite:Sprite = new spriteClass();
यह एक प्रकार के Class
एक तर्क को एक समारोह में पारित करने के लिए उपयोगी हो सकता है जो प्रदान की गई कक्षा का निर्माण और उदाहरण कर सकता है:
function create(type:Class, x:int, y:int):* {
var thing:* = new type();
thing.x = x;
thing.y = y;
return thing;
}
var sprite:Sprite = create(Sprite, 100, 100);
एनोटेटिंग प्रकार
आप संकलक को मूल्य के प्रकार के साथ यह बताकर बता सकते हैं :Type
:
var value:int = 10; // A property "value" of type "int".
फ़ंक्शन पैरामीटर और वापसी प्रकार भी एनोटेट किए जा सकते हैं:
// This function accepts two ints and returns an int.
function sum(a:int, b:int):int {
return a + b;
}
एक mismatching प्रकार एक का परिणाम देगा के साथ एक मूल्य निर्दिष्ट करने का प्रयास कर TypeError
:
var sprite:Sprite = 10; // 10 is not a Sprite.
जाँच प्रकार
आप is
मानने के लिए ऑपरेटर का उपयोग कर सकते हैं कि क्या मूल्य एक निश्चित प्रकार का है:
var sprite:Sprite = new Sprite();
trace(sprite is Sprite); // true
trace(sprite is DisplayObject); // true, Sprite inherits DisplayObject
trace(sprite is IBitmapDrawable); // true, DisplayObject implements IBitmapDrawable
trace(sprite is Number); // false
trace(sprite is Bitmap); // false, Bitmap inherits DisplayObject
// but is not inherited by Sprite.
एक instanceof
ऑपरेटर (पदावनत) भी है जो लगभग एक जैसा काम करता is
सिवाय इसके कि यह लागू किए गए इंटरफेस और इंट / यूइंट प्रकारों के लिए जाँच false
समय false
हो जाता है ।
as
आपरेटर है as
ऑपरेटर भी इस्तेमाल कर सकता is
। यह विशेष रूप से उपयोगी है यदि आप कुछ स्मार्ट IDE जैसे FlashDevelop का उपयोग करते हैं जो आपको स्पष्ट ऑब्जेक्ट प्रकार के सभी संभावित गुणों की एक सूची देगा। उदाहरण:
for (var i:int = 0; i < a.length; i++){
var d:DisplayObject = a[i] as DisplayObject;
if (!d) continue;
d.//get hints here
stage.addChild(d);
}
एक ही प्रभाव प्राप्त करने के लिए के साथ is
आप (sligthly कम सुविधाजनक) लिखते थे:
for (var i:int = 0; i < a.length; i++){
if (a[i] is DisplayObject != true) continue;
var d:DisplayObject = a[i] as DisplayObject;
stage.addChild(d);
}
बस इस बात का ध्यान रखें कि ऑपरेटर के as
कोडिंग की जाँच करते समय, दिए गए मूल्य को विशिष्ट प्रकार में बदल दिया जाएगा और फिर उस ऑपरेशन के परिणाम की जाँच की जाएगी यदि गलत नहीं है, तो सावधान रहें जब यह संभव गलत / NaN मानों का उपयोग कर रहा हो:
if(false as Boolean) trace("This will not be executed");
if(false as Boolean != null) trace("But this will be");
नीचे दी गई तालिका में कुछ बुनियादी मूल्य और प्रकार के प्रकार दिखाए गए हैं जिनके प्रकार ऑपरेटर के परिणाम हैं। हरे रंग की कोशिकाओं का मूल्यांकन सही, लाल से गलत और गैरी संकलन / रनटाइम त्रुटियों का कारण होगा।
टाइप किए गए सरणियाँ
दुर्भाग्य से एक्शनस्क्रिप्ट 3 में जेनरिक की अवधारणा नहीं है, इसलिए यह इस प्रकार है कि टाइप किए गए एरे को Array<T>
रूप में परिभाषित करने का कोई तरीका नहीं है। हालांकि एक विशेष वर्ग Vector.<T>
जो वेक्टर को इंस्टेंटेट करते समय एक ठोस वर्ग के संदर्भ में आपको छोड़कर एक समान तरीके से काम करता है। इसका मतलब है कि Vector.<T>
शीर्ष पर सार बनाने का कोई तरीका नहीं है Vector.<T>
प्रकार (जैसे इसे बढ़ाएं और नई कार्यक्षमता जोड़ें) जो एक बहुत बड़ी कमी है।
देखने का एक सरल तरीका यह है कि यद्यपि हर वर्ग जिसे आप स्वचालित रूप से परिभाषित करते हैं, उसका Vector.<NameOfYourClass>
नाम का एक साथी वर्ग था Vector.<NameOfYourClass>
।
उस ने कहा, Vector.<T>
लिए अभी भी बहुत फायदे हैं Vector.<T>
एक पारंपरिक सरणी पर टाइप करें:
-
Vector.<T>
साथ काम करने पर प्रदर्शन में वृद्धि होती हैVector.<T>
बनाम सरण 1 । - यदि आप संग्रह में गैर-टी मान सम्मिलित करने का प्रयास करते हैं तो आपको टाइप-टाईप
TypeError
s प्राप्त होता है। - आईडीई एक
Vector.<T>
अंदर की वस्तुओं के लिए उपयोगी प्रकार की जानकारी देते हैंVector.<T>
उदाहरण
Vector.<T>
बनाने के उदाहरण Vector.<T>
:
var strings:Vector.<String> = new Vector.<String>(); // or
var numbers:Vector.<Number> = new <Number>[];
1 वैक्टर वास्तव में केवल आदिम प्रकार ( String
, int
, uint
, Number
, आदि) के साथ काम करने पर सरणियों पर उल्लेखनीय प्रदर्शन सुधार प्रदान करते हैं।