Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Foxpro Life
Message
De
12/04/2017 09:01:04
Mike Yearwood
Toronto, Ontario, Canada
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Contrats & ententes
Titre:
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows 10
Network:
Novell 6.x
Database:
Visual FoxPro
Application:
Desktop
Divers
Thread ID:
01649781
Message ID:
01650068
Vues:
76
>>>When I write the code I will never have the problem of using the m.dot or not using the m.dot. My coding convention uses the above rules. However, when we use classes that the community has written now we could have potential naming conflicts between variables and fields. So having the compiler enforce the rules is preferable.
>>>
>>
>>Just want to point out that the Hungarian naming convention isn't infallible. While it's a bit of a stretch, it's certainly possible to have a field name lOrange and a variable named loRange. I haven't gone hunting for other examples, since one makes the point, but I'll bet there are others that are plausible.
>>
>>In my view, VFP developers should always use mdot where there's any chance of ambiguity. That's even more important for tool writers since they have no control over the naming of fields in tables their users create.
>>
>>Tamar
>
>To avoid ambiguitiy as much as possible I tend to use objects instead of simple variables. An object with the same name as a field can be used without m. as long as you reference any of the object members. It also provides you a level for extension methods that can be very useful in daily coding life.
>
>CREATE TABLE Test (loTest C(10))
>INSERT INTO Test Values ("Field")
>LOCAL loTest AS Label
>loTest = NEWOBJECT("Label")
>loTest.Caption = "Label text"
>MESSAGEBOX(loTest)
>MESSAGEBOX(loTest.Caption)
>
>Therefore I use classes for repetitive work like for counters or strings:
>
>* Instead of 
>LOCAL lnCounter
>lnCounter = 0
>lnCounter = lnCounter + 1
>Messagebox(TRANSFORM(lnCounter))
>* it is better to do
>LOCAL loCounter AS Counter OF Utils.vcx
>loCounter = NEWOBJECT("Counter","Utils.vcx")
>loCounter.DoAdd()
>Messagebox(loCounter.Value_toString)
>
>
>And with strings for example:
>
>LOCAL loString AS StringBuilder OF Utils.vcx
>loString = NEWOBJECT("StringBuilder","Utils.vcx")
>loString.DoAddNewline("Hello")
>loString.DoAdd(" World")
>Messagebox(loString.Value)
>loString.Replace(" ",CHR(13))
>Messagebox(loString.Value)
>Messagebox(loString.Lines.Count)
>etc
>
Hi Christian

That works, but objects and properties are horribly slow compared to memvars - like more than 5 times slower. If you add access and assign methods then the performance drops even farther.

I'm also always telling people that arbitrarily grouping different things in a vcx is wrong. The point of programming is to make encapsulated little pieces which operate at runtime as separate entities. So why then aggregate them at design time? Instead of counter in utils.vcx, it would be better for a development team to have counter in counter.vcx. Then one developer could work on counter while another works on some other class. This aggregating of things, whether classes or udfs is really completely unnecessary and actually slows down development - because you must use source control or have developers waiting on each other.
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform