StringOperationen = unlogisch

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

beanage.johannes

Betreff: StringOperationen = unlogisch

BeitragSo, Nov 01, 2009 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, ich beschäftige mich zz. sehr stark mit Cocoa, bzw. Cocoa/Obj-C ist meine "hauptprache" geworden, und erst an diesem punkt ist mir aufgefallen wie unlogisch es in BMax ist das man Strings addieren kann. weil die strings in BMax ja auch ein Type sind... das ist einfach unbegreiflich... da ist doch was falsch!

Danke

Xeres

Moderator

BeitragSo, Nov 01, 2009 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
...und was genau ist damit jetzt nicht in Ordnung?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Holzchopf

Meisterpacker

BeitragSo, Nov 01, 2009 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte würze diesen Thread noch mit etwas Sinn, resp. einer Aussage, die eine Diskussionsbasis bietet, sonst erlaub' ich mir, ihn in den Trash wandern zu lassen.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

beanage.johannes

BeitragSo, Nov 01, 2009 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Sinn? der sinn ist ja das das ganze unsinn ist, wenn man sich das durcliest sollte man das erkennen, ich möchte wissen WARUM ist das UNSINNIG^^

SINN:

Man kann doch nicht einfach 2 Types addieren ?? was soll das, das gehhhhht NICHT!!

a:string = "a"
b:string = "b"

wenn ich die mit + addiere dann geht das . das sollte aber unmöglich sein.
und warum kann man a:string = "lol" einfach mal ohne methode nen wert übergeben obwohl a ein type ist?
bei einer INT geht das ja , aber ein string ist in bmax eine klasse, das ist unlogisch und nerft mich einfach irgendwie weil ich gerne wissen möhte warum sowas gehen soll.

sinn verstanden?

Nicdel

BeitragSo, Nov 01, 2009 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist daran jetzt so schlimm? Mag ja sein, dass BMax die Strings intern noch mal anders handelt, so dass das Ganze möglich ist...

Edit: Gibt es in BMax nicht auch wie in C++ die Möglichkeit Operatoren in Types zu definieren?
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

beanage.johannes

BeitragSo, Nov 01, 2009 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ach vergesst es... bmax is sowieso böööse Very HappyD

Nicdel

BeitragSo, Nov 01, 2009 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso?

Der String-Type:
Code: [AUSKLAPPEN]

struct BBString{
   BBClass*   clas;
   int      refs;
   int      length;
   BBChar   buf[];
};
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Artemis

BeitragSo, Nov 01, 2009 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Man könnte jetzt schreiben, dass es einfach geht. Punkt.

Warum sollte so etwas nicht gehen: Es gibt sprachen, wie Ruby da kannst du sogar jeder Klasse eine +/-/*/÷-Methode definieren, sodass man zwei Vektoren, die man als Klasse definiert hat, einfach addieren kann und nicht so einen Schmarrn wie vektorc = vektora.add(vektorb) machen muss. Das ist doch total unintuitiv.

Außerdem ist String afaik keine "echte" Klasse. Versuch mal eine Klasse von String abzuleiten. (Type A extends String). Geht nicht.

EDIT:
Die Frage ist ja eigentlich, warum es deiner Meinung nach nicht möglich sein sollte Objekte zu addieren. Nur weil es keine direkten Zahlenwerte sind. Wir benutzen schließlich Hochsprachen, damit wir uns nicht darum kümmern müssen, was jetzt eine Adresse oder ein Pointer ist und was etwas anderes oder wie auch immer. Dann kann man so nützliche Features auch einbauen.
  • Zuletzt bearbeitet von Artemis am So, Nov 01, 2009 20:33, insgesamt einmal bearbeitet

Nicdel

BeitragSo, Nov 01, 2009 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das meinte ich. In C++ geht doch so was wie:

Code: [AUSKLAPPEN]

class string
{

    public:
    char* str;
    string operator+(string str)
    {

          return this.str + str.str;
       
    }
};

  • Zuletzt bearbeitet von Nicdel am So, Nov 01, 2009 20:36, insgesamt 3-mal bearbeitet

coolo

BeitragSo, Nov 01, 2009 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Java machts mit dem String "addieren" genau so, sehe nicht warum das falsch sein solle.

Und deiner Logik nach zu urteilen sind Arrays auch ein Regelbruch. Nämlich sowas ist in BMax auch erlaubt:Code: [AUSKLAPPEN]
Local MeinArray:String[10]
MeinArray[5]="Hallo"
Print MeinArray.length-1 'Oha die Arrays sind ja auch Types :O


Also wenn du was zu meckern hast, dann beschwehr dich beim Salzamt und nicht bei uns...

EDIT:
Da waren andere schneller Sad
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

Artemis

BeitragSo, Nov 01, 2009 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch was:

Wie ist es denn deiner Meinung nach "richtig"? Mit einem zusätzlichen String-Additions-Operator, wie in PHP?

Oder per Methoden "asd".add("asd")?

beanage.johannes

BeitragSo, Nov 01, 2009 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
eigentlich per methode, da das für mich einfach logisch erscheint^^ Very Happy

Nicdel

BeitragSo, Nov 01, 2009 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder mit Methoden, die durch Operatoren dargestellt werden?
Für mich eher der Operator. Mit Methode sieht das bescheuert aus und ist komplizierter.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

beanage.johannes

BeitragSo, Nov 01, 2009 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
kk jedem das seine Smile

maximilian

BeitragSo, Nov 01, 2009 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas nennt sich Operatorüberladung und ist in vielen Programmiersprachen vorhanden, nebenbei auch unglaublich sinnvoll und alles andere als unglogisch (ich fürchte, du weißt nichtmal was "Logik" überhaupt ist).

Du musst die Schuld deines dermaßen beschränkten Horizonts nicht auf BMax schieben, jwolf255.
Variety is the spice of life. One day ignore people, next day annoy them.

ChaosCoder

BeitragSo, Nov 01, 2009 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau, im Grunde ist es eigtl. unlogisch warum in BlitzMax Operatoren für die Klasse String definiert sind, man sie aber für keine andere Klasse definieren kann.
Naja, da hat Mark wohl ein bisschen was intern zusammengehackt.

Schade eigentlich. Aber da auch schon Funktionen nicht überladen werden können, wäre es auch sehr merkwürdig, wenn man das jetzt für Operatoren könnte. Rolling Eyes
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

Nicdel

BeitragSo, Nov 01, 2009 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist wirklich schade, in C++ fand ich es sehr nützlich Smile
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Thunder

BeitragSo, Nov 01, 2009 23:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@jwolf555: Du musst es als Feature sehen. Es ist doch viel einfacher Strings durch den "+" Operator aneinander anzuhängen als wenn wir immer sowas schreiben müssten:

Code: [AUSKLAPPEN]
strcat(str2,str1)
strcat(str2,str3)


um nur 3 Strings zu "addieren". Im Fall BlitzMax erledigt das der Compiler und ich bin froh darüber und finde es schade, dass man Strings nicht auch "multiplizieren" kann.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Nicdel

BeitragMo, Nov 02, 2009 7:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du so was wie "Hallo"*3 = "HalloHalloHallo"?
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

d-bug

BeitragMo, Nov 02, 2009 8:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde eher sagen, dass Obj-C da etwas umständlich vorgeht:

Code: [AUSKLAPPEN]

NSString *mystring = @"Hallo";
mystring = [mystring stringByAppendingString:@" Welt"];


da ist mir

Code: [AUSKLAPPEN]
Local mystring:String = "Hallo" + " Welt"


doch um einiges einfacher!

Mag vielleicht daran liegen, dass ich BMax abhängig bin. Razz

cheers

~edit~
es heißt "stringByAppendingString", nicht "byAppendingString". ObjC ist eben nicht so meins! :>
  • Zuletzt bearbeitet von d-bug am Mo, Nov 02, 2009 13:17, insgesamt einmal bearbeitet

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group