Page 1 of 15

CoolBasic Classic: Kehitysuutisten kommentit

Posted: Wed Feb 10, 2010 10:22 pm
by Zero
Voitte täällä vapaasti kommentoida CoolBasic Classic:n kehitysuutisia. Perustellut kommentit saattavat jopa vaikuttaa siihen miten CoolBasic Classic:n ominaisuudet rakennetaan :)

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 11, 2010 6:26 pm
by MrMonday
kappas, tuo omien komentojen luonti Sub-aliohjelmalla kuulostaa hyvältä, pääsee käyttäjät luomaan omia komentojaan, vaikka onnistuuhan se funktioillakin, mutta varmasti hyvä uudistus Wanhan cb:n tyyliin verrattuna :)
ja se omien funktioiden/komentojen värjäys ominaisuus olisi kyllä omasta mielestäni erittäin tervetullut, ja saattaisi helpottaa koodin lukemistakin kun kaikki ei ole pelkkää mustaa..
ja jos oikein vääntäisi hienon tekstinvärjäys-systeemin, niin voisi omille että valmiille funk/kom, valita omat värinsä, kuten varmasti myös muunlainen mahdollisuus "tuunata" editorin ulkoasua piristäisi koodailua..
mutta tietysti kannattaa miettiä mikä on oleellista ja vaikka julkaisun jälkeen kehittää niitä pikkujuttuja enemmän..

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Fri Feb 12, 2010 5:23 pm
by Jonhu
Tässä muutama ehdotus:

- Kattava tutoriaali, kuten tähänkin mennessä on ollut. Mielestäni tämä on ollut tähän mennessä CB:n suurin vahvuus.
- Automaattinen sisennys: Melko helppo toteuttaa, mutta helpottaa huomattavasti koodarinelämää :D ( esim. code::blocksissa on tämä ominaisuus )
- Qbasicistä tyyppien käyttäminen taulukoissa (ellei ole jo tulossa jotain uudenlaista tyyppi- / oliojärjestelmää)

esim.

Code: Select all

Type piste
    Field x As int
    Field y As int
EndType

Dim taulu[10] As piste

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sat Feb 13, 2010 12:59 pm
by Sami The Great
Itse toivoisin, että syntaksi olisi suurinpiirtein samanlaista kuin nyt, että vanhat projektit olisi sitten helppo kääntää uudelle syntaksille.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sat Feb 13, 2010 2:51 pm
by Ruuttu
Sami The Great wrote:Itse toivoisin, että syntaksi olisi suurinpiirtein samanlaista kuin nyt, että vanhat projektit olisi sitten helppo kääntää uudelle syntaksille.
Kenties jopa niin helppo, että käännös voitaisiin tehdä täysin konevoimin.. ? (jos näin nyt haluaa tehdä..)

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sat Feb 13, 2010 7:53 pm
by Koodiapina
Nykyisessä CoolBasicissa on suunnitteluvirhe, joka olisi hyvä olla korjattuna uudessa versiossa.

Code: Select all

If 0 And ObjectX(0) Then
	// ...
EndIf
Kyseinen koodi kaataa ohjelman, vaikka näin ei kuuluisi olla. Ensimmäisen rivin suorituksen pitäisi päättyä heti and-sanaan tultaessa, koska tämän jälkeen rivin loppukoodilla ei ole enää väliä. Homman voi kiertää kahdella if-lauseella, mutta miksi laittaa käyttäjä kirjoittamaan purkkaa kun sama toimii esim. C++:ssa?

Ominaisuus on kätevä, jos halutaan tarkistaa if-lauseessa esim. dynaamisen muistin sisältöä tarkistaen ensin ettemme kuitenkaan lukisi sitä yli.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sat Feb 13, 2010 10:02 pm
by Zero
Joissakin ohjelmointikielissä "and"- ja "or"-operaattorit ovat "oikosuljettuja", eli jos ensimmäisen operandin perusteella voidaan jo päätellä koko logiikkaoperaation lopputulos, jätetään jälkimmäinen operandi laskematta.

Tällaisessa toteutuksessa on hyvät ja huonot puolensa. Hyvät liittyvät mm. suorituskyvyn parantamiseen, kun taas huonot päätyvät väärään lopputulokseen seuraavassa tapauksessa:

Code: Select all

// Jos a=1, tämä lauseke on TOSI vaikka oikeasti se on EPÄTOSI
If a=1 And a=2 Then

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sat Feb 13, 2010 10:09 pm
by axu
Zero wrote:Joissakin ohjelmointikielissä "and"- ja "or"-operaattorit ovat "oikosuljettuja", eli jos ensimmäisen operandin perusteella voidaan jo päätellä koko logiikkaoperaation lopputulos, jätetään jälkimmäinen operandi laskematta.

Tällaisessa toteutuksessa on hyvät ja huonot puolensa. Hyvät liittyvät mm. suorituskyvyn parantamiseen, kun taas huonot päätyvät väärään lopputulokseen seuraavassa tapauksessa:

Code: Select all

// Jos a=1, tämä lauseke on TOSI vaikka oikeasti se on EPÄTOSI
If a=1 And a=2 Then
Hmm, en ymmärrä miksi tuossa esimerkkitapauksessa ohjelma päättelisi tuon olevan tosi, vain koska ensimmäinen osa pitää paikkansa(AND antaa varman tuloksen ensimmäisestä ehtolauseesta vain, jos se on FALSE). Mielestäni tällaiset "oikosuljetut" operaattorit olisi hyvä olla erillisenä operaattorina, niin että voi itse päättää, tutkitaanko kummatkin ehtolauseet, vai katsotaanko jos ensimmäinen ratkaisee kokonaistuloksen.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sat Feb 13, 2010 10:42 pm
by Koodiapina
Zero wrote:Tällaisessa toteutuksessa on hyvät ja huonot puolensa. Hyvät liittyvät mm. suorituskyvyn parantamiseen, kun taas huonot päätyvät väärään lopputulokseen seuraavassa tapauksessa:

Code: Select all

// Jos a=1, tämä lauseke on TOSI vaikka oikeasti se on EPÄTOSI
If a=1 And a=2 Then
Vaikuttaa siltä, ettet ymmärtänyt mitä hain takaa.

Code: Select all

#include <iostream>

int main()
{
    int a = 1;
    std::cout << (a == 1 && a == 2) << std::endl;
}
Tulostaa 0, eli lause on epätosi. Eli ihan oikein tuo toimii.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sat Feb 13, 2010 11:01 pm
by esa94
Zero wrote:Joissakin ohjelmointikielissä "and"- ja "or"-operaattorit ovat "oikosuljettuja", eli jos ensimmäisen operandin perusteella voidaan jo päätellä koko logiikkaoperaation lopputulos, jätetään jälkimmäinen operandi laskematta.

Tällaisessa toteutuksessa on hyvät ja huonot puolensa. Hyvät liittyvät mm. suorituskyvyn parantamiseen, kun taas huonot päätyvät väärään lopputulokseen seuraavassa tapauksessa:

Code: Select all

// Jos a=1, tämä lauseke on TOSI vaikka oikeasti se on EPÄTOSI
If a=1 And a=2 Then
Oikosulkevat operaattorit saavat tehdä sen vain kun lauseen arvo on aivan varma. And-operaattori siis lopettaa tarkistuksen vain jos ensimmäinen osa ei ole tosi, or taas lopettaa sen jo kun ensimmäinen osa on tosi. XOR ei koskaan ole täten oikosulkeva, sillä sen tulee tarkistaa molemmat operaattorit aina.

Taisit tosiaan ymmärtää Grandin hiukan väärin.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sun Feb 14, 2010 2:38 pm
by Bambi
Ehdottomasti != -vertailu mukaan. En ymmärrä miksei sitä ole nykyisessä versiossa. :/ Tai sitten on, mutten vain ole löytänyt sen vastinetta.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sun Feb 14, 2010 2:42 pm
by KilledWhale
Bambi wrote:Ehdottomasti != -vertailu mukaan. En ymmärrä miksei sitä ole nykyisessä versiossa. :/ Tai sitten on, mutten vain ole löytänyt sen vastinetta.
Nykyisessä versiossa vastineena toimii <> -vertailu.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sun Feb 14, 2010 6:27 pm
by Zero
esa94 wrote:
Zero wrote:Joissakin ohjelmointikielissä "and"- ja "or"-operaattorit ovat "oikosuljettuja", eli jos ensimmäisen operandin perusteella voidaan jo päätellä koko logiikkaoperaation lopputulos, jätetään jälkimmäinen operandi laskematta.

Tällaisessa toteutuksessa on hyvät ja huonot puolensa. Hyvät liittyvät mm. suorituskyvyn parantamiseen, kun taas huonot päätyvät väärään lopputulokseen seuraavassa tapauksessa:

Code: Select all

// Jos a=1, tämä lauseke on TOSI vaikka oikeasti se on EPÄTOSI
If a=1 And a=2 Then
Oikosulkevat operaattorit saavat tehdä sen vain kun lauseen arvo on aivan varma. And-operaattori siis lopettaa tarkistuksen vain jos ensimmäinen osa ei ole tosi, or taas lopettaa sen jo kun ensimmäinen osa on tosi. XOR ei koskaan ole täten oikosulkeva, sillä sen tulee tarkistaa molemmat operaattorit aina.

Taisit tosiaan ymmärtää Grandin hiukan väärin.
Nyt menee omaan piikkiin. Aivan näinhän se on. Taisin olla vähän liian väsynyt kun tuon kirjoitin :)

Oikosulkeva käytös operaattorien kanssa voi joka tapauksessa helposti johtaa vaikeasti paikannettaviin bugeihin, jos ei muista että And:n ensimmäisen ehdon ollessa False jätetään oikean puolimmaisen operandin (joka voi olla esimerkiksi tärkeä funktiokutsu) suorittamatta. ja vastaavasti Or:n ensimmäisen ehdon ollessa True jätetään samalla tavalla oikea puoli suorittamatta.

Oikosulkevat operaattorit ovat kuitenkin erityisen käyttökelpoisia juuri silloin kun niiden kanssa käytetään funktiokutsuja: näin voidaan estää raskaamman oikean puolen suorittaminen tai varmistaa vasemman puolen avulla että oikea puoli voidaan suorittaa (tarkastetaan esimerkiki onko osoitin jotain muuta kuin null, ja samaa osoitinta hyödynnetään sitten oikean puolen laskussa).

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sun Feb 14, 2010 10:48 pm
by Latexi95
-Kaipaisin uutta tiedosto tyyppiä: totuusarvoja(boolean/bool).
Tuntuu niin tuhlaukselta tallentaa tieto, onko joku asia totta, tavuun. Yli 99%(!) menee hukkaan.

-Taulukot eivät saisi olla globaaleja ja niitä pitäisi pystyä välittämään funktioiden parametreinä.

-Kuvasarjan lataus( + tallennus?) gif-tiedostosta.

-Äänten muokkaus ja tallennus funktiot.

-Kuvien tallennus muihinkin tiedostomuotoihin kuin bittikartoiksi.

Toiveta tuli loppujen lopuksi aika runsaasti. :roll:
Toivottavasti jotkin niistä toteutuvat.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Feb 15, 2010 12:54 am
by temu92
Latexi95 wrote:Yli 99%(!) menee hukkaan.
Öö, en ehkä tiedä kyllä parhaiten, mutta yksi tavu = 8 bittiä ja totuusarvoon tarvitaan periaatteessa vain yksi bitti jolloin se on 7/8 joka menee hukkaan. Se taas on prosenteissa ~87% joka ei ole lähellekään 99%+ :P

Ja teoriassahan voit itse käsitellä bittejäkin, opettelet vain miten binäärijärjestelmä toimii niin voit tallentaa yhteen tavuun 8 eri totuusarvoa :P

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Feb 15, 2010 3:26 pm
by MaGetzUb
Juuri näitä Boolean/Totuusarvoja, mitä latexi sanoi olen itsekkin meinannut huomauttaa. (C++:han varaa kans 1tavun totuusarvolle tilaa) Sitten toinen olisi hyvä semmonen et funktio parametri voisi toimia virtana 'streamina' eli näin:

Code: Select all

Function munfunkkari(virta1,virta2)
    ikä As Integer = ReadStream virta1, 1
    nopeus As Float  = ReadStream virta1, 2
    nimi As String = ReadStream virta1, 3
    
    tyyli As Integer = ReadStream virta2, 1
    reaktiokyky As Float  = ReadStream virta2, 2
    komento As String = ReadStream virta2, 3
    
    Print ikä
    Print nopeus
    Print nimi
    Print "********************'"
    Print tyyli
    Print reaktiokyky
    Print komento
End Function
Tämähän auttaisi palauttamaan funktiostakin isomman kasan parametreja. Kun vain funktiosta saatu stream muuttuja syötetään toiselle funktiolle. Käytännössä stream muuttuja sisältää parametri rakenteen.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Feb 15, 2010 3:55 pm
by Latexi95
temu92 wrote: Öö, en ehkä tiedä kyllä parhaiten, mutta yksi tavu = 8 bittiä ja totuusarvoon tarvitaan periaatteessa vain yksi bitti jolloin se on 7/8 joka menee hukkaan. Se taas on prosenteissa ~87% joka ei ole lähellekään 99%+ :P

Ja teoriassahan voit itse käsitellä bittejäkin, opettelet vain miten binäärijärjestelmä toimii niin voit tallentaa yhteen tavuun 8 eri totuusarvoa :P
Hyvä minä... Postasin taas ennen kuin ajattelin. :oops:
Ajattelin, että tavuun mahtuu 256 arvoa ja bittiin 2, mutta unohdin että tavu ei silti vie niin paljon tilaa.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Feb 15, 2010 4:17 pm
by ezbe
Latexi95 wrote:-Kaipaisin uutta tiedosto tyyppiä: totuusarvoja(boolean/bool).
Tuntuu niin tuhlaukselta tallentaa tieto, onko joku asia totta, tavuun.
Muistinosoitus toimii näissä vehkeissä niin, ettei tavua tarkemmin voida muistia osoittaa (eli suoraa osoitusta esimerkiksi tietylle bitille ei saada). Binäärioperaattoreilla on mahdollista "pakata" 8 totuusarvoa tavuun, mutta tämä vaatii jonkin verran ylimääräisiä operaatioita, joten se vaikuttaa suorituskykyyn (ts. se on hitaampaa kuin "uhrata" kokonainen tavu yhdelle totuusarvolle). Lisäksi, kun nykyvehkeissä alkaa olla gigatolkulla muistia (1 gigatavu = 1024 megatavua = 1 048 576 kilotavua = 1 073 741 824 tavua tjsp), ei se yhden tavun käyttö yhtä totuusarvoa kohden hirveästi tunnu.

MaGetzUb wrote: Sitten toinen olisi hyvä semmonen et funktio parametri voisi toimia virtana 'streamina' eli näin:

Code: Select all

Function munfunkkari(virta1,virta2)
    ikä As Integer = ReadStream virta1, 1
    nopeus As Float  = ReadStream virta1, 2
    nimi As String = ReadStream virta1, 3
    
    tyyli As Integer = ReadStream virta2, 1
    reaktiokyky As Float  = ReadStream virta2, 2
    komento As String = ReadStream virta2, 3
    
    Print ikä
    Print nopeus
    Print nimi
    Print "********************'"
    Print tyyli
    Print reaktiokyky
    Print komento
End Function
Tämähän auttaisi palauttamaan funktiostakin isomman kasan parametreja. Kun vain funktiosta saatu stream muuttuja syötetään toiselle funktiolle. Käytännössä stream muuttuja sisältää parametri rakenteen.
Tuo onnistuu jo nykyisessä CB:ssä muistipalojen avulla. Samoihin paloihin voi myös kirjoittaa takaisin tietoa, jolloin niitä voi käyttää suurempien kokonaisuuksien välittämiseen "edestakaisin" funktiosta sisään ja ulos. Totta kyllä, ettei muistipalojen käyttö ole erityisen helppoa, varsinkaan aloittelijoille. Se mitä en tuosta stream-systeemistä nyt heti hoksaa on, että miten olet ajatellut noiden jälkimmäisten parametrien toimivan:

Code: Select all

    ikä As Integer = ReadStream virta1, 1
    nopeus As Float  = ReadStream virta1, 2
    nimi As String = ReadStream virta1, 3
Tuossa siis luetaan kolmea erilaista tietotyyppiä samasta virrasta (4-tavuinen kokonaisluku, 4-tavuinen liukuluku, muuttuvan kokoinen merkkijono). ReadStreamille on annettu toisena parametrina arvot 1, 2 ja 3. Ymmärrän tämän niin, että haet takaa sitä, että Readstream <virta, n> palauttaisi n:n parametrin virrasta, mutta jos samaan virtaan kirjoitetaan eri tietotyyppejä, täytyisi ReadStreamille kertoa jotenkin virran rakenne (ns. offsetit arvoille), jotta tiedettäisiin esimerkiksi merkkijonon alkavan 8. tavun jälkeen.

C++:ssa on kyllä käytössä operaattorit << ja >>, joilla voidaan ohjata tietoa virrasta sisään ja ulos, mutta käytännössä ne ovat yleensä ylikuormitettuina luokissa (vrt. esim. Qt:n erittäin näppärät stream-operaattorit), ja logiikka luettavan/kirjoitettavan tiedon tavumäärästä on yleensä ohjelmoitu ylikuormitetun operaattorin logiikkaan kirjaston/ohjelman tekijän itsensä toimesta. Niiden kohdalla ei tarvitse kertoa "monesko" tavu tms. virrasta luetaan, koska tieto "virtaa", eli jos luet 8 tavua virrasta, niitä kahdeksaa tavua ei voi virrasta enää uudelleen lukea (ne siis poistuvat sitä mukaa kun niitä luetaan, "kulkevat putkesta toiseen" tai miten sen kuvaisi =P). Hyvänä esimerkkinä toimivat Qt:n verkkosocketit, eli kun socketin streamista luetaan sinne tullut data ulos, ei se enää sijaitse socketissa (tämä on suoraan jostain Qt:n esimerkistä, lisäsin vain kommentit):

Code: Select all

        QDataStream in(tcpSocket);    //Sisääntuleva data-virta socketista
        in.setVersion(QDataStream::Qt_4_0);  //Varmistetaan versioyhteensopivuus (stream-operaattoreiden logiikka voi vaihdella Qt:n versiosta toiseen)

        if (blockSize == 0) {  //Ensin virrasta oletetaan tulevan 2-tavuinen "header", joka kertoo montako tavua dataa sen jälkeen voidaan odottaa
            if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))  //Tarkistetaan että 2 tavua on luettavissa
                return;

            in >> blockSize;  //Luetaan datan koko, tässä siis "virtaa" 2 tavua tietoa verkosta saapuneesta datasta quint16-tietotyypin muuttujaan, joita ei voida enää uudelleen in-streamista lukea
        }

        if (tcpSocket->bytesAvailable() < blockSize)  //Tarkistetaan että koko datamäärä on saapunut
            return;

        QString nextFortune;  //QStringissä on ylikuormitettu  >> -operaattori, joka automaattisesti lukee virrasta, kunnes merkkijonon loppu löydetään
        in >> nextFortune;  //Luetaan tieto sockettiin sidotusta datavirrasta QStringiin (tämän jälkeen sitä ei voida enää lukea virrasta, vaan tieto on tallennettu ("virrannut") socketista stringiin
Se mitä haen tällä esimerkillä takaa on, että esittämäsi "ReadStream"-komento ei toimi samalla logiikalla kuin "oikea" streamaus, vaan muistuttaa enempi muistipaloja (jos ymmärsin esimerkkisi oikein).

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Feb 15, 2010 4:54 pm
by MaGetzUb
ezbe wrote:
Latexi95 wrote:-Kaipaisin uutta tiedosto tyyppiä: totuusarvoja(boolean/bool).

Tämähän auttaisi palauttamaan funktiostakin isomman kasan parametreja. Kun vain funktiosta saatu stream muuttuja syötetään toiselle funktiolle. Käytännössä stream muuttuja sisältää parametri rakenteen.
Tuo onnistuu jo nykyisessä CB:ssä muistipalojen avulla. Samoihin paloihin voi myös kirjoittaa takaisin tietoa, jolloin niitä voi käyttää suurempien kokonaisuuksien välittämiseen "edestakaisin" funktiosta sisään ja ulos. Totta kyllä, ettei muistipalojen käyttö ole erityisen helppoa, varsinkaan aloittelijoille. Se mitä en tuosta stream-systeemistä nyt heti hoksaa on, että miten olet ajatellut noiden jälkimmäisten parametrien toimivan:

Code: Select all

    ikä As Integer = ReadStream virta1, 1
    nopeus As Float  = ReadStream virta1, 2
    nimi As String = ReadStream virta1, 3
Tuossa siis luetaan kolmea erilaista tietotyyppiä samasta virrasta (4-tavuinen kokonaisluku, 4-tavuinen liukuluku, muuttuvan kokoinen merkkijono). ReadStreamille on annettu toisena parametrina arvot 1, 2 ja 3. Ymmärrän tämän niin, että haet takaa sitä, että Readstream <virta, n> palauttaisi n:n parametrin virrasta, mutta jos samaan virtaan kirjoitetaan eri tietotyyppejä, täytyisi ReadStreamille kertoa jotenkin virran rakenne (ns. offsetit arvoille), jotta tiedettäisiin esimerkiksi merkkijonon alkavan 8. tavun jälkeen.

C++:ssa on kyllä käytössä operaattorit << ja >>, joilla voidaan ohjata tietoa virrasta sisään ja ulos, mutta käytännössä ne ovat yleensä ylikuormitettuina luokissa (vrt. esim. Qt:n erittäin näppärät stream-operaattorit), ja logiikka luettavan/kirjoitettavan tiedon tavumäärästä on yleensä ohjelmoitu ylikuormitetun operaattorin logiikkaan kirjaston/ohjelman tekijän itsensä toimesta. Niiden kohdalla ei tarvitse kertoa "monesko" tavu tms. virrasta luetaan, koska tieto "virtaa", eli jos luet 8 tavua virrasta, niitä kahdeksaa tavua ei voi virrasta enää uudelleen lukea (ne siis poistuvat sitä mukaa kun niitä luetaan, "kulkevat putkesta toiseen" tai miten sen kuvaisi =P). Hyvänä esimerkkinä toimivat Qt:n verkkosocketit, eli kun socketin streamista luetaan sinne tullut data ulos, ei se enää sijaitse socketissa (tämä on suoraan jostain Qt:n esimerkistä, lisäsin vain kommentit):

Code: Select all

        QDataStream in(tcpSocket);    //Sisääntuleva data-virta socketista
        in.setVersion(QDataStream::Qt_4_0);  //Varmistetaan versioyhteensopivuus (stream-operaattoreiden logiikka voi vaihdella Qt:n versiosta toiseen)

        if (blockSize == 0) {  //Ensin virrasta oletetaan tulevan 2-tavuinen "header", joka kertoo montako tavua dataa sen jälkeen voidaan odottaa
            if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))  //Tarkistetaan että 2 tavua on luettavissa
                return;

            in >> blockSize;  //Luetaan datan koko, tässä siis "virtaa" 2 tavua tietoa verkosta saapuneesta datasta quint16-tietotyypin muuttujaan, joita ei voida enää uudelleen in-streamista lukea
        }

        if (tcpSocket->bytesAvailable() < blockSize)  //Tarkistetaan että koko datamäärä on saapunut
            return;

        QString nextFortune;  //QStringissä on ylikuormitettu  >> -operaattori, joka automaattisesti lukee virrasta, kunnes merkkijonon loppu löydetään
        in >> nextFortune;  //Luetaan tieto sockettiin sidotusta datavirrasta QStringiin (tämän jälkeen sitä ei voida enää lukea virrasta, vaan tieto on tallennettu ("virrannut") socketista stringiin
Ajattelin sitä vain, että voisihan heti CoolBasic tarkistaa minkälaista tietoa työnnetään ja sen mukaan säilyttää se sinne stream muuttujaan...

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Feb 15, 2010 6:53 pm
by legend
Ehdotuksia:

Voisi laittaa vakioon monia muuttujia, Esim. Const Pinkki = 255, 0, 255
--------------------------------------------------------------------------------------------------
Voisi tehdä vakiofunktion, eli siis voisi tehdä funktion joka korvattaisiin niihin kohtiin missä se esitettiin...
Esimerkki selventää asiaa.

ConstFunction Joku(Num1, Num2, Num3, Num4) = (Num1 ^ Num3) / (Num2 ^ Num4 ) + (Num1 + Num2) * (Num3 + Num4)

Luku1 = 5
Luku2 = 10
Luku3 = 50
Luku4 = 5

Print Joku (Luku1,Luku2,Luku3,Luku4)
'Kääntäjä kääntäisi sen näin:
Print (5 ^ 50) / (10 ^ 5 ) + (5 + 10) * (50 + 5)