Sun Microsystems
Termékek
 
Támogatás
 
 

Előző Előző     Tartalom     Tárgymutató     Következő Következő
Fejezet 3

A StarOffice Basic futásidejű programkönyvtára

A következő részekben a futásidejű programkönyvtár főbb függvényeiről olvashatunk.

Konverziós függvények

Sokszor előfordul olyan helyzet, hogy az egyik típusú változót át kell alakítani egy másik típusúvá.

Implicit és explicit típuskonverzió

Az egyik változó másik típusúvá alakításának legegyszerűbb módja, a hozzárendelés.

Dim A As String

Dim B As Integer



B = 101 

A = B

Ebben a példában az A változó egy karakterlánc, a B változó egész szám. A StarOffice Basic a B változót átalakítja karakterlánccá, amikor hozzárendeli az értékét az A változóhoz. Ez az átalakítás sokkal bonyolultabb, mint amilyennek látszik: a B egész szám megmarad a memóriában egy kétbájtos számként. Viszont az A egy karakterlánc, így a számítógép minden karakterét (minden számát) egy vagy két bájton tárolja. Ezért, mielőtt a B változót az A változóba lehetne másolni, a B változót konvertálni kell az A változó belső formátumára.

A legtöbb programozási nyelvtől eltérően a Basic a típuskonverziót automatikusan elvégzi. Viszont ennek végzetes következményei lehetnek. Ha jobban megvizsgáljuk a következő kódot,

Dim A As String

Dim B As Integer

Dim C As Integer



B = 1 

C = 1

A = B + C

amely az első pillantásra egyértelműnek tűnik, végül egy csapdának bizonyul. A Basic-értelmező először kiszámítja az összeadás eredményét, majd ezt konvertálja karakterlánccá, ami így a 2 karakterláncot adja eredményül.

Viszont, ha a Basic-értelmező először konvertálja a B és a C változót karakterlánccá, és utána hajtja végre a pluszjel-operátort, akkor az eredmény a 11 karakterlánc lesz.

Ugyanez vonatkozik a variant típusú változókra is:

Dim A 

Dim B 

Dim C 



B = 1 

C = "1"

A = B + C

Mivel a variant típusú változók számokat és karakterláncokat is tartalmazhatnak, nem lehet tudni, hogy az A változóhoz a 2-es számot vagy a 11 karakterláncot kell hozzárendelni.

Az implicit típuskonverziók miatt bekövetkező hibák csak a gondos programozással küszöbölhetők ki, például, ha nem használunk varint típust.

Az implicit típuskonverziók miatt bekövetkező egyéb hibák elkerülésére a StarOffice Basic számos típuskonverziós függvényt kínál, amelyekkel megadhatjuk, mikor kell konvertálni egy művelet adattípusait:

  • CStr(változó) - bármilyen adattípust karakterlánccá konvertál.

  • CInt(változó) - bármilyen adattípust egész számmá konvertál.

  • CLng(változó) - bármilyen adattípust hosszú egész számmá konvertál.

  • CSng(változó) - bármilyen adattípust rövid egész számmá konvertál.

  • CDbl(változó) - bármilyen adattípust dupla pontosságú számmá konvertál.

  • CBool(változó) - bármilyen adattípust logikai értékké konvertál.

  • CDate(változó) - bármilyen adattípust dátummá konvertál.

Ezekkel a konvertáló függvényekkel megadhatjuk, hogyan hajtsa végre aStarOffice Basic a típuskonverziós műveleteket:

Dim A As String

Dim B As Integer

Dim C As Integer



B = 1 

C = 1



A = CStr(B + C)      ' Először B és C összeadása, majd

                     ' konvertálása (ami a 2-es számot eredményezi)

A = CStr(B) + CStr(C)   ' B és C konvertálása karakterlánccá, majd

                        ' összevonása (a "11" karakterláncot eredményezi)

A példában, az első összeadásnál a StarOffice Basic először összeadja a két egész számot, majd karakterlánccá konvertálja az eredményt. A program az A változóhoz hozzárendeli a 2 karakterláncot. A második változatnál a program először konvertálja az egész számokat karakterláncokká, majd ezeket összevonja az értékadásnál. Így az A változóhoz hozzárendeli a 11 karakterláncot.

A CSng és a CDbl numerikus konvertáló függvények tizedes törteket is elfogadnak paraméterként. Tizedesjelként az adott területi beállítás szerinti jelet kell használni. És ennek megfelelően a CStr metódusok is az aktuális területi beállítást használják számok, dátumok és idők formázásánál.

A Val függvény különbözik a Csng, Cdbl és Cstr metódustól. Karakterláncot konvertál számmá, de tizedesjelként mindig pontot vár.

Dim A As String

Dim B As Double



A = "2.22"

B = Val(A)      ' Helyesen konvertálódik a területi

                ' beállításoktól függetlenül

Előző Előző     Tartalom     Tárgymutató     Következő Következő