Gå til innhold

Anbefalte innlegg

Hei

 

I MSDN for VB6 finner jeg "Mod" operatoren som

"Used to divide two numbers and return only the remainder."

Men dette er ikke det jeg forbinder med en modulær data-type.

I f.eks. ADA så er en modulær data type en som "wrapper" dvs. om jeg har en Byte variabel som er 255 og så plusser på 1 så blir variabelen ikke "overflow" eller 256, den blir 0. Med en modulær data type kan man dermed alldrig få overflow.

Men det er ikke denne egenskapen (overflow) som gjør at jeg vil ha en modulær nå, men jeg har en rekner-variabel som jeg vil skal gå fra 255 til 0 når den regner, og nå må jeg bruke en "If" løsning på dette. Ikke noen big deal, men litt "stygt" synest jeg.

 

Så, noen som hvet om man kan definere egne variabel-typer i VB, f.eks. MyType = Mod 256 '= gir en modulær type "MyType" som går fra 0 til 255

 

Eller?

Lenke til kommentar
Videoannonse
Annonse

mod er en opperator, ikke en datatype,

man kan derimot lage en datatype som oppfyller dine spessifikasjoner

 

Option Explicit
Private mvarValue As Long
Private mvarModValue As Long
Public Property Let ModValue(ByVal vData As Long)
   mvarModValue = vData + 1
End Property

Public Property Get ModValue() As Long
   ModValue = mvarModValue - 1
End Property

Public Property Let Value(ByVal vData As Long)
   If mvarModValue > 0 Then
       mvarValue = vData Mod mvarModValue
   Else
       mvarValue = vData
   End If
End Property

Public Property Get Value() As Long
   Value = mvarValue
End Property

 

Putt dette i en class, og gi den ett navn som fx "varMod"

så kan du skrive

Dim p as new varMod

 

ModValue er max tallet før det går over til 0

denne kan selvfølgelig utvides :yes:

Lenke til kommentar

Du kan selvsagt også sette Remove Integer Overflow Checks på i Advanced Optimizations, ved Compile-tabben i vinduet som kommer opp når man trykker på Options i Make Project dialogboksen. Dette vil resultere at følgende kode utføres uten mukke:

 

Dim Num As Byte, iNum As Integer, lNum As Long

Num = 255 + 1
iNum = 32767 + 1
lNum = 2147483647 + 1

 

Alle variablene vil da inneholde den laveste verdien de kan holde. Merk at prosjektet må være komplimert for at dette skal fungere; i IDE vil Overflow-feilmeldingen kjøres.

Endret av aadnk
Lenke til kommentar
mod er en opperator, ikke en datatype,

man kan derimot lage en datatype som oppfyller dine spessifikasjoner

 

Option Explicit
Private mvarValue As Long
Private mvarModValue As Long
Public Property Let ModValue(ByVal vData As Long)
   mvarModValue = vData + 1
End Property

Public Property Get ModValue() As Long
   ModValue = mvarModValue - 1
End Property

Public Property Let Value(ByVal vData As Long)
   If mvarModValue > 0 Then
       mvarValue = vData Mod mvarModValue
   Else
       mvarValue = vData
   End If
End Property

Public Property Get Value() As Long
   Value = mvarValue
End Property

 

Putt dette i en class, og gi den ett navn som fx "varMod"

så kan du skrive

Dim p as new varMod

 

ModValue er max tallet før det går over til 0

denne kan selvfølgelig utvides :yes:

I VB er mod en operator ikke en datatype, det var det jeg også oppdaga når jeg forsøkte å programmere som jeg er vant til i Ada.

 

Er noob nok i VB til å ikke vite hvordan (eller hvorfor) man gjør en "class", så jeg kan ikke putte koden i en sånn. Det er kanskje grise-lett, hvem vet.

 

Når allt kommer til alt, så trur jeg at jeg beholder min if-sats i steden, den blir faktisk vel så kort og tydelig som å lage class etc. Skal derimot legge dette på minne, for det er nok ikke i alle programmer at det er like smidig med if-varianten.

 

 

Til aadnk:

 

Ah, ganske så smidig variant det ja, men den føles litt "skummel" i dette programmet, da dette isåfall kommer til å gjelde alle variabler, og ikke bare de jeg spesifikt vil skal kunne "wrappe". humm... vet ikke om jeg våger. kan få uventa konsekvenser når vi skal bruke programmet.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...