Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-06-2006, 01:00   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2001
Ort: austria
Beiträge: 202
variablen in klasse und this

hallo,

ich habe hier eine grundsätzliche frage... angenommen, ich habe eine klasse Pos, die einfach eine Position speichert... simples beispiel hier:

mit this:
PHP-Code:
class Pos 
{
    private var 
x;
    private var 
y;
    
    function 
Pos()
    {
        
this.50;
        
this.50;
    }
    
    function 
changePosition(x,y)
    {
        
this.x;
        
this.y;
    }
    
    function 
getPositionString()
    {
        return 
this.x+"|"+this.y;
    }

aufruf:
PHP-Code:
= new Pos();
trace(p.getPositionString());
p.changePosition(50,80);
trace(p.getPositionString()); 
dieses beispiel funktioniert auch und gibt mir beim zweiten trace 50|50 zurück. da ich aber denke, daß die verwendung von this nicht so sauber ist, möchte ich gerne darauf verzichten (oder liege ich da falsch und das ist nur geschmackssache?). jedenfalls hier ein beispiel ohne verwendung von this:

ohne this:
PHP-Code:
class Pos 
{
    private var 
x;
    private var 
y;
    
    function 
Pos()
    {
        
50;
        
50;
    }
    
    function 
changePosition(x,y)
    {
        
x;
        
y;
    }
    
    function 
getPositionString()
    {
        return 
x+"|"+y;
    }

geht natürlich nicht, weil die funktion changePosition zweimal den wert für x und y beinhaltet (gibt wieder 50|50 zurück). daher die fragen:
  • weiterhin this verwenden?
  • die übergabe-werte auf xTemp und yTemp umändern?
  • sollte man gleiche variablennamen prinzipiell vermeiden - manchmal lege ich in einer funktion eine temporäre variable für berechnungen an - durch verwendung von this unterscheide ich zwischen temporären und fixen variablen (haben teilweise den gleichen namen)

danke schon jetzt für eure antworten,

safari
safari ist offline   Mit Zitat antworten
Alt 28-06-2006, 02:07   #2 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.401
man nehme beispiel 1.
nur noch typisierung.

PHP-Code:
class Pos 
{
    private var 
x:Number;
    private var 
y:Number;
    
    function 
Pos()
    {
        
this.50;
        
this.50;
    }
    
    function 
changePosition(x:Number,y:Number):Void
    
{
        
this.x;
        
this.y;
    }
    
    function 
getPositionString():String
    
{
        return 
this.x+"|"+this.y;
    }

edit:
ausser bei changePosition köntest du auch this weglassen.

Geändert von mojave (28-06-2006 um 02:09 Uhr)
mojave ist offline   Mit Zitat antworten
Alt 28-06-2006, 09:21   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2001
Ort: austria
Beiträge: 202
hallo,

danke für die schnelle antwort!

okay, dann ist eh (bis auf typisierung) eh so, wie ich es bisher handhabe - ist halt ein relikt aus AS1 und prototype tagen, daher wollte ich das mal hinterfragen...

safari
safari ist offline   Mit Zitat antworten
Alt 28-06-2006, 10:41   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.388
Ich schreibe nie this, es sei denn, es ist nötig, weil lokale Variablen dazwischen funken.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 28-06-2006, 11:35   #5 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
ähnliches thema hattenwa vor kurzem:
Code:
class Pos 
{
    private var m_nX:Number;
    private var m_nY:Number;
    
    function Pos()
    {
        m_nX = 50;
        m_nY = 50;
    }
    
    function changePosition(nX:Number,nY:Number):Void
    {
        m_nX = nX;
        m_nY = nY;
    }
    
    function getPositionString():String
    {
        return m_nX+"|"+m_nY;
    }
}
gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!
artjom ist offline   Mit Zitat antworten
Alt 28-06-2006, 14:33   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2001
Ort: austria
Beiträge: 202
Zitat:
Zitat von Janoscharlipp
Ich schreibe nie this, es sei denn, es ist nötig, weil lokale Variablen dazwischen funken.
ich möchte nur vermeiden, daß ich einmal this schreibe, und einmal nicht (vielleicht ein wenig zu pedantisch, aber stört mich)... also ist wohl der beste weg über verschiedene variablennamen, oder?
safari ist offline   Mit Zitat antworten
Alt 23-07-2006, 12:34   #7 (permalink)
Entwickler
 
Registriert seit: May 2003
Beiträge: 80
Hier gibt es aus anderen Programmiersprachen auch eine Notationsform, die manche Entwickler benutzen:

Parameter, die in die Klasseninstanz einen Wert schreiben, bekommen den Prefix i_. Parameter, die nur den Rückgabewert der Funktion beeinflussen, den Prefix o_ und Parameter, die beides tun, io_.

So könnte ein (sinnfreies) Beispiel aussehen:

Code:
class MyClass {

   private var _myAttribute:String;
   private var _count:Number;

   public function MyClass(i_myAttribute:String, o_shout:String, io_count:Number):String {
      _myAttribute = i_myAttribute;
      _count = io_count;
      return o_shout+io_count;
   }
}
Es ist - zugegeben - recht tekkimäßig. Der Sinn soll sein, dass der Nutzer der Methode sofort erkennen kann, welchen Einfluss Parameter ausüben. Zudem kann man damit nebenbei das Problem mit Parameternamen und gleichnamigen Klassenattributen lösen.

Geändert von ghost23 (23-07-2006 um 12:36 Uhr)
ghost23 ist offline   Mit Zitat antworten
Alt 23-07-2006, 13:26   #8 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Es gibt allerdings auch so eine Daumenregel, dass eine Funktion entweder einen Wert liefern oder etwas ausführen soll, das einen Nebeneffekt hat. Danach gäbe es also nie eine Funktion, die i und o gleichzeitig benutzt.

http://en.wikipedia.org/wiki/Command-Query_Separation

mfg. h.
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy 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 17:30 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele