Dataluola

Tervetuloa Dataluolaan!
Rekisteröidy ilmaiseksi, niin pääset kirjoittamaan omia viestiketjuja, viestejä, profiiliviestejä ja muita julkaisuja. Dataluolan sivuilta löytyy myös chat!

C# Perusteita

Lisää?

  • Kyllä

    Äänet: 8 88,9%
  • Ei

    Äänet: 1 11,1%

  • Äänestäjät yhteensä
    9

JokkeZ

Valvoja, C#/.NET Developer
Henkilökunta
Valvoja
#1
Huomasin tämän C-Ohjelmointikielet osion olevan tyhjänä niin päätin että lykkään tänne jotain pientä. :D
Varmaan ei tarvi alkaa neuvomaan, miten Visual Studio, tai vastaava IDE ladatataan ja asennetaan. Itse käytän Visual Studio 2013. (Kuitenkin jos apua tarvitsee niin voi kysyä.)

Aloitellaas,
Käynnistetään Visual Studio, luodaan uusi projekti.
(Yläpalkista File > New > Project > Visual C# > Console Application ja nimetään se tässä tapauksessa vaikkapa HelloWorld)
Sitten päässäänkin ohjelmoimaan. ^^

Tältä koodin pitäisi näyttää kun Visual Studio on latautunut.
PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {

        }
    }
}
Seuraavaksi tulostetaan muuttujan avulla "Hello World!" konsoli-ikkunaan, tähän tapaan.
PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            // Yksi riviset kommentit voidaan merkitä kahdella "//" viivalla ja

            /*
             * Useampi riviset kommentit näin.
             * :D
             */

            /* Kommentit eivät tule näkymään lopullisessa ohjelmassa, vaan helpoittavat koodin lukemista useimmissa tapauksissa. */



            // Määritetään muuttuja ja annetaan sille aloitusarvo.
            string helloworld = "Hello World!"; //Loppuu lähes AINA ; merkkiin!
            Console.WriteLine(helloworld); //Tulostetaan muuttujan aloitusarvo konsoli-ikkunaan.

            //Tämän saman voi tehdä helpomminkin,
            Console.WriteLine("Hello World!");
            //Aika yksinkertaista, vähän kuin pelkkää englantia kirjoittelisi, eikös =)
        }
    }
}
Seuraavaksi jos haluamme nähdä mitä ohjelma tekee, voimme avata "debugata" painamalla yläreunasta vihreää Start nappia tai vasen Ctrl + F5 yhdistelmällä.
Ohjelman pitäisi tulostaa 2 kertaa Hello World! kuvan tapaan.

Siinä olisi sitten tämänkertainen, äänestäkää jos haluatte lisää. :)
Ehdotuksia otetaan vastaan. :)
 

JokkeZ

Valvoja, C#/.NET Developer
Henkilökunta
Valvoja
#2
Osa 2. Muuttujat
Elikkäs käydään lyhyesti ja toivottavasti ytimekkäästi muuttujat läpi. Mikä on muuttuja? No minä en sitä osaa selittää joten googletin sen teidän puolesta, kas näin:


Ohjelman suorituksen aikana tarvittavaa tietoa voidaan tallentaa muuttujiin. Muuttuja on ohjelmointikielten termi sille, että jokin asia laitetaan "ylös muistiin". Normaalissa elämässä esimerkiksi ohi ajavista autoista voidaan pitää lukua: 1, 2, 3, ja niin edelleen. Aina kun auto ajaa ohi, lisätään edelliseen muistissa olevaan lukuun yksi.

Muuttujassa oleva tieto voi muuttua ohjelman aikana - siksi sitä sanotaan muuttujaksi! Ohjelma tunnistaa muuttujan sille annetun nimen perusteella. - https://trac.cc.jyu.fi/projects/npo/wiki/Muuttujat

---Muuttujat---
int = luku
string = teksti
bool = tosi

Tässä muutama esimerkki kuinka käyttää muuttujia.
PHP:
string = teksti = "Tämä on tekstiä";
int luku = 214;
int summa;
summa = 1 + 2; Pluslasku -- Tulostaa 3
//summa = 1 - 2; Miinuslasku -- Tulostaa -1
//summa = 1 * 2; Kertolasku -- Tulostaa 2
//summa = 1 / 2; Jakolasku -- Tulostaa 0

//Tulostaa konsoliin: 3
Console.WriteLine(summa);

//Tulostaa konsoliin: Tämä on tekstiä
Console.WriteLine(teksti);

//Tulostaa konsoliin: 214
Console.WriteLine(luku);
Console.Write on myös olemassa, WriteLine aloittaa aina uudelta riviltä, pelkkä Write jatkaa samalta riviltä.
PHP:
WriteLine:
Console.WriteLine("Moi");
Console.WriteLine("Moi");

Tulostus:
Moi
Moi

Write:
Console.Write("Moi");
Console.Write("Moi");

Tulostus:
MoiMoi
 

JokkeZ

Valvoja, C#/.NET Developer
Henkilökunta
Valvoja
#3
Osa 3. IF / ELSE IF / ELSE

Tässä kuvainnollistaminen if / else if /else käytöstä.
PHP:
if(ehto1)
{
    // jos ehto1 on tosi, suoritetaan tämä
}
else if(ehto2)
{
    // jos ehto1 ei ollut tosi, mutta ehto2 on, suoritetaan tämä
}
else if(ehto3)
{
    // jos ehto1 eikä ehto2 ei ollut tosi, mutta ehto3 on, suoritetaan tämä
}
else
{
    // jos mikään ehdoista ei ollut tosi suoritetaan tämä
}
Esimerkki koodi:
PHP:
// Luodaan muuttuja, annetaan sille arvoksi 3.

int numero;
numero = 3;

//Jos muuttuja "numero" on yhtäkuin 3, suoritetaan tämä.
if (numero == 3)
{
    Console.WriteLine("Kyllä, numero on kolme.");  
}

//Jos muuttuja "numero" on yhtäkuin 2, suoritetaan tämä.
else if (numero == 2)
{
    Console.WriteLine("Numero ei ole 2");
}

//Jos muuttuja "numero" ei ole 2 tai 3, suoritaan tämä.
else
{
    Console.WriteLine("Numero ei ole 3 tai 2");
}
Lopullinen konsolin tulostus olisi seuraava: Kyllä, numero on 3.

Toinen esimerkki:
PHP:
int numero;
numero = 3;

if (numero > 3)
{
     Console.WriteLine("Numero on isompi kuin 3");
}
else if (numero < 2)
{
     Console.WriteLine("Numero on pienempi kuin 2");
}
else
{
     Console.WriteLine("Numero ei ole isompi kuin 3, eikä pienempi kuin 2.");
}
Lopullinen konsolin tulostus olisi seuraava: Numero ei ole isompi kuin 3, eikä isompi kuin 2.

Mitäs ootte mieltä, jatketaanko perusteiden parissa vai näytänkö miten vaikka nettiselain, laskin tjsp.. pieniä ohjelmia luodaan?
 

JokkeZ

Valvoja, C#/.NET Developer
Henkilökunta
Valvoja
#5
Osa 4. Konsoli
Konsoli "luokalla" voidaan lukea tai kirjoittaa tekstiä. Kirjoittamiseen: Write & WriteLine, jotka ollaankin jo käyty läpi. Lukemiseen Read, ReadLine, ReadKey. Read lukee seuraavan merkin, ReadLine koko syötteen ja ReadKey painetun näppäimen (sekä onko ctrl, alt tai shift pohjassa). Konsolin voi tyhjentää metodilla Clear.

Tehdään yksinkertainen laskin, aikasemmin oppimallamme + ReadLine:ä käyttämällä.
PHP:
//Luodaan 2 muuttujaa.
int numero1, numero2;

Console.Write("Anna numero 1: ");
numero1 = int.Parse(Console.ReadLine()); //Luetaan ensinmäinen numero

Console.Write("Anna numero 2: ");
numero2 = int.Parse(Console.ReadLine()); //Luetaan toinen numero

//Luodaan muuttuja joka laskee muuttujat "numero1" ja "numero2" yhteen.
int tulos = numero1 + numero2;

//int tulos = numero1 - numero2;   MIINUSLASKU
//int tulos = numero1 * numero2;   KERTOLASKU
//int tulos = numero1 / numero2;   JAKOLASKU

//Tulostetaan tulos muuttuja konsoliin, eli pluslaskumme vastaus.
Console.WriteLine("Tulos: " + tulos);
Esimerkki tulostuksesta:


Konsolin ulkonäköä voi myös muutella yksinkertaisesti:
PHP:
//Vaihdetaan otsikko
Console.Title = "Konsoli";
//Leveys 100 merkkiä
Console.WindowWidth = 100;
//Korkeus 50 merkkiä
Console.WindowHeight = 50;
//Sininen teksti
Console.ForegroundColor = ConsoleColor.Blue;
PHP:
int numero, numero1;

Console.Write("Numero 1: ");
numero = int.Parse(Console.ReadLine());

Console.Write("Numero 2: ");
numero1 = int.Parse(Console.ReadLine());

int tulos = numero + numero1;

if (tulos == 100)
{
     Console.ForegroundColor = ConsoleColor.DarkGreen;
}
else if (tulos == 1000)
{
     Console.ForegroundColor = ConsoleColor.DarkRed;
}
else if (tulos == 9001)
{
     Console.ForegroundColor = ConsoleColor.DarkMagenta;
     Console.WriteLine("Wow over 9000");
}
else
{
     Console.ForegroundColor = ConsoleColor.Cyan;
}

Console.WriteLine("Tulos on: " + tulos);

Mitä "int.Parse" tarkoitti?
Siitä seuraavalla kerralla ;)
 

JokkeZ

Valvoja, C#/.NET Developer
Henkilökunta
Valvoja
#7
Osa 5. Tyyppimuunnokset
Tyyppien Parse- ja TryParse-metodeilla voi ”parsia” arvon merkkijonosta. Näiden kahden ero on siinä, että Parse heittää virheen mikäli merkkijono ei ollut sopivassa muodossa. Kannattaa muistaa, että desimaalierottimena käytetään oletuksena järjestelmässä määriteltyä desimaalierotinta.

Parse:
PHP:
string teksti1 = "123";
// toimii
int luku = int.Parse(teksti1);

string teksti2 = "true";
bool tosi = bool.Parse(teksti2);

string teksti3 = "123.2";
// virhe
luku = int.Parse(teksti3);
// tämäkin heittää virheen, jos desimaalierottimena käytetään pilkkua!
float = float.Parse(teksti3);
TryParse:
PHP:
string teksti = "123";
int luku;
if(int.TryParse(teksti, out luku))
{
    // parsiminen onnistui
    // tulostaa 123
}
else
{
    // parsiminen epäonnistui
}
Convert-luokka
Convert-luokasta löytyy metodit To***, joilla perustietotyyppejä voi muuttaa toiseksi.
PHP:
string arvo = "123,2";
float luku = Convert.ToSingle(arvo);
byte arvo2 = 123;
char merkki = Convert.ToChar(arvo2);
Lisäksi sieltä löytyy metodi ChangeType, jolla voi yrittää muuttaa minkä tahansa tyypin toiseksi.
PHP:
string arvo = "123,2";
float luku = (float)Convert.ChangeType(arvo, typeof(float));
as-operaattori
As-operaattorilla voi yrittää muuttaa nullable-tyypin toiseksi. Jos tyypit eivät ole yhteensopivia, tulos on null.
PHP:
object linux = new Linux();
Kayttojarjestelma kayttojarjestelma = linux as Kayttojarjestelma;
if(kayttojarjestelma != null)
{
    // Linux-luokka on yhteensopiva Kayttojarjestelma-luokan kanssa
    kayttojarjestelma.TeeJotain();
}
 
#8
Hienoa ohjeita!

Lukeminen on selvää ja soveltaminen näiden avulla on helppoa.
Toivottavasti näitä ohjeita tulee lisää ja olen kyllä itsekkin oppinut näistä jo jotain uutta :rolleyes:

Selkeälukuista, Hyvin selitettyä, Ei kauheaa C/P ohjetta.
10/10 :eek:
 

JokkeZ

Valvoja, C#/.NET Developer
Henkilökunta
Valvoja
#9
Osa 6. Valintalause switch
switch case
Valintalauseen (switch) rakenne on seuraava:
PHP:
switch(lauseke)
{
    case arvo1:
        // suoritetaan jos lausekkeen arvo on arvo1
        break;
    case arvo2:
        // suoritetaan jos lausekkeen arvo on arvo2
        break;
    case arvo3:
    case arvo4:
        // suoritetaan jos lausekkeen arvo on arvo3 tai arvo4
        break;
    default:
        // suoritetaan jos mikään case ei osunut kohdalle
        break;
}
Case-kohtia voi olla yhtä monta kuin mitä lauseke saa arvoja. Useamman case:n saa suorittamaan saman koodin laittamalla ne peräkkäin (kuten esimerkin arvo3 ja arvo4) ja laittamalla koodin vain viimeiseen kohtaan.
Kunkin kohdan suoritus päättyy johonkin lauseista: break (poistutaan switch-lauseesta), goto (hypätään toiseen kohtaan, esim goto case 1; ), return (poistutaan metodista) tai throw (heitetään poikkeus).

Seuraava koodi laskee kuinka paljon rahaa jäätelöautomaattiin tarvitsee laittaa eri pallomäärillä.
PHP:
int palloja;
Console.Write("Kuinka monta jäätelöpalloa laitetaan (1-3): ");
palloja = int.Parse(Console.ReadLine());
decimal hinta = 0m;
switch (palloja)
{
    case 1:
        hinta += 2.0m;
        break;
    case 2:
        hinta += 1.0m;
        goto case 1;
    case 3:
        hinta += 0.5m;
        goto case 2;
    default:
        throw new Exception("Kone ei voi tehdä pallottomia eikä yli kolmen pallon annoksia");
}
Console.WriteLine("Syötä koneeseen {0:0.00} euroa", hinta);
Esimerkki tulostus:




 

JokkeZ

Valvoja, C#/.NET Developer
Henkilökunta
Valvoja
#10
Ajattelin pitkästä aikaa tehdä jotain tähänkin osioon, joten tässä olisi toivottavasti yksinkertainen esimerkki luokkien käytöstä (class). Jos jotain epäselvää niin voi kysyä. :D
PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Esimerkki
{
    class Program
    {
        static void Main(string[] args)
        {
            EsimerkkiLuokka esimerkki = new EsimerkkiLuokka();
            /* Määritetään muuttujalle arvoksi Hello World */
            esimerkki.EsimerkkiString = "Hello World";
            /* Tulostetaan se. */
            Console.WriteLine(esimerkki.EsimerkkiString);

            /* Käytetään EsimerkkiLuokan Laskuri metodia. Tulostaa Summa: 12 */
            esimerkki.Laskuri(6, 6); //6+6 = 12
        }
    }

    class EsimerkkiLuokka
    {
        public string EsimerkkiString { get; set; }

        public EsimerkkiLuokka() {}

        public void Laskuri(int numero1, int numero2)
        {
            int tulos;

            tulos = numero1 + numero2;

            Console.WriteLine("Summa: " + tulos);
        }
    }
}