[VB6] Dollarteken bij string-declaratie?

Pagina: 1
Acties:

  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-08 21:19

Demo

Probleemschietende Tovenaar

Topicstarter
Soms kom ik in gedownloade voorbeeldcodes tegen dat een string gedeclareerd wordt met een dollarteken er achter (bijvoorbeeld tekst$).
Waarom is dit?

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Dat was vroeger de syntax van basic. Een $ erachter betekende dat het een String was. Schijnt tegenwoordig in VB dus niet meer nodig te zijn?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 16:55

johnwoo

3S-GTE

Ieder type heeft een karakter, dit stamt nog uit de oude Basic tijd. Als je gewoon Dim strBlaat As String gebruikt heb je dat niet nodig. Maar je kunt variabelen die zonder type gedeclareerd (of niet gedeclareerd; beide zijn bad practice :P ), door VB als bepaald type laten zien met dat karakter.
$ is string
% is integer
& is long
# is datum (dacht ik)
.. en die voor Single en Double ben ik vergeten omdat ik die vroeger in QB zelden gebruikte, en in VB declareer ik gewoon altijd alles netjes en gebruik dus geen typekarakters.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-08 21:19

Demo

Probleemschietende Tovenaar

Topicstarter
Janoz schreef op 23 september 2002 @ 11:24:
Dat was vroeger de syntax van basic. Een $ erachter betekende dat het een String was. Schijnt tegenwoordig in VB dus niet meer nodig te zijn?
Het is nu niet meer nodig... gewoon Dim [naam] as String...
edit:

Tnx voor de snelle reply :D

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

als je terug wilt in de tijd.. perl heeft het nog wel.. de tekens staan wel voor andere datatypes hoor...

Verwijderd

johnwoo schreef op 23 september 2002 @ 11:26:
Ieder type heeft een karakter, dit stamt nog uit de oude Basic tijd. Als je gewoon Dim strBlaat As String gebruikt heb je dat niet nodig. Maar je kunt variabelen die zonder type gedeclareerd (of niet gedeclareerd; beide zijn bad practice :P ), door VB als bepaald type laten zien met dat karakter.
$ is string
% is integer
& is long
# is datum (dacht ik)
.. en die voor Single en Double ben ik vergeten omdat ik die vroeger in QB zelden gebruikte, en in VB declareer ik gewoon altijd alles netjes en gebruik dus geen typekarakters.
single = !
double = #

:Y)

  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-08 21:19

Demo

Probleemschietende Tovenaar

Topicstarter
Kom ik toch weer met een vraag:
Geldt hetzelfde bij string-manipulatie functies (Str, Left, Mid enzo kom ik ook wel eens tegen als Str$, Left$, Mid$) :?

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


  • whitey-d
  • Registratie: April 2000
  • Laatst online: 08-08 19:24
Ja precies dat vroeg ik me net ook al af, een $ vóór de variabele, inderdaad bij die functies gezien. Misschien dat het iets te maken heeft met conversie net als CStr()?

“Advertising says to people, 'Here's what we've got. Here's what it will do for you. Here's how to get it.'”


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 16:55

johnwoo

3S-GTE

Bij de string functies is het wel aan te raden het $ karakter te gebruiken. Anders geven ze een Variant ( == traag) terug, die dan in je string variabele gecast wordt. Met een $ teken geven ze direct een string terug.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-08 21:19

Demo

Probleemschietende Tovenaar

Topicstarter
johnwoo schreef op 23 september 2002 @ 11:40:
Bij de string functies is het wel aan te raden het $ karakter te gebruiken. Anders geven ze een Variant ( == traag) terug, die dan in je string variabele gecast wordt. Met een $ teken geven ze direct een string terug.
:D Da's informatie waar ik wat aan heb!
Mijn dank is groot :)

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


Verwijderd

Dollar teken is niet nodig, maar vaak wel net iets sneller (wat pas merkbaar is bij duizenden)

[ Voor 0% gewijzigd door Verwijderd op 23-09-2002 11:49 . Reden: typo ]


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

Verwijderd schreef op 23 september 2002 @ 11:49:
Dollar teken is niet nodig, maar vaak wel net iets sneller (wat pas merkbaar is bij duizenden)
Veel optimalizaties begin je sowieso pas te merken bij grote aantallen ;) Maar alle beetjes helpen en dat is het imho geen slechte gewoonte om Left$ te gebruiken ipv Left :)

Exact expert nodig?


  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-08 21:19

Demo

Probleemschietende Tovenaar

Topicstarter
Crazy_D schreef op 23 september 2002 @ 14:42:
[...]

Veel optimalizaties begin je sowieso pas te merken bij grote aantallen ;) Maar alle beetjes helpen en dat is het imho geen slechte gewoonte om Left$ te gebruiken ipv Left :)
Ik heb het net getest met 1.000.000 left/left$ bewerkingen in een loop en bij left$ duurde het 9,7 seconden en bij left 10,5 ofzo.
Dus toch een paar procentjes verschil... :)

[ Voor 0% gewijzigd door Demo op 23-09-2002 14:52 . Reden: typo ]

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Tering jantje! Ik wist dat er verschil in zat, maar dit is heftig.... Check dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Option Explicit

Private Sub Form_Load()
    Dim T As Long
    Dim U As Long
    Dim s As Single
    Dim sT(1) As Single
    Dim bla As String
    
    Const cLoopCount = 15
    Const cTestCount = 1000000
    
    Me.Show
    DoEvents
    
    sT(0) = 0: sT(1) = 0
    
    Me.Print "Testing " & cTestCount & " iterations, repeating " & cLoopCount & " times for better average" & vbCrLf
    Me.Print "Testing ""Left"" function", ":";
    For U = 1 To cLoopCount
        Me.Print ".";
        s = Timer
        For T = 1 To cTestCount
            bla = Left("sdkjhg lakjsdgfoijag oriusg", 5)
        Next T
        sT(0) = sT(0) + Timer - s
    Next U
    Me.Print
    
    Me.Print "Testing ""Left$"" function", ":";
    For U = 1 To cLoopCount
        Me.Print ".";
        s = Timer
        For T = 1 To cTestCount
            bla = Left$("sdkjhg lakjsdgfoijag oriusg", 5)
        Next T
        sT(1) = sT(1) + Timer - s
    Next U
    Me.Print vbCrLf
    
    Me.Print "Average loop time ""Left"" : ", Round(sT(0) / cLoopCount, 5) & " sec/" & cTestCount & " iterations"
    Me.Print "Average loop time ""Left$"" : ", Round(sT(1) / cLoopCount, 5) & " sec/" & cTestCount & " iterations"
    
    Me.Print vbCrLf & "Left:Left$ Ratio = 1:" & Round(sT(0) / sT(1), 2)
End Sub


OK, de code is bagger (snel snel in mekaar geflanst), maar het verschil is duidelijk. Mijn results:

LEFT functie : 0.57917 sec/1.000.000 iteraties
LEFT$ functie: 0.20937 sec/1.000.000 iteraties

Ratio: 1 : 2.77

Dus: Left$ is 2.77 keer sneller!!! (En na een compile met alle optimizations aan zelfs 3.2!!)

Machine: 2Ghz Pentium IV, VB6

Timing is bagger, maar goed zat voor quick results. Dit is (nogmaals) een vluggertje. Voor de newbies: Gewoon hele zooi plakken in vb en runnen die hap...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

johnwoo schreef op 23 september 2002 @ 11:40:
Bij de string functies is het wel aan te raden het $ karakter te gebruiken. Anders geven ze een Variant ( == traag) terug, die dan in je string variabele gecast wordt. Met een $ teken geven ze direct een string terug.


niet als je gewoon je returntype definieert

even mijn vb-kennis weer naar boven halen:
Visual Basic .NET:
1
2
3
Public Function blaat () As String
    blaat = "woei"
End Function

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 31-08 13:50

Apache

amateur software devver

Ik dacht dat voorvoegsels tegenwoordig als standaard gezien werden om ordelijk te coden in vb?

intI
strBleh
lngGrootcijfer

in MSDN vind je vast wel meer over de naamgeving

If it ain't broken it doesn't have enough features


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

dat heeft daar niets mee te maken, das meer iets voor de programmeur zelf (ikzelf heb een hekel aan hungarian codestyles, maar goed :))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

.oisyn schreef op 23 september 2002 @ 23:22:
niet als je gewoon je returntype definieert

even mijn vb-kennis weer naar boven halen:
Visual Basic .NET:
1
2
3
Public Function blaat () As String
    blaat = "woei"
End Function
Klopt maar bij eigen functie werkt die $ ook niet, zit enkel bij een aantal ingebouwde functies Left vs. Left$ dus bv :)

Enne uh 1.000.000 is dan ook best vaak hoor :)

Exact expert nodig?


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

[informatieve spam]
http://vbfibre.digitalric....asp?tbl=tblStrings&rcd=1
[/informatieve spam]

Trouwens, lngLong,strString e.d. waardeer ik het meest persoonlijk..

Edit
offtopic:
om reacties te besparen, er zitten wat (domme) foutjes op de site, ik weet ervan, maar heb weinig tijd om de DB bij te werken :x

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 16:55

johnwoo

3S-GTE

.oisyn schreef op 23 september 2002 @ 23:22:

[...]


niet als je gewoon je returntype definieert

even mijn vb-kennis weer naar boven halen:
Visual Basic .NET:
1
2
3
Public Function blaat () As String
    blaat = "woei"
End Function
Het ging hier om de ingebouwde string manipulatie routines zoals Left$, Right$, Mid$, UCase$ en LCase$ :) Zelf declareer je natuurlijk inderdaad altijd netjes het returntype...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Nie mouwen. Ik zei al dat de code bagger was en vlug vlug in mekaar geflanst. Natuurlijk gebruik ik nette coding conventions. Ik moet er zelfs binnen het bedrijf waar ik werk anderen op wijzen dat ze het netjes doen... Laat 't ze maar niet zien ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-08 21:19

Demo

Probleemschietende Tovenaar

Topicstarter
41.6C.6D.61.72 schreef op 24 september 2002 @ 08:14:
[informatieve spam]
http://vbfibre.digitalric....asp?tbl=tblStrings&rcd=1
[/informatieve spam]

Trouwens, lngLong,strString e.d. waardeer ik het meest persoonlijk..

Edit
offtopic:
om reacties te besparen, er zitten wat (domme) foutjes op de site, ik weet ervan, maar heb weinig tijd om de DB bij te werken :x
Zeer nuttige spam!
Heb met veel plezier (en verbazing) die dingen zitten lezen...
Sommige (simpele) aanpassingen geven een enorm verschil in performance als ik het zo lees :)

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done

Pagina: 1