Re: Übersetzung und Bedeutung von "Out Of Scope"
- From: "Herfried K. Wagner [MVP]" <hirf-spam-me-here@xxxxxx>
- Date: Sat, 21 Oct 2006 15:15:46 +0200
Hallo Harald!
"Harald M. Genauck" <hmg.ng.entfernen@xxxxxxxxxx> schrieb:
Zum einen käme ich darum im Normalfall auch nie auf die Idee, einer
Modulvariablen und einer Prozedurvariablen den gleichen Namen zu geben.
Du kommst nicht auf die Idee, weil Du dann ein Problem hättest, wenn
auch ein leicht lösbares ;-)
Sagen wir es so: Ich käme nicht *mehr* auf die Idee, da ich die damit verbundenen Probleme zur Genüge kenne und keinen Grund sehe, ohne Not Probleme zu schaffen, egal wie leicht sie zu lösen wären.
Welche Probleme denn?
Bei mir ist folgender Code (VB.NET) üblich:
\\\
Private m_Name As String
Private m_Age As Integer
Public Sub New(ByVal Name As String, ByVal Age As Integer)
Me.Name = Name
Me.Age = Age
End Sub
Public Property Name() As String
...
End Property
Public Property Age() As Integer
...
End Property
///
Class Person 'VB.Net-code
Private Name As String
Private Age As Integer
Sub New (Name As String, Age As Integer)
Me.Name = Name
Me.Age = Age
End Sub
1.) Das "Me." kannst Du auch weglassen. Sowohl funktional als auch bezüglich der Lesbarkeit und des Verständnisses bringt es gar nichts. Im Gegenteil: Üblicherweise würde ein Zugriff über die Me.-Qualifizierung bedeuten, dass man auf eine Methode zugreifen will.
Im obenstehenden Beispiel kann man es eben nicht weglassen, da es zur Unterscheidung zwischen Methodenparametern und privaten Variablen (oder Eigenschaften, wie in meinem Beispiel) notwendig ist.
2.) Ich gehe mal davon aus, dass die zugehörigen Eigeschaftenmethoden dann auch sinnvollerweise "Name" und "Age" heißen sollten, oder? Allerdings würde das dann nicht funktionieren, wenn schon Variablen die gleichen Namen haben, egal ob sie privat oder öffentlich sind. Der Compiler würde schlicht streiken, da er nicht wüsste, ob mit Me.Name die private Variable oder die Eigenschaftenmethode gemeint ist. Und damit hättest Du auch ein Problem, aber ein nicht lösbares.
Na, deshalb kann man ja die private Variable als Implementierungsdetail auch z.B. als 'm_Name' benennen.
3.) Verbreitet und praktisch und in der zumindest mir bekannten allgemeinen Literatur zur Programmierung unter VB und VB.NET ist dagegen, private Variablen mit einem Prefix zu versehen, um solche Probleme garnicht erst aufkommen zu lassen:
Private mName As String
Private mAge As Integer
Sub New (Name As String, Age As Integer)
mName = Name
mAge = Age
End Sub
Dem Verständnis und der Lesbarkeit täte das keinen Abbruch - im Gegenteil. Und die Eigenschaftenmethode zum Auslesen des Namens brächte auch keinerlei Komplikationen mit sich:
Public ReadOnly Property Name() As String
Get
Return mName
End Get
End Property
Da ich grundsätzlich immer über 'Get'/'Set' auf Eigenschaften zugreife und nicht auf die privaten Variablen, um etwaige Validierung nicht auszuhebeln und den Code leichter erweiterbar zu halten, muss ich bei der Zuweisung 'Me.Age = Age' zwischen der Eigenschaft und dem Paramternamen unterscheiden. Die private Variable zum Speichern des Eigenschaftenwertes habe ich durch die Eigenschaft weggekapselt -- sie interessiert mich ausserhalb der Eigenschaftenimplementierung nicht.
Zum anderen ist Sichtbarkeit und Gültigkeit doch dasselbe:
Klares Nope. Das wird in allgemeiner Literatur zur Programmierung
sinnvollerweise unterschieden Und auch in VB-6 gibt es Situationen,
in den eine gültige Variable 'verdeckt', d.h unsichtbar wird und durch
explizitere, vollqualifizierte Syntax wieder sichtbar gemacht werden kann.
Das Modulscope/Procedurescope-Bsp ist nicht das einzige. Und nein, das
ist auch nicht rein akademisch.
Doch, es ist akademisch. Zum einen ist "allgemeine Literatur zur Programmierung" nicht immer im Detail relevant für VB6. Zum anderen wüsste ich keine Situation in VB6, in der es sinnvoll wäre, sich das Problem "verdeckter" Variablen überhaupt erst zu schaffen.
Wie würdest du zwischen Methodenparameter und Eigenschaft unterscheiden?
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
.
- Follow-Ups:
- Re: Übersetzung und Bedeutung von "Out Of Scope"
- From: Harald M. Genauck
- Re: Übersetzung und Bedeutung von "Out Of Scope"
- References:
- Übersetzung und Bedeutung von "Out Of Scope"
- From: Karsten Schlemm
- Re: Übersetzung und Bedeutung von "Out Of Scope"
- From: Alexander Mueller
- Re: Übersetzung und Bedeutung von "Out Of Scope"
- From: Harald M. Genauck
- Re: Übersetzung und Bedeutung von "Out Of Scope"
- From: Harald M. Genauck
- Übersetzung und Bedeutung von "Out Of Scope"
- Prev by Date: Re: Übersetzung und Bedeutung von "Out Of Scope"
- Next by Date: Re: MSChart alle angezeigten Datenpunktwerte entfernen ?
- Previous by thread: Re: Übersetzung und Bedeutung von "Out Of Scope"
- Next by thread: Re: Übersetzung und Bedeutung von "Out Of Scope"
- Index(es):
Relevant Pages
|