Gå till innehållet

Kapitel 2 - Hello World, utmatning och programstruktur

Introduktion till kapitlet

I detta kapitel får du lära dig att skapa ditt första C#-program. Du kommer att få lära dig hur man skriver ut text till användaren och se hur man kan göra en simpel dokumentation av sina program. Du kommer också att få lära dig lite om grunderna i uppbyggnaden av ett C#-program och var de färdiga programmen som du skapar hamnar på din dator.

Var skriver man koden?

När du programmerar i C# skriver du koden i Visual Studio. Om du inte har installerat Visual Studio får du hjälp med att göra detta i kapitel 1.

Hello world

Inom programmering så finns det en tradition när man ska lära sig att programmera, och det är att skriva ett ”Hello World”-program. Detta är ett program som skriver ut texten ”Hello world” på skärmen. Tanken är att man på detta sätt får se den minsta möjliga kod som krävs för att få ett fungerande program.

Välkomstsidan i Visual Studio

Vi kommer nu att steg för steg gå igenom hur man skapar ett sådant program i C#. I menyn längst upp till vänster i Visual Studio väljer du File -> New -> Project. Du får då upp ett nytt fönster där du väljer vilken typ av projekt, det vill säga vilken typ av program, som du vill skapa. Den typ av program som vi kommer att arbeta med under de första kapitlen i denna bok kallas för konsollprogram, eller Console App i listan. Notera att det också finns en genväg på startsidan i Visual Studio för att skapa ett nytt program som man kan trycka på istället för att gå via File-menyn.

Nytt program i Visual Studio

Vi behöver nu fylla i ett namn för vårt nya program (om vi inte vill använda det namn som Visual Studio föreslår). Det går bra att kalla programmet för vad man vill, men det kan vara bra att använda ett system för att enkelt se vilket program i boken du gjort, så namnet Exempel 2.1 – Hello World är ett bra förslag.

Tomt program i Visual Studio

När man skapar ett nytt program så skapas filen Program.cs där vi skriver koden som bestämmer vad programmet ska göra. Det finns redan en del ifylld kod för att vi själva ska slippa skriva den varje gång. För att få ett program som skriver ut texten behöver vi bara skriva två rader själva (var noggrann med små/stora bokstäver).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exempel_2._1___Hello_World
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world");
            Console.ReadKey();            
        }
    }
}

När du har skrivit de två rader som saknas så kör du ditt program genom att trycka på ”Start” vid den gröna pilen i verktygsfältet (eller genom menyn Debug -> Start). Du har nu skapat ett ”Hello world”-program i C#.

Raden Console.WriteLine("Hello world"); gör så att programmet kommer skriva ut texten Hello world när det körs. Det raden Console.ReadKey(); gör är att vänta på att användaren trycker på en tangent på tangentbordet. Om man inte väntar på att användaren trycker på en tangent så stängs programmet ner så fort som texten har skrivits ut. Du kan testa att ta bort den andra raden och sedan köra programmet en gång till så ser du att programfönstret flimrar till kort på skärmen, det stängs då av så fort som det har skrivit Hello World.

Uppgift 2.1

Skapa ett nytt program som skriver ut namnet på din favoritartist istället för ”Hello world”.

Lösningsförslag 2.1

Strukturen av ett program – Kodblock

Programmet innehåller ganska så mycket kod för att bara skriva ”Hello world” när det körs, och om du inte har programmerat tidigare så ser det mesta säkert väldigt svårt ut. Det är inte nödvändigt, eller särskilt viktigt heller för den delen, att förstå vad varje rad i programmet gör från början. Längre fram i boken kommer du att få en bättre förståelse av vad programmets övriga rader gör, men vi tar ändå en kort förklaring nu.

Det första som man ska notera är att man oftast skriver koden uppdelad på en sats per rad, och varje sats avslutas med ett semikolon. Vi skrev till två nya rader (två nya satser) till programmet för att det skulle skriva ut texten Hello World, och varje sats avslutades med ett semikolon.

De första raderna som börjar med using gör så att man inte behöver skriva lika mycket kod när man skriver satser.

Resten av koden är uppdelad i olika kodblock. Programmets kodblock indelas med hjälp av klammerparenteser, alltså tecknen { och }. Vårt program består av tre kodblock som ligger inuti varandra. Det yttersta kodblocket är för programmets namespace, det är inte så viktigt att veta vad ett namespace är tills vidare. Kodblocket består av all kod efter den första klammerparentesen fram till den sista.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exempel_2._1___Hello_World
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world");
            Console.ReadKey();       
        }
    }
}

Nästa kodblock är för programmets class. Varje textprogram vi gör kommer att ha en class som heter Program.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exempel_2._1___Hello_World
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world");
            Console.ReadKey(); 
        }
    }
}

Det tredje och innersta kodblocket är för det som kallas för klassens Main-metod, det är här som vi skriver vår kod.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exempel_2._1___Hello_World
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world");
            Console.ReadKey();          
        }
    }
}

Det som är viktigt att veta är att när programmet körs så kommer koden i programmets Main-metod att köras i ordning uppifrån och ner. Det första som händer är att Hello World skrivs ut i programfönstret, och sedan väntar programmet på att användaren trycker på en tangent. Hade det funnits fler rader efter Console.ReadKey() så hade dessa körts efter att användaren trycker på en tangent. Så fort som programmet har kört färdigt alla rader i Main-metoden så stängs det av, eftersom det då har kört färdigt. Vi kommer i de första kapitlen att skriva all vår kod i Main-metoden.

Glöm inte ReadKey

Om du glömmer att lägga till Console.ReadKey(); längst ner i dina program så kommer de att stängas av direkt när programmet når sin sista rad.

Som du säkert märkte när du skrev in koden så började Visual Studio att visa förslag på vad du kunde skriva. Vill du att Visual Studio ska skriva ut det markerade förslaget så kan du trycka på tab-tangenten, mellanslag eller punkt. Detta kallas kodkomplettering, och Microsoft kallar den kodkompletteringen som finns i Visual Studio för Intellisense. Man kan spara mycket tid och felstavningar genom att använda Intellisense så mycket som möjligt.

Intellisense-tips

Skriv cw och tryck sedan på tab-tangenten två gånger för att skriva Console.Writeline();

Kommentarer och mer utmatning

Man kan skriva ut mer text i sitt program än vad vi gjorde i Hello World. Det går bra att skriva hur många Console.WriteLine som helst, glöm bara inte semikolon i slutet. I detta exempel finns ytterligare ett sätt att skriva ut text, nämligen Console.Write som skriver ut text utan att skapa en ny rad efteråt. Koden innehåller också kommentarer, en kommentar är text i koden som inte tas med när programmet körs. Genom att skriva två snedstreck så blir resten av texten på raden en kommentar, och där kan man alltså skriva vad man vill. Man kan också skapa kommentarer över flera rader genom att skriva /* , då kommer all text i filen vara en kommentar till man skriver */. Notera också att man kan införa hur många tomma rader man vill på vilka ställen man vill i koden, detta påverkar inte programmet men kan göra det lättare att se vilka delar av programmet som hör ihop.

I exemplet visas också hur man kan dela upp det man vill skriva på flera rader för att en kodrad inte ska bli så lång så att den blir svår för programmeraren att läsa. Avsluta texten du håller på att skriva, skriv ett plustecken och gör därefter en ny rad. Du kan nu börja skriva en ny text inom citationstecken.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exempel_2._2___Mer_om_utmatning
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Här är lite text.");
            Console.WriteLine("Här är lite mer text på samma rad.");
            Console.WriteLine("Denna text kommer på en ny rad.");
            // Efter två snedstreck så kan man skriva vad man vill
            // Detta är en kommentar
            Console.WriteLine("Den här texten kommer också på en ny rad.");
            // Console.Write("Denna text skrivs inte ut");

            // Man kan göra nya rader i koden före och efter plustecknen
            Console.WriteLine("Denna texten kommer " +
                "på samma rad när programmet " +
                "körs.");

            /*
             * Man kan skriva kommentarer på flera
             * rader på detta sätt.
             */

            // Nästa rad behövs för att programmet inte ska stängas av direkt
            Console.ReadKey();
        }
    }
}

Kommentarerna i ett program brukar som sagt användas för att förklara delar av koden som kan vara lite svår att förstå vid en första anblick men de kommer i denna bok dessutom användas för att förklara nya programmeringskoncept.

Ska jag skriva kommentarer när jag gör uppgifterna?

Ställ dig själv frågan "Kommer jag kunna förstå all kod i mitt program om ifall jag stänger ner det nu och öppnar det igen om två månader?" Om svaret är ja behöver du inte skriva någon kommentar, annars bör du göra det.

Uppgift 2.2

Skapa ett program som skriver ut följande text:

Detta är ett program gjort i C#.
Programmet skriver ut text på flera rader.
Tryck på valfri tangent för att avsluta programmet.

Lösningstips 2.2

Använd en Console.WriteLine för varje rad som du vill skriva ut.

Lösningsförslag 2.2

Specialtecken

När vi bestämmer vad som ska skrivas ut i en Console.Write så börjar och slutar texten med citationstecken. Men hur gör man om man vill skriva ut citationstecken? Om man försöker skriva in ett citationstecken någonstans i mitten kommer Visual Studio visa att det är något som är felskrivet, det tolkas nämligen som att du inte vill skriva ut mer text efter det citationstecknet. För att skriva ut ett citationstecken så måste det föregås av ett bakstreck, \. Vill man skriva ut ett bakstreck så måste detta också föregås av ett bakstreck (det blir alltså två bakstreck på rad).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exempel_2._3___Specialtecken
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Här skrivs ett \"-tecken ut.");
            Console.WriteLine("Ett bakstreck \\ syns här.");
            Console.WriteLine("Här blir det \n en ny rad och \t en tab.");

            // Avsluta inte programmet förrän användaren trycker på en tangent
            Console.ReadKey();
        }
    }
}

I exemplet visas också \n som ger en ny rad (bokstaven n står för ”new line”) och \t som ger samma effekt som när du trycker på tabtangenten. Det finns fler specialtecken än de som visas här.

Var hamnar programmen?

Det som händer när du trycker på Start i Visual Studio är att ditt program kompileras, det innebär att Visual Studio tar koden du har skrivit och gör ett program av det. Alla program som skrivs i C# måste kompileras innan de kan köras. Vi ska nu hitta var ditt program (din .exe-fil) hamnar när du kompilerar det.

Det lättaste sättet att hitta sina program är att ta hjälp av Visual Studio. I den högra delen av Visual Studio finns ett fönster som heter Solution Explorer som ser ut som bilden nedan.

Solution Explorer

Solution Explorer innehåller en översikt över alla de och inställningar som vårt program har. I denna bok kommer vi mestadels enbart skriva kod i filen Program.cs som skapas varje gång vi gör ett nytt program.

Högerklicka på raden som i bilden ovan heter Solution 'Uppgift 2.1' (1 project), i ditt program kommer den att heta något annat beroende på vad du döpte programmet till. I menyn som dyker upp väljer du Open Folder in File Explorer. Då kommer ett nytt fönster öppnas med den mapp som innehåller ditt program.

Om du går vidare i mappen som har samma namn som ditt program och sedan går till mappen bin och därefter Debug så hittar du ditt körbara program. Ett körbart program är en fil med filändelsen .exe. Det finns även en del andra filer i denna map som Visual Studio använder, men ditt körbara program består enbart av .exe-filen. Du kan starta dina program som du gjort genom att köra .exe-filen härifrån, du behöver alltså inte ha Visual Studio igång för att köra dina program när du väl har kompilerat dem.

Programmet måste kompileras innan det kan köras

Ett program måste kompileras, d.v.s. översättas från kod till ett körbart program, innan man kan köra det. Programmets .exe-fil skapas när du kompilerar det vilket sker automatiskt när du startar programmet i Visual Studio. Om du aldrig har startat ditt program i Visual Studio kommer du inte att hitta någon .exe-fil.

Uppgift 2.3

Skapa ett program som skriver ut följande text:

"Hej" hörde jag någon säga på stan.
Efter en stund svarade någon annan också med ett "Hej!".
Lösningstips 2.3

Glöm inte att använda ett \ innan varje citationstecken.

Lösningsförslag 2.3

Ett snyggare konsollfönster

Det är möjligt att ändra vilka färger som konsollfönstret har när ett program körs, även fönstrets titel kan ändras. Det gör man på följande sätt.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exempel_2._4___Snyggare_konsollprogram
{
    class Program
    {
        static void Main(string[] args)
        {
            // Ändra fönstrets titel
            Console.Title = "Exempel 2.4";

            // Ändra bakgrundsfärg till mörkröd            
            Console.BackgroundColor = ConsoleColor.DarkRed;
            Console.Clear();

            // Ändra textfärgen till vit
            Console.ForegroundColor = ConsoleColor.White;

            Console.WriteLine("Ett testmeddelande");

            // Avsluta inte programmet förrän användaren trycker på en tangent
            Console.ReadKey();

        }
    }
}

Kommentarerna i koden beskriver vad som händer på raden efteråt. I detta fall så är dessa kommentarer inte särskilt nödvändiga om man har programmerat ett tag, men när man skriver större och mer komplicerade program så är kommentarer väldigt användbara. Kommentarerna hjälper både andra men också en själv att förstå vad koden gör, vilket kan vara lätt glömt om man inte har öppnat koden till ett program på några dagar. Kommentarerna kommer i denna bok göra det lättare för dig att följa med i de exempel som finns.

Bakgrundsfärg

Om du inte använder Console.Clear() efter att du har bytt bakgrundsfärg så får inte hela bakgrunden den färgen, endast texten som skrivs. Testa att ta bort Console.Clear() från exemplet och se hur det ser ut när programmet körs.

De färger man har att välja på är de olika ConsoleColor som finns. När du skrivit punkten efter så kan du bläddra i listan över de olika färger du kan välja på. ConsoleColor är en enum, du kommer att lära dig mer om vad detta är i ett senare kapitel.

Uppgift 2.4

Skapa ett program där du skriver ut lite text. Programfönstrets titel ska vara ”Svenska flaggan” och fönstrets utseende ska påminna om den svenska flaggan genom att bakgrundsfärgen ska vara blå och textfärgen gul.

Lösningstips 2.4

Glöm inte att använda ett Console.Clear() efter att du har bytt bakgrundsfärg, annars får inte hela fönstret den blå bakgrundsfärgen.

Lösningsförslag 2.4

Blandade uppgifter till kapitel 2

Uppgift 2.5

Skapa ett program där man måste trycka på en valfri tangent tre gånger för att avsluta det. När programmet startas ska det säga ”Tre tangenttryckningar kvar”, efter en tryckning ”Två tangenttryckningar kvar” och efter två tryckningar ska det säga ”En tangenttryckning kvar”.

Lösningstips 2.5

Varje gång du har en Console.ReadKey() så måste man trycka på en tangent för att gå vidare, så använd flera Console.ReadKey() i ditt program.

Lösningsförslag 2.5

Uppgift 2.6

Utöka programmet i den föregående uppgiften genom att skriva en kommentar till varje rad i koden som förklarar vad nästkommande kodrad gör.

Lösningsförslag 2.6

Uppgift 2.7

Skapa ett program som ritar ut en triangel med två citationstecken i mitten som ser ut så här

   /\
  /  \
 / ”” \
/______\

Lösningstips 2.7

Glöm inte att använda ett \ innan varje citationstecken och varje \ som du vill skriva ut.

Lösningsförslag 2.7

Uppgift 2.8

Skapa ett program som har samma utseende som en Windows-dator förr fick när den kraschade, alltså med blå bakgrund och vit text. Skriv ut lite text som gör så att det ser ut som att datorn har fått ett allvarligt fel.

Lösningsförslag 2.8

Kommentarer