Abo
  1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Ada und Spark: Mehr…

Das Winkel-Beispiel

  1. Thema

Neues Thema Ansicht wechseln


  1. Das Winkel-Beispiel

    Autor: Urbautz 11.06.19 - 14:48

    class Winkel {

    private int16 winkel;

    public int16 Winkel
    get { return winkel;}
    set {
    if(this.verify(value))
    { this.winkel = value; }
    else throw new WinkelException w("not valid")
    }

    public bool verify(int16 winkelwert) {
    if(winkelwert < 0) return false;
    if(winkelwert > 359) return false;
    return true;
    }
    // Hier diverse eh benötigte Winkelfunktionen einbauen
    public add (Winkel w2) ....
    }

  2. Re: Das Winkel-Beispiel

    Autor: HankTheTank 11.06.19 - 15:44

    Das ist aber nicht Deklarativ.
    Deine Fehler siehst du erst zur Laufzeit...
    Außerdem ist da viel boilerplate code nötig....

    Andere Sprachen machen manche Sachen echt cool.
    Sonst ist mir C# auch näher.

  3. Re: Das Winkel-Beispiel

    Autor: \pub\bash0r 11.06.19 - 16:06

    HankTheTank schrieb:
    --------------------------------------------------------------------------------
    > Das ist aber nicht Deklarativ.
    > Deine Fehler siehst du erst zur Laufzeit...

    Gut, man könnte jetzt sicher mit C++ Templates ..... jaja ich geh ja schon wieder.

  4. Re: Das Winkel-Beispiel

    Autor: kayozz 11.06.19 - 16:45

    Das war auch mein Gedanke. Noch ein paar Optimierungen.

    * struct passt hier besser als class
    * verwendet operator overloading für eine natürlichere nutzung

    > Winkel winkel1 = 30;
    > Winkel winkel2 = 350;
    > Winkel winkel3 = winkel1 + winkel2;

    * verwendet code contracts für compile time checking (leider aktuell nicht mehr von microsoft im Visual Studio integriert, aber über Umwege weiterhin nutzbar, hoffentlich ändert sich das irgendwann wieder, siehe https://stackoverflow.com/questions/40767941/does-vs2017-work-with-codecontracts

    schon hat man das gleiche in C# umgesetzt.

    > public struct Winkel
    > {
    > private int value;
    >
    > public Winkel(int value)
    > {
    > // add nuget package CodeContracts.MSBuild for compile time validation of code contracts
    > Contract.Requires(value >= 0 && value < 365, "Winkel muss zwischen 0 und 359 liegen");
    > this.value = value;
    > }
    >
    > public override string ToString()
    > {
    > return $"{value}°";
    > }
    >
    > public static Winkel operator +(Winkel a, Winkel b)
    > {
    > int value = ((int)a + (int)b) % 360;
    > return new Winkel(value);
    > }
    >
    > public static implicit operator int(Winkel winkel)
    > {
    > return winkel.value;
    > }
    >
    > public static implicit operator Winkel(int value)
    > {
    > Contract.Requires(value >= 0 && value < 365, "Winkel muss zwischen 0 und 359 liegen");
    > return new Winkel(value);
    > }
    >
    > }

  5. Re: Das Winkel-Beispiel

    Autor: HankTheTank 11.06.19 - 16:50

    Ja, das geht.
    Aber andere Sprachen brauchen viel weniger boiler-plate Code.
    Das finde ich schon wichtig.
    C# ist toll und mächtig.
    Aber es hat auch schwächen.

  6. Re: Das Winkel-Beispiel

    Autor: HankTheTank 11.06.19 - 16:51

    Ich würde das gerne mit Template meta programming sehen!

  7. Re: Das Winkel-Beispiel

    Autor: kayozz 12.06.19 - 09:20

    HankTheTank schrieb:
    --------------------------------------------------------------------------------
    > Ja, das geht.
    > Aber andere Sprachen brauchen viel weniger boiler-plate Code.
    > Das finde ich schon wichtig.
    > C# ist toll und mächtig.
    > Aber es hat auch schwächen.

    Ja, C# bzw. .NET hat auch Schwächen. Aber das Argument

    > Aber andere Sprachen brauchen viel weniger boiler-plate Code.
    > Das finde ich schon wichtig.

    würde ich so nicht stehen lassen. Es gibt zwar Anwendungsfälle wo ein Datentyp einen bestimmten Wertebereich hat, der Minimalwert 0 ist und wenn man beim Maximalwert einen addiert soll 0 rauskommen, aber außer Grad fällt mir aktuell auch kein anderer ein. Und dafür eine eigene Syntax:

    > Type Mod_Angle is mod 360;

    in eine Sprache einzubauen, finde ich hingegen sehr speziell.

    Allerdings spricht IMHO nicht dagegen sich selber einen T4 Code Generator zu bauen, der z.B. aus Dateien der Form "Mod_Angle.ada" mit dem Inhalt "Type Mod_Angle is mod 360;" und "Angle.ada" mit dem Inhalt "Type Angle is range 0 .. 359;" und einem "ada.tt" T4 Template die entsprechenden "Mod_Angle.cs" und "Angle.cs" Dateien erzeugt. Das ist eine Sache von einem Nachmittag.

  1. Thema

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Zum Login

Stellenmarkt
  1. Fresenius Medical Care Thalheim GmbH, Stollberg, Sachsen bei Ansbach
  2. IAV GmbH, Berlin, München, Gifhorn, Chemnitz
  3. DATAGROUP Köln GmbH, Köln
  4. Amprion GmbH, Pulheim-Brauweiler

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Top-Angebote
  1. (u. a. Total war - Three Kingdoms für 35,99€, Command & Conquer - The Ultimate Collection für 4...
  2. 116,09€ (10% Rabatt mit dem Code PREISOPT10)
  3. 33,95€


Haben wir etwas übersehen?

E-Mail an news@golem.de


Radeon RX 5700 (XT) im Test: AMDs günstige Navi-Karten sind auch super
Radeon RX 5700 (XT) im Test
AMDs günstige Navi-Karten sind auch super

Die Radeon RX 5700 (XT) liefern nach einer Preissenkung vor dem Launch eine gute Leistung ab: Wer auf Hardware-Raytracing verzichten kann, erhält zwei empfehlenswerte Navi-Grafikkarten. Bei der Energie-Effizienz hapert es aber trotz moderner 7-nm-Technik immer noch etwas.
Ein Test von Marc Sauter

  1. Navi 14 Radeon RX 5600 (XT) könnte 1.536 Shader haben
  2. Radeon RX 5700 (XT) AMD senkt Navi-Preise noch vor Launch
  3. AMD Freier Navi-Treiber in Mesa eingepflegt

Orico Enclosure im Test: Die NVMe-SSD wird zum USB-Stick
Orico Enclosure im Test
Die NVMe-SSD wird zum USB-Stick

Wer eine ältere NVMe-SSD über hat, kann diese immer noch als sehr schnellen USB-Stick verwenden: Preiswerte Gehäuse wie das Orico Enclosure nehmen M.2-Kärtchen auf, der Bridge-Chip könnte aber flotter sein.
Ein Test von Marc Sauter

  1. Server Supermicro mit Chassis für 40 E1.S-SSDs auf 2 HE
  2. Solid State Drive Longsys entwickelt erste SSD nur mit chinesischen Chips
  3. SSDs Samsung 970 Pro mit 2TB und WD Blue 3D mit 4TB

Google Maps in Berlin: Wenn aus Aussetzfahrten eine neue U-Bahn-Linie wird
Google Maps in Berlin
Wenn aus Aussetzfahrten eine neue U-Bahn-Linie wird

Kartendienste sind für Touristen wie auch Ortskundige längst eine willkommene Hilfe. Doch manchmal gibt es größere Fehler. In Berlin werden beispielsweise einige Kleinprofil-Linien falsch gerendert. Dabei werden betriebliche Besonderheiten dargestellt.
Von Andreas Sebayang

  1. Kartendienst Qwant startet Tracking-freie Alternative zu Google Maps
  2. Nahverkehr Google verbessert Öffi-Navigation in Maps
  3. Google Maps-Nutzer können öffentliche Veranstaltungen erstellen

  1. Telefónica: Software-Fehler beschert O2-Kunden erhöhtes Datenvolumen
    Telefónica
    Software-Fehler beschert O2-Kunden erhöhtes Datenvolumen

    Telefónica gibt sich kulant. Der Mobilfunknetzbetreiber hatte einigen O2-Kunden aufgrund eines Software-Fehlers ein doppelt so hohes ungedrosseltes Datenvolumen angezeigt. Als Reaktion erhalten die betroffenen Kunden das erhöhte Datenvolumen.

  2. Elektroauto-Sounddesign: Und der Benz macht leise "wuuuuh"
    Elektroauto-Sounddesign
    Und der Benz macht leise "wuuuuh"

    Daimler hat die Töne präsentiert, die Elektroautos bei langsamer Fahrt künftig in den USA und in Europa künstlich produzieren, um andere Verkehrsteilnehmer über ihre Präsenz zu informieren. Das Rückwärtsfahren bietet Diskussionsstoff.

  3. Nach Kartellamtskritik: Amazon ändert Umgang mit Marketplace-Händlern
    Nach Kartellamtskritik
    Amazon ändert Umgang mit Marketplace-Händlern

    Das Onlinekaufhaus Amazon ändert auf Druck des Bundeskartellamts seinen Umgang mit Händlern, die über Marketplace ihre Produkte verkaufen. Im Gegenzug wird ein sogenanntes Missbrauchsverfahren eingestellt.


  1. 08:47

  2. 08:32

  3. 07:53

  4. 07:36

  5. 07:15

  6. 20:10

  7. 18:33

  8. 17:23