CoolBasic V3: Esittely

CoolBasiciin yleisesti liittyvä keskustelu.
Locked
User avatar
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: CoolBasic? kuollut? eheei ole...

Post by Dande » Thu May 21, 2009 5:34 pm

Minusta tuossa lohkotuksessa olisi ideaa lähinnä, jos se toimisi suunnilleen näin (eli samaten kuin C++:ssa):

Code: Select all

Dim k As Integer =1
If 1
  Dim a As Integer =5
  Dim k As Integer =7 //Luo paikallisen k-muuttujan, joka peittää ulomman k-muuttujan näkyvyyden
  If k=7
    //toteutuu, koska tässä lohkossa näkyy myöhemmin määritelty k-muuttuja
  EndIf
EndIf
//a-muuttuja lakkaa olemasta, ja samaten toinen k-muuttuja
If k=1
  //toteutuu, koska tässä näkyy taas ylempi k-muuttuja
EndIf

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: CoolBasic? kuollut? eheei ole...

Post by Ruuttu » Thu May 21, 2009 5:41 pm

Ei kai uudessa CoolBasicissa ole pakko erikseen eritellä jokaista hemmetin muuttujaa, jota aion käyttää? Ja kai on mahdollista pistää muuttuja näkymään kaikkialla?

Kovin pitkälle en tuota Zeron blogimerkintää tajunnut, mutta jotain tuollaista tuli ensimmäisenä mieleen.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: CoolBasic? kuollut? eheei ole...

Post by Jani » Thu May 21, 2009 6:01 pm

Ruuttu wrote:Ei kai uudessa CoolBasicissa ole pakko erikseen eritellä jokaista hemmetin muuttujaa, jota aion käyttää? Ja kai on mahdollista pistää muuttuja näkymään kaikkialla?

Kovin pitkälle en tuota Zeron blogimerkintää tajunnut, mutta jotain tuollaista tuli ensimmäisenä mieleen.
1. Tietysti, pitäähän ne aina muulloinkin.
2. Avaa manuaali ja hae avainsana "Global".

EDIT: Hei Tacu... Oletko koskaan ohjelmoinut muita kieliä kuin CB (tai CB:tä FVD päällä)?
Last edited by Jani on Thu May 21, 2009 6:54 pm, edited 1 time in total.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

Tacu

Re: CoolBasic? kuollut? eheei ole...

Post by Tacu » Thu May 21, 2009 6:24 pm

Jani wrote:
Ruuttu wrote:Ei kai uudessa CoolBasicissa ole pakko erikseen eritellä jokaista hemmetin muuttujaa, jota aion käyttää?
1. Tietysti, pitäähän ne aina muulloinkin.
Ei pidä.

User avatar
Ozcar
Advanced Member
Posts: 439
Joined: Mon Aug 27, 2007 8:43 pm
Location: Helsinki

Re: CoolBasic? kuollut? eheei ole...

Post by Ozcar » Thu May 21, 2009 7:51 pm

Eipä aleta leikkimään, Jani, CB:ssähän ei oletuksena tarvitse eritellä muuttujia niin millään tavalla. Toki FVD päällä tai muissa kielissä tämä on olennainen osa koodausprojuktia, mutta jos pitäydytään asiassa ja CB:ssä niin ainakaan nykyisessähän ei moista tarvitse tehdä.
Ratkaisit juuri universaaliongelman! Hienoa, ota keksi.

Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.

User avatar
Zero
Lead Developer
Lead Developer
Posts: 725
Joined: Sun Aug 26, 2007 2:30 pm
Location: Helsinki, Finland
Contact:

Re: CoolBasic? kuollut? eheei ole...

Post by Zero » Thu May 21, 2009 10:31 pm

Mukavaa, että tästä syntyi näin paljon keskustelua :)

V3:ssa jokainen muuttuja pitää määritellä ennen käyttöä. Uskokaa pois, se parantaa teidän koodin laatua.

Monesti väliaikaisia muuttujia tarvitaan lähinnä For-loopissa, joten tähän on V3:ssa kivuton tapa:

Code: Select all

For i As Integer = 1 To 10
    // koodia...
Next
Tämä voi sitten mennä joiltain yli hilseen:
Lokaali muuttuja ei voi peittää toista lokaalia muuttujaa vaikka olisikin eri scopessa, koska silloin sinulla on kaksi samannimistä muuttujaa, jotka periaatteessa kuuluvat samaan metodiin, mutta joihin kumpaankin periaatteessa pystyisi viittaamaan scopen sisältä. Tämä on loogisesti väärin. Tässä tapauksessa scopen ulkopuoliseen muuttujaan ei ole mitään mahdollisuutta päästä käsiksi scopen sisältä, mikä on vastoin periaatteita oliokielien viittaussäännöissä (jotka ovat hyvin tiukat). Lokaaleille muuttujillehan ei erikseen voi määrittää saatavuustasoa Private/Public/Protected. Metodien avulla ei myöskään voida qualifioida, koska kaikki muuttujat niiden sisällä ovat lokaaleita ja aina metodilleen "omistautuneita" - niiden tila ei riipu itse oliosta vaan metodin suoritettavan koodin tilasta.

Code: Select all

If 1
    Dim i As Integer
EndIf

If 2
    Dim i As Integer
EndIf
Tässä esimerkissä on edelleen kaksi samannimistä muuttujaa, mutta ne eivät ole toistensa ylemmillä tasoilla, joten niihin viittaaminen toisistaan käsin ei pitäisikään olla loogisesti mahdollista.

Näin tämä toimii myös VB.NET:ssä.
Ruuttu wrote:Ja kai on mahdollista pistää muuttuja näkymään kaikkialla?
Oliokielissä ei juuri ole sellaista kuin "globaali muuttuja". Jos nyt välttämättä halutaan sellaisia kuitenkin tehdä, luodaan uusi luokka, jossa ne on määritelty Public Shared. Silloin niihin voidaan viitata ilman instantiointia.
CoolBasic henkilökuntaa
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic

http://www.coolbasic.com/blog

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: CoolBasic? kuollut? eheei ole...

Post by Jani » Fri May 22, 2009 6:10 am

Hyvin ymmärtää.

Olisi vielä eräs pyyntö: ReadIsInt/Byte/Short/Float
Eli voisi katsoa, minkälaista tietoa on tulossa varmistaakseen että se menee oikein.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: CoolBasic? kuollut? eheei ole...

Post by otto90x » Fri May 22, 2009 10:07 am

Jani wrote:Hyvin ymmärtää.

Olisi vielä eräs pyyntö: ReadIsInt/Byte/Short/Float
Eli voisi katsoa, minkälaista tietoa on tulossa varmistaakseen että se menee oikein.
Tämänhän voi toteuttaa jo nykyisellä CoolBasicilla, pistää vaan tiedoston alkuun jonkinlaisen kartan/listan (vähemmän muistia/tilaa vievä tapa), jolla merkataan mitä tietotyyppiä kukin tieto on tai kirjoittaa kunkin tiedon eteen yhden tavun, joka kertoo mitä tyyppiä tuleva arvo on. Tiedoston tietojen tietotyyppejähän ei yleensä tallenneta tiedostoihin, joten tämäkin tapa toimisi vain tiedostoihin joihin tätä menetelmää on käytetty kirjoitusvaiheessa. Tietojen tietotyypin päättely kirjoitetuista tavuista ilman minkäänlaista vinkkiä on hyvin vaikeaa ja epätarkkaa.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: CoolBasic? kuollut? eheei ole...

Post by Jani » Fri May 22, 2009 4:38 pm

otto90x wrote:
Jani wrote:Hyvin ymmärtää.

Olisi vielä eräs pyyntö: ReadIsInt/Byte/Short/Float
Eli voisi katsoa, minkälaista tietoa on tulossa varmistaakseen että se menee oikein.
Tämänhän voi toteuttaa jo nykyisellä CoolBasicilla, pistää vaan tiedoston alkuun jonkinlaisen kartan/listan (vähemmän muistia/tilaa vievä tapa), jolla merkataan mitä tietotyyppiä kukin tieto on tai kirjoittaa kunkin tiedon eteen yhden tavun, joka kertoo mitä tyyppiä tuleva arvo on. Tiedoston tietojen tietotyyppejähän ei yleensä tallenneta tiedostoihin, joten tämäkin tapa toimisi vain tiedostoihin joihin tätä menetelmää on käytetty kirjoitusvaiheessa. Tietojen tietotyypin päättely kirjoitetuista tavuista ilman minkäänlaista vinkkiä on hyvin vaikeaa ja epätarkkaa.
Juu, olinkin jo tehnyt tuollain, että laitan tavun jokaisen arvon eteen. Se vaan ei ehkä ole paras tapa...
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: CoolBasic? kuollut? eheei ole...

Post by Ruuttu » Fri May 22, 2009 4:56 pm

Harmillista, se taitanee kuitenkin olla suurinpiirtein se ainoa. Jos kyse on ohjelman omista tiedostoista, niin kannattaisi luoda tiettyä kaavaa noudattava "syntaksi", jotta on jo etukäteen selvää että "näin ja näin monen bitin ja tuon arvon jälkeen tulee tollasia arvoja".

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: CoolBasic? kuollut? eheei ole...

Post by Jani » Fri May 22, 2009 8:06 pm

Ruuttu wrote:Harmillista, se taitanee kuitenkin olla suurinpiirtein se ainoa. Jos kyse on ohjelman omista tiedostoista, niin kannattaisi luoda tiettyä kaavaa noudattava "syntaksi", jotta on jo etukäteen selvää että "näin ja näin monen bitin ja tuon arvon jälkeen tulee tollasia arvoja".
Mjoo. Tää nyt vaan on et ne menee randomiin järjestykseen.
Tein nyt tuollasen FileTypeMap-systeemin joka luo merkkijonon sisällön mukaan (esim. "1132444" ("Int Int Short Float Byte Byte Byte")).
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: CoolBasic? kuollut? eheei ole...

Post by JATothrim » Fri May 22, 2009 8:43 pm

Hips. CB V3 on scopet :3 Vaan nyt kun on esitelty vaan "Dim i As integer" niin toimiiko myös näin, vai sekoaako kääntäjäsi: Tovon ettei, sillä muuten "scope" olisi aika vaisu lisä tulevaan CB V3:een. ;)

Code: Select all

class luookka_A
    ...some stuff in here...
endclass

class luookka_B
    ...and even more stuff in here...
endclass

if 1=1
    Dim obj As luookka_A
endif

if 10=10
    Dim obj As luookka_B
endif
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: CoolBasic? kuollut? eheei ole...

Post by esa94 » Sat May 23, 2009 6:18 pm

JATothrim wrote:Hips. CB V3 on scopet :3 Vaan nyt kun on esitelty vaan "Dim i As integer" niin toimiiko myös näin, vai sekoaako kääntäjäsi: Tovon ettei, sillä muuten "scope" olisi aika vaisu lisä tulevaan CB V3:een. ;)

Code: Select all

class luookka_A
    ...some stuff in here...
endclass

class luookka_B
    ...and even more stuff in here...
endclass

if 1=1
    Dim obj As luookka_A
endif

if 10=10
    Dim obj As luookka_B
endif
Luokkien luulisi ainakin olevan kohtuullisen globaaleja...

User avatar
valscion
Moderator
Moderator
Posts: 1592
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: CoolBasic? kuollut? eheei ole...

Post by valscion » Sat May 23, 2009 7:11 pm

esa94 wrote:
JATothrim wrote:Hips. CB V3 on scopet :3 Vaan nyt kun on esitelty vaan "Dim i As integer" niin toimiiko myös näin, vai sekoaako kääntäjäsi: Tovon ettei, sillä muuten "scope" olisi aika vaisu lisä tulevaan CB V3:een. ;)

Code: Select all

class luookka_A
    ...some stuff in here...
endclass

class luookka_B
    ...and even more stuff in here...
endclass

if 1=1
    Dim obj As luookka_A
endif

if 10=10
    Dim obj As luookka_B
endif
Luokkien luulisi ainakin olevan kohtuullisen globaaleja...
Niin, mutta tuo että jos If-lohkossa määritellään "obj" muuttujaan luokan "luookka_A" ilmentymä, niin etteikö se olisi tuossa alemmassa If-lohkossa enää näkyvissä? Mielestäni muutenkin If-lohkojen näkyvyyden rajoittaminen (If-lohkossa määritellyt muuttujat eivät näy ulos) olisi aika karu ratkaisu, varsinkin tuon JATothrimin esmerkin takia
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: CoolBasic? kuollut? eheei ole...

Post by JATothrim » Sat May 23, 2009 7:29 pm

Omasta mielestäni tuo olisi hyvin kätevää, sillä "duplicate indentifier" virheet vähentyvät roimasti. Ja mikä parasta, ohjelmaan ei tarvitse enää kirjoittaa x1, x2, x3, xn.. jne niin paljon. Jos haluaa että jokin muutuja näkyy näkyy ulkona if lohkosta, niin määrittelee sen ulkona. Loogista. En näe tässä suurta vaivaa, sillä tulevassa CB:ssä kaikki muuttujat on muutenkin määriteltävä jossain.
EDIT:

Zero taisi jo mainita Shared määritteen, miten tämä oikeastaan toimii? heittääkö se muuttujan näkymään aivan kaikkialla ohjelmassa? Vai onko globaalius "rajattu" jollain tapaa? Siis:

Code: Select all

class luookka_A
	Function  kasvata(i = 0 As integer)
		if i > 10 then return
		obj.kasvata(i+1)	//ok, obj on määritely globaaliksi
	Endfunction
endclass

class luookka_B
	Function doit()
		if 1=1
			Dim obj As Shared luookka_A
		endif
		obj.kasvata()	//ok, obj on määritely globaaliksi
		if 10=10
    			Dim obj As luookka_B    //error, obj on jo määritelty.
		endif
		obj.kasvata()	//ok, obj on määritely globaaliksi
	Endfunction
endclass
Koodin kommenentit olisivat oikein?[/edit]
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: CoolBasic? kuollut? eheei ole...

Post by Jani » Sat May 23, 2009 8:00 pm

JATothrim wrote:Omasta mielestäni tuo olisi hyvin kätevää, sillä "duplicate indentifier" virheet vähentyvät roimasti. Ja mikä parasta, ohjelmaan ei tarvitse enää kirjoittaa x1, x2, x3, xn.. jne niin paljon. Jos haluaa että jokin muutuja näkyy näkyy ulkona if lohkosta, niin määrittelee sen ulkona. Loogista. En näe tässä suurta vaivaa, sillä tulevassa CB:ssä kaikki muuttujat on muutenkin määriteltävä jossain.
EDIT:

Zero taisi jo mainita Shared määritteen, miten tämä oikeastaan toimii? heittääkö se muuttujan näkymään aivan kaikkialla ohjelmassa? Vai onko globaalius "rajattu" jollain tapaa? Siis:

Code: Select all

class luookka_A
	Function  kasvata(i = 0 As integer)
		if i > 10 then return
		obj.kasvata(i+1)	//ok, obj on määritely globaaliksi
	Endfunction
endclass

class luookka_B
	Function doit()
		if 1=1
			Dim obj As Shared luookka_A
		endif
		obj.kasvata()	//ok, obj on määritely globaaliksi
		if 10=10
    			Dim obj As luookka_B    //error, obj on jo määritelty.
		endif
		obj.kasvata()	//ok, obj on määritely globaaliksi
	Endfunction
endclass
Koodin kommenentit olisivat oikein?[/edit]
No siis... luookka_B:ssä obj-muuttujan alustukset on (ehkä) oikein (ainakin muulta puolelta kui Shared). Mutta obj.kasvata() oli si väärin, koska obj:tä ei olisi määritetty.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
valscion
Moderator
Moderator
Posts: 1592
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: CoolBasic? kuollut? eheei ole...

Post by valscion » Sat May 23, 2009 8:29 pm

JATothrim wrote:
EDIT:

Zero taisi jo mainita Shared määritteen, miten tämä oikeastaan toimii? heittääkö se muuttujan näkymään aivan kaikkialla ohjelmassa? Vai onko globaalius "rajattu" jollain tapaa? Siis:

Code: Select all

class luookka_A
	Function  kasvata(i = 0 As integer)
		if i > 10 then return
		obj.kasvata(i+1)	//ok, obj on määritely globaaliksi
	Endfunction
endclass

class luookka_B
	Function doit()
		if 1=1
			Dim obj As Shared luookka_A
		endif
		obj.kasvata()	//ok, obj on määritely globaaliksi
		if 10=10
    			Dim obj As luookka_B    //error, obj on jo määritelty.
		endif
		obj.kasvata()	//ok, obj on määritely globaaliksi
	Endfunction
endclass
[/edit]
Eikös tuossa ylimmässä luokassa "luookka_A" funktiossa "kasvata", niin kun olet kirjoittanut "obj.kasvata(i+1) //ok, obj on määritely globaaliksi", eikö sen pitäisi olla "Me.kasvata(i+1)"? Näin ainakin itse olisin ymmärtäväni.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: CoolBasic? kuollut? eheei ole...

Post by JATothrim » Sat May 23, 2009 9:52 pm

Lukekaa koodi alhaalta ylöspäin, niin sen idea on vähän selvempi. Eli, luookka_B:n doit() funktion if lohkossa määritellään globaali luookka_A tyyppinen muuttuja obj. Kysyn siis näkyykö tämä obj muuttuja sitten aivan missä vain? jopa luokassa luookka_A:ssa ja sen funktiossa? "Me" -osoittin ei kyllä liity esimerkkiini millään tavalla. :D
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

User avatar
valscion
Moderator
Moderator
Posts: 1592
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: CoolBasic? kuollut? eheei ole...

Post by valscion » Sat May 23, 2009 10:03 pm

JATothrim wrote:"Me" -osoittin ei kyllä liity esimerkkiini millään tavalla. :D
Hmm, mutta kun lisäät "luookka_A" luokan olion arvoa luokassa itsessään, niin eikö kyseiseen instanssiin silloin viitata "Me"-sanalla?

EDIT: Mutta riittää nyt tästä aiheesta, alkaa menemään offtopikiksi. Heitä vaikka YV jos jaksat vielä vääntää kättä tästä asiasta :D
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
Dibalo
Advanced Member
Posts: 298
Joined: Mon Aug 27, 2007 8:12 pm
Location: Espoo, Finland
Contact:

Re: CoolBasic? kuollut? eheei ole...

Post by Dibalo » Sun May 24, 2009 6:25 pm

Örr... Googlatkaa 'C# static variables' ja katsokaa msdn-sivun linkki. ;)

Enempää en jaksa tällä kännykällä kirjoittaa. :D
The darkest spells can be found from
http://tunkkaus.blogspot.fi

Locked