Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-12-2005, 22:39   #1 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
Strikte Typisierung: Verständnisfrage

Hallo,

ich bin bisher eigentlich davon ausgegangen, dass der entscheidende Vorteil der strikten Typisierung, abgesehen von Codehinweisen, darin begründet ist, dass bspws. sowas in einer Compilerfehlermeldung endet:
PHP-Code:
var a:String ="a";; 
3
Weil man eben einer String Variablen keine Number zuweisen soll. Sowas tut man einfach nicht

Welchen Sinn macht es angesichts dessen, dass a++ die Var von String in Number umwandelt?
PHP-Code:
var a:String "a"
trace(a+" : "+typeof(a));
a++;
trace(a+" : "+typeof(a)); 
macht keinen Fehler, die Ausgabe ist:
Code:
a : string
NaN : number

is it a bug or is it a feature?
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens
wanst ist offline   Mit Zitat antworten
Alt 09-12-2005, 23:12   #2 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
i think its a feature.

du hast doch die beschwerde 'NAN'...was noch mehr ?

PHP-Code:
var a:String "a";
trace(a+" : "+typeof(a));
a++;
trace(a+" : "+typeof(a));  
trace(a+5
'NAN'
warrantmaster ist offline   Mit Zitat antworten
Alt 10-12-2005, 02:07   #3 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
Naja, aber das ist ja die Ausgabe vom Trace-Befehl, mache ich das nicht, merke ich es auch nicht. Das würde ich jetzt nicht als Beschwerde bezeichnen. Und wenn das noch nicht reicht:
PHP-Code:
var a:Boolean true
trace(a+" : "+typeof(a));
a++;
trace(a+" : "+typeof(a));
trace(a+5); 
Ausgabe:
Code:
true : boolean
2 : number
7 : number
Da ist nix mehr mit Beschwerde ... das kann ich auch ohne strikt haben ...
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens
wanst ist offline   Mit Zitat antworten
Alt 10-12-2005, 12:08   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Sieht für mich wie ein Bug aus.
Dass da noch nie jemand drauf gekommen ist?
Dolles Ding,
mfg. r
bokel ist offline   Mit Zitat antworten
Alt 10-12-2005, 12:50   #5 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
machenwa das in ner klasse und veröffendlichen als AS2, also so:
PHP-Code:
class CTest {
    public function 
CTest()
    {
        var 
a:String "a";
        
trace(a+" : "+typeof(a));
        
a++; //fehler hier
        
trace(a+" : "+typeof(a));  
    }

bekommenwa nen kompilerfehler (mtasc): typerror String should be Number

denn:
Zitat:
Dateien, die mit ActionScript 1 veröffentlicht werden, akzeptieren keine strikte Typisierung beim Kompilieren. Daher wird kein Kompilierfehler erzeugt, wenn einer Variablen, die Sie strikt typisiert haben, der falsche Datentyp zugewiesen wird.

var x:String = "abc"
x = 12 ; // kein Fehler in ActionScript 1, Fehler durch nicht übereinstimmende Eingaben in ActionScript 2

Der Grund hierfür ist, dass Flash eine Anweisung wie beispielsweise var x:String = "abc" beim Veröffentlichen einer Datei für ActionScript 1 als Schrägstrichsyntax statt als strikte Typisierung interpretiert. (ActionScript 2.0 unterstützt keine Schrägstrichsyntax.) Dieses Verhalten kann dazu führen, dass der Compiler durch Objekte, die einer Variable des falschen Typs zugewiesen sind, ohne Meldung illegale Methodenaufrufe und undefinierte Verweise auf Eigenschaften durchführt.
ich z.b umgehe einfach das problem mit notationen wie nMeineNumberVariable, oder bMeineBoolVariable.
das mit dem Boolean zu Number ist aber einleuchtend. Flash versucht scheinbar bei operatoren in den richtigen typ zu konventieren. bei der inkrementierung wandelt flash die variable zwangsläufig in number. hat es einen wert der kein number ist wird NAN rausgespuckt. aber der typ number besteht.
sowas klappt demzufolge auch:
PHP-Code:
        var a:String "1";
        
trace(a+" : "+typeof(a));//1:string
        
a++;
        
trace(a+" : "+typeof(a));//2:number 

gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!

Geändert von artjom (10-12-2005 um 12:56 Uhr)
artjom ist offline   Mit Zitat antworten
Alt 10-12-2005, 13:52   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Genau, mit MTASC bekommst du einen Fehler, was ja auch richtig ist, aber nicht mit MMC.

mfg. r
bokel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele