FAQ |
Kalender |
![]() |
#21 | |||
|
||||
Flitig postare
|
Citat:
|
|||
![]() |
![]() |
![]() |
#22 | ||
|
|||
Flitig postare
|
Ja, eller så ser man till och skriva ordentliga tester enligt BDD eller TDD.
|
||
![]() |
![]() |
![]() |
#23 | |||
|
||||
Flitig postare
|
Jobbigt att skriva enhetstester för att täcka upp enkla slarvfel som kompilatorn snappar upp direkt tycker jag, därför jag håller mig till c# istället för php. Php har säkert en del styrkor och man ska nog inte försöka förändra dess natur genom att försöka få den att emulera ett mer strikt språk som Conny verkar vilja göra här.
|
|||
![]() |
![]() |
![]() |
#24 | ||
|
|||
Flitig postare
|
Citat:
Kompilatorn fångar, av egen erfarenhet, upp fel som nybörjare ofta begår; syntax fel. Erfarna utvecklare missar sällan semikolon eller har ett mellanslag på fel ställe. Vi gör istället logiska fel, fel som inte en kompilator kan hitta. |
||
![]() |
![]() |
![]() |
#25 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Helst skulle jag önska att man kan deklarera: public class Person { // declataion of private variables private _firstname=""; private _lastname=""; // Jag skippar konstruktorn i detta exempel.... public __set_firstname($value) { $this->_firstname = $value; } public __get_firstname() { return $this->_firstname; } public __set_lastname($value) { $this->_lastname = $value; } public __get_lastname() { return $this->_lastname; } // Jag skippar även ToString-metoden.... } När man sen accessar egenskapen så vill jag göra så här: private $kalle = new Person(); $kalle.firstname = "Kalle"; $kalle.lastname = "Pettersson"; echo $kalle.firstname . " " . $kalle.lastname Resultatet ska då bli: "Kalle Pettersson" OBSERVERA att det inte alls är samma sak som att ha en funktion som geter getFirstName och en funktion som heter setFirstName, det är INTE getters och setters.... Ni som har jobbat med andra objektorienterade språk vet nog vad jag menar... . . . Senast redigerad av Conny Westh den 2012-07-31 klockan 02:46 |
||
![]() |
![]() |
![]() |
#26 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Om du inte begriper objektorienterad programmering så bör du inte komma med fullkomligt idiotiska inlägg här i forumet. |
||
![]() |
![]() |
![]() |
#27 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Dvs exempelvis som i C# där man kan ha en metod för att validera värden när de sätts till en metod, 'är värdet utan för det giltigas gräns så kan man endera låta bli att lagra värdet i klassen eller göra en Throw Exception("Med ett vettigt felmeddelande").... När man läser av ett värde så kan man exempelvis ha en automatisk konvertering, formatering, lagring av accessstatistik eller inläsning från någon extern källa. detta utan att programmeraren som använder egenskapen behöver bekymra sig över hur det går till. |
||
![]() |
![]() |
![]() |
#28 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Kompilatorn fångar upp just stavfel eftersom den upptäcker att du inte deklarerat den felstavade variabeln och du får ett felmeddelande som talar om exakt vilken variabel, konstant funktion, klass eller annan identifierare som du stavat fel på samt exakt vilken rad och kolumn där felet börjar. Kompilatorn hittar många enkla fel och underlättar programmerarens arbete enormt på den punkten. Några saker som kompilatorn gör enträget: - Kollar syntax - Kollar att alla variabler som används i programmet är deklarerade - Kollar att alla variabler som är deklarerade används, annars får man en varning - Kollar att alla uttryck som tilldelar en variabel har rätt datatyp (dvs den deklarerade datatypen) - Kollar att alla satser i programmet är avslutade - kollar att alla kodblock är definierade med start och slut - Kollar att identifierarnas scope stämmer . . . Kompilatorn är programmerarens bästa vän... Jag har mycket svårt att acceptera att det fortfarande finns programspråk som saknar kompilator.... De som ligger bakom php har tydligen fått en hel del önskemål från mer erfarna utvecklare om att tighta tillk språket så man får ett något bättre stöd för typning och deklarationer, men jag tycker de hittils gjort det lite till en halvmesyr. Mitt försök är till för att försöka lära mig om det finns möjligheer att strama till språket för att få bättre felhantering redan innan koden tas i produktion. Senast redigerad av Conny Westh den 2012-07-31 klockan 03:22 |
||
![]() |
![]() |
![]() |
#29 | ||
|
|||
Klarade millennium-buggen
|
Så här skulle motsvarande program se ut i C# med de metoder och properties jag var ute efter:
Kod:
using System; using System.Collections.Generic; namespace Test { public class Person { private string _FirstName = ""; public string FirstName { get { return _FirstName; } set { _FirstName = value; } } private string _LastName = ""; public string LastName { get { return _LastName; } set { _LastName = value; } } public Person(string FirstName, string LastName) { this.FirstName = FirstName; this.LastName = LastName; } public override string ToString() { return String.Format("{0} {1}",this.FirstName, this.LastName); } } } Kod:
using System; using System.Collections.Generic; namespace Test { class PersonAge : Person { private int _BirthYear; public int BirthYear { get { return _BirthYear; } set { _BirthYear = value; } } public int Age { get { return (2012 - BirthYear); } } public PersonAge(string FirstName, string LastName, int BirthYear) : base(FirstName, LastName) { this.BirthYear = BirthYear; } public override string ToString() { return String.Format("{0} ({1} år)", base.ToString(), this.Age); } } } Kod:
using System; using System.Collections.Generic; namespace Test { class Program { static void Main(string[] args) { List<Person> personer = new List<Person>(); personer.Add(new Person("Fredrik", "Framberg")); personer.Add(new Person("Greta", "Gavelstam")); personer.Add(new Person("Urban", "Urberg")); personer.Add(new Person("Anna", "Ambtesteg")); Console.WriteLine("Visa alla Person i personer..."); foreach (Person person in personer) { Console.WriteLine(person); } List<PersonAge> personAges = new List<PersonAge>(); personAges.Add(new PersonAge("Henrik", "Hammarberg", 1956)); personAges.Add(new PersonAge("Kristina", "Karlestam", 1983)); personAges.Add(new PersonAge("Hans", "Hallin", 1967)); personAges.Add(new PersonAge("Berit", "Bygdén", 1974)); Console.WriteLine(); Console.WriteLine("Visa alla PersonAge i personAges..."); foreach (PersonAge person in personAges) { Console.WriteLine(person); } Console.WriteLine(); Console.WriteLine("Kopiera alla PersonAge till personer..."); foreach (Person person in personAges) { personer.Add(person); } Console.WriteLine(); Console.WriteLine("Visa alla Person och PersonAge i personer..."); foreach (Person person in personer) { Console.WriteLine(person); } Console.ReadKey(); } } } Kod:
Visa alla Person i personer... Fredrik Framberg Greta Gavelstam Urban Urberg Anna Ambtesteg Visa alla PersonAge i personAges... Henrik Hammarberg (56 år) Kristina Karlestam (29 år) Hans Hallin (45 år) Berit Bygdén (38 år) Kopiera alla PersonAge till personer... Visa alla Person och PersonAge i personer... Fredrik Framberg Greta Gavelstam Urban Urberg Anna Ambtesteg Henrik Hammarberg (56 år) Kristina Karlestam (29 år) Hans Hallin (45 år) Berit Bygdén (38 år) Senast redigerad av Conny Westh den 2012-07-31 klockan 05:53 |
||
![]() |
![]() |
![]() |
#30 | ||
|
|||
Klarade millennium-buggen
|
Efter att ha testkört koden under Ubuntu 12.04 med mono-mcs (en C# clone i Linux-miljön) så kan jag konstatera att resultatet av testkörningen blev identiskt med Windows 7.
Jag bifogar Makefile för den som vill testa: Kod:
################################################################# # File: Makefile # Author: Conny Westh, 2012 ################################################################# # This is a sample program in C#, works perfect in both Windows 7 # with Visual Studio 2010 and in ubuntu 12.04 with mono-mcs # Command: sudo apt-get install mono-mcs # to optain the C# compiler needed in ubuntu. # This sample code demonstrates inheritance, property get and set # override of method ToString(), Polymorphism, calculated read only # property... ################################################################# person : Program.cs Person.cs PersonAge.cs mcs -out:person Program.cs Person.cs PersonAge.cs @chmod 777 person .PHONY : clean clean : @rm -f person *.??~ Makefile~ Senast redigerad av Conny Westh den 2012-07-31 klockan 06:35 |
||
![]() |
![]() |
Svara |
|
|