Frage von mAin0x, 120

Gibt es eine Programmiersprache wie C verbessert?

Antwort
von grtgrt, 45

Ich an deiner Stelle würde lieber den im Kommentar https://www.gutefrage.net/frage/programmiersprache-c-richtig-lernen-aber-wie#com... beschriebenen Ansatz meinC verfolgen,

d.h. ganz gezielt nur die Teile von C++ nutzen, die du persönlich als sinnvolle Erweiterung von C siehst.

Kommentar von TeeTier ,

Das finde ich auch vernünftig, und es machen ja auch viele Leute so.

Allerdings, WENN man schon die Möglichkeit hat C++ zu nutzen, warum sollte man dann auf all die schicken Features freiwillig verzichten? Am Anfang muss man alles natürlich erst mal lernen, aber dann ... Profit! :)

Expertenantwort
von TeeTier, Community-Experte für programmieren, 33

C++ ist genau das was du suchst. Wieso hast du Probleme damit?

string s{"irgendwas"};

Oder z. B. ...

getline(cin, s);

Was ist daran schlecht?

Und was genau meinst du mit ...

der Möglichkeit, zwischen Char und String zu trennen

Bei C++ sind Strings in Objekten gekapselt, die man sogar sehr komfortabel von und nach char-Arrays umwandeln kann. Der Zugriff auf ein einzelnes Zeichen des Strings geht mit "s[i]", genau wie bei einem char-Array.

Und was genau verstehst du unter einem leichteren File-Handling? Bei C++ kannst du genau das machen, wie bei C auch, und obendrein gibt es ja noch die Streams usw.

Und gerade für deinen letzten Punkt ist C++ geradezu prädestiniert, da es für all diese Dinge MINDESTENS Bindings in C++ geben wird. :)

Zum Schluss noch einige gut gemeinte Ratschläge, die dich auf deine Fehler hinweisen sollen:

  1. Eine Programmiersprache ist nicht nur Syntax! Dazu gehören nämlich auch Konzepte und Paradigmen. Ein Java-Programmierer sollte nicht versuchen in seinen C++ Programmen Java zu programmieren. Gerade Anfänger neigen dazu. Dinge wie Mehrfachvererbung und keine erzwungene Basisklasse ermöglichen völlig andere Konzepte. Und auch wenn oft das Gegenteil geschrieben wird, C und C++ sind grundverschieden. Man sollte in C++ nicht dazu neigen, C-Code zu schreiben.
  2. An deinem letzten kurzen Absatz deiner Frage sieht man, dass du einen gravierenden Fehler machst. Gerade Einsteiger sollten in den ersten paar Jahren einfach blind das nachmachen, was von Lehrbüchern, Dozenten, Lehrern, erfahrenen Kollegen oder anderen Profis vorgemacht wird. Denn bis man ein Konzept verinnerlicht, und es dann nicht nur versteht, sondern auch effizient einsetzen kann, vergehen einige Jahre. Du hast dir leider ein völlig falsches Bild von OOP angewöhnt. Eigentlich wird dadurch alles sicherer, einfacher, wartbarer, testbarer und sauberer. Ein Nachteil fällt mir spontan nicht ein.

Bitte beachte vor allem Punkt 2, denn - glaube mir - du bist da auf dem völlig falschen Holzweg. Ich schreibe auch sehr oft kleine Konsolenprogramme mit C++, und dank OOP spare ich mir dabei so einiges an Arbeit!

Beispiel C:

void foo(void) {
char *buf = malloc(8192);

if (buf) {
qux(buf);
free(buf);
}
}

Das selbe in C++:

void foo() {
vector<char> buf;
qux(buf);
}

Dabei wird intern Speicher auf dem Heap angelegt, und am Ende der Funktion automatisch wieder freigegeben. Genau wie malloc() und free() ... nur eben schicker. :)

Der Overhead bei C++ ist meistens fast nicht vorhanden. Sogar im Gegenteil: Dadurch dass C++ viel mehr Features als C bietet, und man viel mehr mit der Syntax ausdrücken kann, sind C++ Programme oftmals deutlich effizienter kompilierbar, als bei C.

Und Überladung ist auch eine sehr praktische Sache!

Beispiel C:

float f  = sinf(1.0F);
double d = sin(1.0);
long double l = sinl(1.0L);

In C++ ist das möglich:

auto f = sin(1.0F);
auto d = sin(1.0);
auto l = sin(1.0L);

Auch wenn man "auto" vermeiden möchte und die Typen explizit angibt, hat man immer noch den Vorteil der Überladung.

Naja, gibt noch eine Million mehr Sachen, die dir gefallen dürften ... wenn du dich denn darauf einlassen würdest. :)

Vielleicht solltest du C++ doch noch mal eine Chance geben. Achte dabei auf gute Lehrmaterialien! (Youtube taugt definitiv nicht!)

Schönen Tag noch! :)

PS: Apropos "funktionale Programmierung" ... ich nehme an, das bezog sich auf Python, da C ja imperativ und nicht funktional ist.

Aber die C++ Standardbibliothek hat auch einen "<functional>" Header. Außerdem sind viele funktionale Gimmicks überall dort vorhanden, wo sie Sinn ergeben. (in <algorithm> z. B.)

Und im Übrigen: Wenn du die funktionale Programmierung jetzt nicht mit der imperativen verwechseln solltest, dann sei dir gesagt, dass die "generische" Programmierung, so wie sie von C++ verstanden wird, eine echte Perle ist! Die generischen Features von z. B. Java können sich dahinter verstecken!

PPS: Alle Sprachen haben Vor- und Nachteile. Du erwartest jetzt Funktionalitäten aus wirklich modernen Hochsprachen, bei einer Sprache, die überhaupt nicht darauf ausgelegt ist. C hat natürlich auch viele Vorteile im Vergleich zu C++, und C++ hat teilweise sehr schräge Implementierungen, aber eine Eier legende Wollmilchsau, die genau das tut, was du dir vorstellst, wirst du nicht vorgefertigt finden können.

Mit einem klein bisschen an Bereitschaft sich einzuarbeiten, und etwas Offenheit für Neues, wirst du C++ schätzen lernen!

Kommentar von mAin0x ,

Ich weiß ihre Mühe wirklich zu schätzen aber niemand wird mich von C++ überzeugen :(

Antwort
von ceevee, 28

Was du für Probleme mit C++ hast, kann ich zwar ebenfalls nicht so ganz nachvollziehen (das wäre auch mein erster Vorschlag gewesen), aber wie auch immer... mit Python kannst du auch wunderbar prozedural programmieren (ich glaub mit Ruby geht das auch), wenn dir das Freude bereitet. Wenn die Performance noch eine Rolle spielt, dann nimmste halt Cython.

https://blog.newrelic.com/2015/04/01/python-programming-styles/

Kommentar von GluecklicheHuhn ,

Ruby for the win! Ruby ist eine super Programmiersprache. Noch entwickelter und intelligenter als Python! Natürlich geht das mit Ruby auch!

Antwort
von ihgalis, 30

Vielleicht suchst du auch nur Libraries für C, die einfach an den Stellen helfen, die du nennst. Ansonsten probier doch mal die Exoten aus, zumindest aus meiner Sicht, sind dies Exoten:

Kommentar von TeeTier ,

Das sind zwei meiner Lieblingssprachen. Zählen die wirklich als Exoten? Mit Haskell arbeiten doch unglaublich viele Leute, und mit Erlang hat sich jeder schon mal beschäftigt, der über den Tellerrand schaut. :)

Antwort
von EightSix, 31

Falls deiner Meinung nach nichts die funktionale Programmierung übertrifft solltest du deine Fähigkeiten erweitern - deine Meinung ändert sich dann automatisch.

Kommentar von TeeTier ,

Ja, das ist richtig! Neue Konzepte ermöglichen immer eine völlig neue Denk- und Arbeitsweise. Mir persönlich gefällt die generische und vor allem die aspektorientierte und die subjektorientierte Programmierung (AOP, SOP) wahnsinnig gut. :)

Kommentar von mAin0x ,

Ich habe oben einen Fehler gemacht, ich meinte die Prozeduale. Ich kenne die objektorientierte, die funktionale und die prozeduale.

Keiner wird mich von was anderem überzeugen!

Kommentar von ceevee ,

Keiner wird mich von was anderem überzeugen!

Wie gut kannst du Entwurfsmuster?

Ich hab schon Code von Programmieranfängern gesehen, die Objektorientierung nicht richtig verstanden haben und sie deswegen doof finden. Da war dann z.B. alles static, jeder Fliegenschiss ein eigenes Objekt oder es wurden völlig unnötige Vererbungshierarchien aufgebaut. Normalerweise ist es so, dass man mit OOP besseren Code produziert, wenn das Programm etwas umfangreicher/komplexer wird.

Kommentar von mAin0x ,

Ich programmiere regelmäßig Objektorientiert (auch beruflich)

Ich suche eine Programmiersprache, die mir Spaß macht...

Expertenantwort
von Marbuel, Community-Experte für Computer & PC, 24

Gibt es meines Wissens nach nicht. Mir ist zumindest keine bekannt. Wirklich große Projekte scheinst du noch nicht gemacht zu haben. Würdest du beruflich programmieren, würdest du schnell  erkennen, dass auch in normalen Prozessen Objektorientierung sehr hilfreich ist. Und bestimmt auch nicht schlechter les- oder gar wartbar, sondern genau das Gegenteil.

Kommentar von mAin0x ,

Ich entwickle Software in C# und programmiere in Ruby und Python, ich hatte vorher noch C als 4. Sprache, welche ich kann, ich suche nun nach Ersatz

Antwort
von J0T4T4, 26

Eigentlich fragst Du nach C++, auch wenn es Dir noch nicht ganz passt ;)

- Strings sind einfach

- char ist was anderes als string

- fstream ist nicht so komplex

- na gut, hier musst Du mit dem cin und cout ein wenig spielen, schwer ist es trotzdem nicht

- die APIs der Betriebssysteme stellen Dir eigentlich alles erdenkliche (auch wenn die eher C sind)

Dazu kommt, dass OOP eine optionale Sache ist, was Dir doch bei irgendeinem Anlass die Möglichkeit lässt, darauf zurückzugreifen.

Kommentar von TeeTier ,

na gut, hier musst Du mit dem cin und cout ein wenig spielen, schwer ist es trotzdem nicht

Sehe ich auch so:

string buf;
cout << "Gib etwas ein: ";
getline(cin, buf);
cout << "Dein Text: " << buf << endl;
Kommentar von mAin0x ,

cin und out sind ein albtraum. ich werde es trotzdem in Betracht ziehen, c++ anzusehen

Antwort
von Morge4now, 71

Bis auf die Tatsache, dass Java objektorientiert ist, erfüllt es meiner Meinung nach alle anderen Kriterien.

Um die Objektorientierung zu "umgehen" kannst du alles in einer Klasse schreiben. (Stelle ich mir allerdings sehr umständlich vor 'auch bezüglich Wartung' und ist wahrlich kein guter Stil)

Kommentar von Morge4now ,

Groovy ist noch eine Script-Version die einen noch größeren Funktionsumfang hat. Allerdings java-basierend.

Kommentar von mAin0x ,

Wie ich erwähnt habe kann ich C# (die Windows Version von Java)
deshalb ist diese Antwort nicht hilfreich.

Ich kann mit Objektorientierung leben.
In C# und Ruby ist sie auch unumgänglich.
Das muss auch nicht schlechtes sein, allerdings bevorzuge ich imperative Sprachen.
Bei diesen kann man viel besser nachvollziehen, was der Code tut.

Es geht darum, eine zweite, mächtige und imperative aber einfachere Sprache zu lernen.

Java ist deshalb in vielerlei Hinsicht das Gegenteil, von dem, ws ich suche.

Kommentar von Borgler94 ,

Java ist eindeutig nicht die Windows Version von irgendwas :P und so wie du deine Anforderungen beschrieben hast eig. genau was du suchst ;)

Keine passende Antwort gefunden?

Fragen Sie die Community