+ - 0:00:00
Notes for current slide
Notes for next slide

Objektorienterad programmering (1DV024)

Operatorer, styrstrukturer, undantag, filer

1 / 10

Upphovsrätt för detta verk

Detta verk är framtaget av Mats Loock i anslutning till kursen Objektorienterad programmering (1DV024) vid Linnéuniversitetet.

Allt innehåll i detta verk förutom fotografier, ikoner, bild på kurslitteraturen samt Linnéuniversitetets logotyp och symbol, är licensierad under en Creative Commons-licens Creative Commons Erkännande 4.0 Internationell Licens .

Du får använda detta verk så här

  • kopiera hela eller delar av innehållet
  • sprida hela eller delar av innehållet
  • visa hela eller delar av innehållet offentligt och digitalt
  • konvertera innehållet till annat format
  • du får även göra om innehållet

Om du förändrar innehållet så ta inte med fotografier, ikoner samt Linnéuniversitetets logotyp och symbol i din nya version!

Vid all användning måste du ange källan: ”Linnéuniversitetet – Objektorienterad programmering (1DV024)” och en länk till https://coursepress.lnu.se/kurs/objektorienterad-programmering och till Creative Common-licensen här ovan.

2 / 10

Aritmetiska operatorer

  • +, -, *, /, %
    • Se upp med heltalsdivision!
      • Om operanderna är heltal trunkeras resultatet.
    • %, modulus operatorn
      • Om q = x / y och r = x % y då är x = q * y + r.
      • Om 5 = 17 / 3 och 2 = 17 % 3 då är 17 = 5 * 3 + 2.
    • Värden med enbart siffror tolkas som heltal av typen int.
    • Värden innehållande decimalpunkt tolkas som flyttal av typen double.
    • Värden som avslutas med d (eller D) tolkas som flyttal av typen double.
    • Värden kan omvandlas explicit.
int result = 42 + 3 * 9753 / 136721; // 42!
double celsius = (42 - 32) * 5 / 9d; // 42°F ≈ 5,6°C
int celsiusTruncated = (int)celsius; // 5
int celsiusRounded = (int)Math.Round(celsius, 0, MidpointRounding.AwayFromZero); // 6
3 / 10

Booleska uttryck

  • Booleska uttryck har alltid ett resultat som är true eller false.
  • <, >, <=, >=, ==, !=
    • Jämförelse operatorer.
  • ||, &&, !
    • Logiska operatorer.
int number = int.Parse(Console.ReadLine());
string result = "Heltalet är ";
result += number < 0 ? "negativt." : "positivt.";
int? secretNumber = GetSecretNumber(); // returnerar null om okänt!
Console.WriteLine($"Det hemliga talet är {secretNumber?.ToString() ?? "okänt"}.");
4 / 10

Styrstrukturer

  • Villkorsuttryck måste alltid vara ett booleskt uttryck.
  • Selektioner
int number;
if (int.TryParse(Console.ReadLine(), out number) && number % 2 == 1)
{
Console.WriteLine($"Heltalet {number} är udda.");
}
  • Iterationer
    • while-satsen
    • do while-satsen
    • for-satsen
    • foreach-satsen
int[] numbers = Enumerable.Range(1, 1000).ToArray();
foreach (int element in numbers)
{
Console.WriteLine(element);
}
Console.WriteLine(element); // Error CS0103 The name 'element' does not exist in the current context
5 / 10
  • break
  • continue
  • switch
    • fall through
    • goto

Felhantering

  • En metod kan skicka information om ett fel genom att kasta ett undantag.
static int ReadOddInt()
{
int number;
if (!int.TryParse(Console.ReadLine(), out number) || number % 2 != 1)
{
throw new InvalidOperationException("Inte ett udda heltal.");
}
return number;
}
  • Ett undantag kan fångas och hanteras.
double number;
try
{
Console.Write("Ange ett flyttal: ");
number = double.Parse(Console.ReadLine());
Console.WriteLine($"Du matade in {number}.");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("Ett finally-block exekveras alltid!");
}
6 / 10
  • short circuit evaluation
  • out
  • finally

Olika hantering beroende av fel

  • Det är möjligt att ha flera catch-block i en och samma try-catch-sats.
  • Ordningen är viktig!
  • (Klassen Exception är basklass för alla övriga typer av undantag.)
byte number;
try
{
Console.Write("Ange ett tal i det slutna intervallet mellan 0 och 255: "); // IOExeption
number = byte.Parse(Console.ReadLine()); // ArgumentNullExecption, FormatException, OverflowException
// IOExeption, OutOfMemoryException, ArgumentOutOfRangeException
Console.WriteLine($"Du matade in talet {number}."); // IOExeption
}
catch (OverflowException)
{
Console.WriteLine("Talet är antingen för stort eller för litet.");
}
catch (FormatException)
{
Console.WriteLine("Det inmatade är inte i ett korrekt format.");
}
catch (Exception ex) // Måste vara sist!
{
Console.WriteLine(ex.Message);
}
7 / 10

Filhantering

  • Klassen StreamWriter använder du för att skriva text till en fil.
using (var writer = new StreamWriter(@"MyTextFile.txt"))
{
writer.WriteLine("Mats är");
writer.WriteLine("snäll.");
}
  • Klassen StreamReader använder du för att läsa en fil med text.
using (var reader = new StreamReader(@"MyTextFile.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
  • using expanderas till en try-finally-sats, där finally-blocket säkerställer att filen stängs.
.method private hidebysig static void Main(string[] args) cil managed
{ // >>> Code left out for brevity! <<<
.try
{
} // end .try
finally
{
IL_002e: callvirt instance void [mscorlib]System.IDisposable::Dispose()
} // end handler
} // end of method Program::Main
8 / 10

Läsa JSON från fil

movies.json

[
"The Shawshank Redemption",
"The Godfather",
"The Godfather: Part II",
"The Dark Knight",
"Pulp Fiction"
]
  • Läser fil till sträng och deserialiserar till en array med strängar.
string json;
using (var reader = new StreamReader("movies.json"))
{
json = reader.ReadToEnd();
}
var movies = JsonConvert.DeserializeObject<string[]>(json);
Console.WriteLine(string.Join(", ", movies));
  • Läser fil till sträng och deserialiserar till ett List-objekt med strängar.
var json = File.ReadAllText("movies.json");
var movies = JsonConvert.DeserializeObject<List<string>>(json);
Console.WriteLine(string.Join(", ", movies));
9 / 10

install-package newtonsoft.json

Deserialisera JSON direkt från fil

movies.json

[
"The Shawshank Redemption",
"The Godfather",
"The Godfather: Part II",
"The Dark Knight",
"Pulp Fiction"
]
  • Läser fil och deserialiserar till en array med strängar.
string[] movies;
using (var reader = File.OpenText("movies.json"))
{
var serilazier = new JsonSerializer();
movies = (string[])serilazier.Deserialize(reader, typeof(string[]));
}
Console.WriteLine(string.Join(", ", movies));
10 / 10

Upphovsrätt för detta verk

Detta verk är framtaget av Mats Loock i anslutning till kursen Objektorienterad programmering (1DV024) vid Linnéuniversitetet.

Allt innehåll i detta verk förutom fotografier, ikoner, bild på kurslitteraturen samt Linnéuniversitetets logotyp och symbol, är licensierad under en Creative Commons-licens Creative Commons Erkännande 4.0 Internationell Licens .

Du får använda detta verk så här

  • kopiera hela eller delar av innehållet
  • sprida hela eller delar av innehållet
  • visa hela eller delar av innehållet offentligt och digitalt
  • konvertera innehållet till annat format
  • du får även göra om innehållet

Om du förändrar innehållet så ta inte med fotografier, ikoner samt Linnéuniversitetets logotyp och symbol i din nya version!

Vid all användning måste du ange källan: ”Linnéuniversitetet – Objektorienterad programmering (1DV024)” och en länk till https://coursepress.lnu.se/kurs/objektorienterad-programmering och till Creative Common-licensen här ovan.

2 / 10
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow