kann das eigentlich keine andere Programmiersprache?
- BeS
- Moderator
- Beiträge: 3236
- Registriert: 17.04.2002 18:30:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Stuttgart
-
Kontaktdaten:
kann das eigentlich keine andere Programmiersprache?
Hallo,
in Ada95 kann ich eigene Typen auf der Basis von vorhandenen Typen deklarieren.
Zum Beispiel:
type meter is new float;
oder
subtype geburtsjahr is integer range 1900..integer'last;
Ist sowas in irgendeiner anderen Sprachen möglich? In C, C++, Java und C# konnte ich bisher nichts vergleichbares finden. Will aber auch nicht ausschließen, dass ich was übersehen habe.
Kennt jemand eine Sprache außer Ada95 wo dies möglich ist?
in Ada95 kann ich eigene Typen auf der Basis von vorhandenen Typen deklarieren.
Zum Beispiel:
type meter is new float;
oder
subtype geburtsjahr is integer range 1900..integer'last;
Ist sowas in irgendeiner anderen Sprachen möglich? In C, C++, Java und C# konnte ich bisher nichts vergleichbares finden. Will aber auch nicht ausschließen, dass ich was übersehen habe.
Kennt jemand eine Sprache außer Ada95 wo dies möglich ist?
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support
Ich spreche von Freier Software!
Ich spreche von Freier Software!
- finupsen
- Beiträge: 1327
- Registriert: 21.04.2004 20:07:05
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Hallo,
da java objektorientiert ist (und c++ natürlich auch) kannst du beliebige typen mit beliebigen eigenschaften und methoden erzeugen.
sogar sooo beliebig, daß man sie objekte nennt
da java objektorientiert ist (und c++ natürlich auch) kannst du beliebige typen mit beliebigen eigenschaften und methoden erzeugen.
sogar sooo beliebig, daß man sie objekte nennt
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.
... und Wasser ist naß.
- BeS
- Moderator
- Beiträge: 3236
- Registriert: 17.04.2002 18:30:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Stuttgart
-
Kontaktdaten:
Hallo finupsen,
ich will aber keine "komplizierten" Klassen oder Strukturen sondern ganz einfache eigene Datentypen. Das geht ja afaik mit deinem Ansatz nicht.
ich will aber keine "komplizierten" Klassen oder Strukturen sondern ganz einfache eigene Datentypen. Das geht ja afaik mit deinem Ansatz nicht.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support
Ich spreche von Freier Software!
Ich spreche von Freier Software!
- finupsen
- Beiträge: 1327
- Registriert: 21.04.2004 20:07:05
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Ja , das stimmt wenn wir über primitive datentypen sprechen.
Aber da es die möglichkeit gibt aus prototypen ein objekt zuerzeugen ,
ist deine forderung eigentlich hinfällig.
Du kannst ja ein objekt erzeugen , das die selben eigenschaften wie ein
primitiver datentyp hat.
Aber da es die möglichkeit gibt aus prototypen ein objekt zuerzeugen ,
ist deine forderung eigentlich hinfällig.
Du kannst ja ein objekt erzeugen , das die selben eigenschaften wie ein
primitiver datentyp hat.
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.
... und Wasser ist naß.
- BeS
- Moderator
- Beiträge: 3236
- Registriert: 17.04.2002 18:30:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Stuttgart
-
Kontaktdaten:
jein.finupsen hat geschrieben: Du kannst ja ein objekt erzeugen , das die selben eigenschaften wie ein
primitiver datentyp hat.
Ich kann natürlich eine Klasse Meter mit der Variable value erstellen. Dann muß ich aber immer mit foo.value darauf zugreifen und nicht einfach mit foo wie bei einem einfachen Datentyp und Eingränzungen wie beim zweiten Beispiel sind auch nicht möglich.
Dazu kommt, dass bei java afaik jede instanz einer Klasse auf den heap kommt, was bei vielen Variablen dieses types natürlich nicht unbedingt optimal ist, da wäre ein einfacher Datentyp welcher auf den stack kann deutlich besser.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support
Ich spreche von Freier Software!
Ich spreche von Freier Software!
also etwas so "schönes" wie subtype kannte ich bis jetzt noch nicht, das habe ich noch in keiner sprache gesehen. zumindest nicht auf so einfache art und weise. klar, du kannst dir wie schon gesagt einen eigenen typ mittels vererbung definieren oder auch aliase setzen (in c z.b. einen typ "meineKleineZahl" als short int setzen (wie in deinem ersten beispiel), aber etwas wie subtype kenne ich auch nicht..
mfg
mauser
mfg
mauser
- BeS
- Moderator
- Beiträge: 3236
- Registriert: 17.04.2002 18:30:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Stuttgart
-
Kontaktdaten:
ok, in C gibt esmauser hat geschrieben:zumindest nicht auf so einfache art und weise. klar, du kannst dir wie schon gesagt einen eigenen typ mittels vererbung definieren oder auch aliase setzen (in c z.b. einen typ "meineKleineZahl" als short int setzen (wie in deinem ersten beispiel), aber etwas wie subtype kenne ich auch nicht..
typedef int meter;
typedef int foot;
aber das ist bei C nur "syntactic sugar", da ich z.B. bei diesem Beispiel weiterhin "foot" und "meter" miteinander verrechnen kann und z.B. auch "meter" an eine Funktion die "foot" erwartet übergeben kann. Das schöne an Ada95 ist, dass ich so mit einer sauberen Deklaration von vornherein dumme Fehler verhindern kann, da Ada dann eben nichtmehr so einfach "foot" und "meter" miteinander verrechnet.
Eigentlich ein ganz einfacher Mechanismus um Programme übersichtlicher und sicherer zu machen, aber es scheint (fast) keine Sprache neben Ada95 zu geben die einem dieses Möglichkeit gibt.
Zuletzt geändert von BeS am 09.12.2005 21:07:06, insgesamt 1-mal geändert.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support
Ich spreche von Freier Software!
Ich spreche von Freier Software!
Re: kann das eigentlich keine andere Programmiersprache?
Moin,BeS hat geschrieben:Hallo,
in Ada95 kann ich eigene Typen auf der Basis von vorhandenen Typen deklarieren.
Kennt jemand eine Sprache außer Ada95 wo dies möglich ist?
also für dein zweites Beispiel passen meine Beispiele nicht.
Aber man in Turbo Pascal mit dem Record Befehl einen neuen Datentyp erstellen, der aus bisherigen besteht.
Zum Beispiel
Code: Alles auswählen
TYPE Tkarteikarte = RECORD
name : STRING[20];
lk : STRING[3];
punkte : INTEGER
END;
VAR schuelerdb : Tkarteikarte;
zb (X=alphanumerisch | 9 = nummerisch):
Code: Alles auswählen
01 meinlinux.
05 distri PIC X(6).
05 version PIC 9(2).
Wenn könnte auch "Debian31" nach meinlinux packen und kann sich dann Version ausgeben lassen.
Außerdem kann ich in Cobol ein Feld redifinieren. Dann kann man ein Feld als String oder als Zahl anfassen.
Python kann das, allerdings geht das dort etwas anders, da Python weakly typed ist, d.h. nicht Variablen haben einen Typ, sondern Werte.
Beispiel:Jetzt kann x nur Werte zwischen 0 und 10 annehmen. Man kann auch mittels Metaclassen neue Typen definieren, die bestimmte Bedingungen erfüllen. Man müsste dann natürlich schreibenda "x" ja keinen Typ hat.
Wenn man das ganze wirklich nutzt, würde man natürlich Metaclassen definieren.
Kurz gesagt: es geht, und zwar noch eleganter als hier beschrieben, aber ich wollte jetzt nicht den Metaclassenhammer rausholen
Beispiel:
Code: Alles auswählen
class Foo(object):
def __setattr__(self,name,value):
if name == "x":
if 0<x<10:
object.__setattr__(self,name,value)
else:
raise ValueError,"value must be between 0 and 10"
Code: Alles auswählen
foobar.x = MeinTyp(42)
Wenn man das ganze wirklich nutzt, würde man natürlich Metaclassen definieren.
Kurz gesagt: es geht, und zwar noch eleganter als hier beschrieben, aber ich wollte jetzt nicht den Metaclassenhammer rausholen