Forum: PC-Programmierung Visual Studio, welche Sprache?


von Nash (Gast)


Lesenswert?

Hallo,
ich habe Visual Studio 2008 und möchte folgende Programmieraufgabe 
lösen. Ich habe eine Gui, in der ich zwei Datenbasen als Textdatei 
auswählen kann.
In der Datenbasis_01 wird der erste String_01 von oben ausgelesen und in 
Datenbasis_02 gesucht, wobei der String_01 in Datenbasis_02 wiederum ein 
Teil von einem String_02 ist. Anschließend werden alle weiteren 
String_01 so in Datenbasis_02 gesucht...Was noch passiert ist erstmal 
unwichtig...

Womit ist es jetzt besser zu programmieren, mit MFC, C# oder VB ???

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Ich würde dir vorschlagen, alle Sprachen einmal anzugucken.
Dann nimmst du die Sprache, die du am schönsten findest.

Deine Aufgabe lösen können alle!

So einen Thread sollte man gar nicht erst starten.
Das werden wieder 50000 Seiten und am Ende ist es genau wie am Anfang!

Diskussionenspunkte die ich hier noch erwarte:
- Aber Microsoft ist bööööse!
- Nimm C++, denn das ist vieeeeel schneller
- Nimm bloß kein C#, denn das kann ABCXYZ nicht!
- Wenn du Visual Basic nimmst wirst du dein Problem nie lösen
- Aber in C# kann ich meine Array noch schneller iterieren


Zu den Sprachen an sich:
Die sind wirklich alle fast gleich, denn sie basieren alle auf dem 
Microsoft .NET Framework!

Mit freundlichen Grüßen,
Valentin Buck

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Programmiere, womit Du programmieren kannst.

Die "Aufgabe" kann mit praktisch allen Programmiersprachen erfüllt 
werden.

MFC ist übrigens keine Programmiersprache, das ist eine 
Klassenbibliothek für C++.

Du musst also unterscheiden:
"echtes" C++

C++/CLI (früher "managed C++"), setzt auf .Net auf
C# setzt auf .Net auf
VB setzt auf .Net auf

"echtes" C++ kann, muss aber nicht, mit MFC genutzt werden. Statt der 
MFC lassen sich auch komplett andere Klassenbibliotheken wie wxWidgets 
oder Qt nutzen -- wobei die drei den Schwerpunkt auf graphische 
Benutzeroberflächen legen. In "echtem" C++ lässt sich natürlich auch 
boost nutzen.

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Und wir nähern uns Punkt 2!
Yay!

Allerdings hat Rufus T. Firefly recht!
Das ganze gibt es entweder als MFC oder als CLR (Common Language 
Runtime), wo du dann auch die ganzen .NET Klassen (Umfang etwa wie bei 
Java, mit managed Direct X und managed Open GL deutlich mehr) hast.

Ich habe alle drei Visual Studio Express Editions und benutze sie je 
nach Einsatzzweck.

Mit freundlichen Grüßen,
Valentin Buck

von 2pfennige (Gast)


Lesenswert?

Solche Fragen kämen gar nicht erst auf, wenn der OP überhaupt schon in 
irgendwas programmieren könnte (Unterstellung, liest sich aber genau 
so!).
Dann würde er nämlich genau dafür erstmal eine Lösung suchen.

von franz (Gast)


Lesenswert?

Ich kann meinen 2 Vorrednern nur zustimmen .... also, am Ende ist es 
Deine Wahl, und die Frage, welche Programmiersprache Du am besten 
wählst, endet schlimmstenfalls in Flamewar.
Ich habe mich damals einfach fuer Microsoft Visual Studio C++ Express 
entschieden, und damit auch ans Ziel gekommen. Liegt Dir eine andere 
Sprache mehr, dann probier halt die.
Hat das geholfen? Nein - na dann kannste ja schreiben, welche Sprachen 
Du kannst und schon programmiert hast. Und wo (beim Probieren mit dem 
Visual Studio) Probleme auftraten.  :-)
Viel Erfolg! - Es ist imho leichter, einfach mal zu probieren anstatt 
andrer Leute Meinung abzuwarten, sich damit auseinander zu setzen und 
dann durchzustarten. Zumindestens in diesem Fall. :-)

von Thomas (Gast)


Lesenswert?

Also,

unter der Annahme, dass du noch keine Programmiersprache richtig kennst 
und gerade neu einsteigst und auch nicht auf irgendwelche 
Kompatibilitäten achten musst gibt es auf deine Frage nur eine Antwort:

Nimm C#

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

franz schrieb:
> Ich habe mich damals einfach fuer Microsoft Visual Studio C++ Express
> entschieden, und damit auch ans Ziel gekommen.

Und wofür hast Du Dich da entschieden? Das ist kein Sprache, sondern ein 
Compiler für sogar drei unterschiedliche Programmiersprachen:

C
C++ ("echtes C++")
C++/CLI bzw. "Managed C++", setzt auf .Net auf

von Nash (Gast)


Lesenswert?

Da ich viel mit Array-Strings mache (Pointer), dachte ich an C++ mit 
MFC. Aber es muss ja auch mit C# gehen, vor allem hab ich mir grad 
WindowsForms angesehen. Ist WindowsForms die Weiterentwicklung von MFC?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nash schrieb:
> Ist WindowsForms die Weiterentwicklung von MFC?

Nein, die haben überhaupt nichts miteinander zu tun. MFC ist eine 
C++-Klassenbibliothek, die "echtes" C++ voraussetzt, WindowsForms setzt 
auf .Net auf und ist daher nur aus .Net-Sprachen sinnvoll nutzbar.
C++/CLI heißt zwar C++, hat aber nur oberflächliche Ähnlichkeiten zu 
C++.

Einem Programmieranfänger würde ich heute nicht mehr dazu raten, sich in 
die MFC einzuarbeiten, zwar hat Microsoft mit VS2010 endlich mal wieder 
mehr für die MFC-Unterstützung getan, aber die MFC ist trotzdem als 
"angezählt" zu betrachten.

Außerdem ist die MFC nicht mit dem kostenlosen Visual C++ Express 
nutzbar.

Wenn jemand "echtes" C++ lernen möchte, halte ich es für ratsam, eine 
hersteller- und plattformunabhängige Klassenbibliothek à la Qt oder 
wxWidgets zu nutzen.

Wenn es nur darum geht, unter Windows zu programmieren, dann kann man 
sich natürlich auch von der .Net-Welt becircen lassen.
Dann (und nur dann) ist auch sowas wie WindowsForms nutzbar.
Die Programmiersprache aber ist dann C++/CLI (oder eine der anderen 
.Net-Sprachen) und hat mit C++ wenig mehr als den Namen gemein.

von Arc N. (arc)


Lesenswert?

Nash schrieb:
> Hallo,
> ich habe Visual Studio 2008 und möchte folgende Programmieraufgabe
> lösen. Ich habe eine Gui, in der ich zwei Datenbasen als Textdatei
> auswählen kann.
> In der Datenbasis_01 wird der erste String_01 von oben ausgelesen und in
> Datenbasis_02 gesucht, wobei der String_01 in Datenbasis_02 wiederum ein
> Teil von einem String_02 ist. Anschließend werden alle weiteren
> String_01 so in Datenbasis_02 gesucht...Was noch passiert ist erstmal
> unwichtig...
>
> Womit ist es jetzt besser zu programmieren, mit MFC, C# oder VB ???

F#
1
let getResults fn1 fn2 =
2
    let a1 = System.IO.File.ReadAllLines(fn1)
3
    let a2 = System.IO.File.ReadAllLines(fn2)
4
5
    Array.map (fun s1 -> (s1, (Array.filter (fun (s2 : string) -> s2.Contains(s1)) a2))) a1

Liefert das passende Array von Tupeln zurück. Jedes Tupel besteht aus 
dem String aus a1 und einem möglicherweise leeren Array mit Strings aus 
a2 die den gesuchten String aus a1 enthalten.
Ähnlich einfach geht's nur mit LINQ in C# oder VB.

von Vlad T. (vlad_tepesch)


Lesenswert?

Nash schrieb:
> Hallo,
> ich habe Visual Studio 2008 und möchte folgende Programmieraufgabe
> lösen. Ich habe eine Gui, in der ich zwei Datenbasen als Textdatei
> auswählen kann.
> In der Datenbasis_01 wird der erste String_01 von oben ausgelesen und in
> Datenbasis_02 gesucht, wobei der String_01 in Datenbasis_02 wiederum ein
> Teil von einem String_02 ist. Anschließend werden alle weiteren
> String_01 so in Datenbasis_02 gesucht...Was noch passiert ist erstmal
> unwichtig...

ich kann dem nicht so ganz folgen.
Für mich hört sich das so an, wie grep in einer schleife aufrufen.

inPerl ein 10-Zeiler , aber ohne GUI


edit:
1
 open(FILE1, shift) or die "could not open file 1";
2
 open(FILE2, shift) or die "could not open file 2";
3
 my @file2 = <FILE2>;   # if file is really big do something smarter
4
 close(FILE2);
5
 while(my $line = <FILE1>){
6
   chomp($line);        # consume newline at end of line
7
   print "finding $line\n";
8
   print grep($line, @file2)."\n\n";
9
 }
10
 close(FILE1);

von Yalu X. (yalu) (Moderator)


Lesenswert?

Arc Net schrieb:
> F#

Wollte ich eigentlich auch schon vorschlagen, aber dann muss Nash erst
auf VS 2010 updaten, und ich bin mir nicht sicher, ob F# auch in einer
Gratisversion von VS mit dabei ist.
1
> let getResults fn1 fn2 =
2
>     let a1 = System.IO.File.ReadAllLines(fn1)
3
>     let a2 = System.IO.File.ReadAllLines(fn2)
4
> 
5
>     Array.map (fun s1 -> (s1, (Array.filter (fun (s2 : string) -> s2.Contains(s1)) a2))) a1

Mit der letzten Zeile lässt sich übrigens noch schön golfen :)

Mittels partial Function Application kannst du sicher das zweite Lambda
wegbekommen, so dass die Zeile kürzer und übersichtlicher wird. Ich kann
kein F#, deswegen ist hier der entsprechend Ausdruck in Haskell, bei dem
ich mit etwas syntaktischem Zucker auch das erste Lambda und eine ganze
Reihe von Klammern eliminiert habe:
1
      [(s1, filter (isInfixOf s1) a2) | s1 <- a1]

Jetzt kann das fast schon ein Haskell/F#-Unkundiger verstehen ;-)

von Arc N. (arc)


Lesenswert?

Yalu X. schrieb:

> Mit der letzten Zeile lässt sich übrigens noch schön golfen :)

;-)

> Mittels partial Function Application kannst du sicher das zweite Lambda
> wegbekommen, so dass die Zeile kürzer und übersichtlicher wird. Ich kann
> kein F#, deswegen ist hier der entsprechend Ausdruck in Haskell, bei dem
> ich mit etwas syntaktischem Zucker auch das erste Lambda und eine ganze
> Reihe von Klammern eliminiert habe:
>
>
1
>       [(s1, filter (isInfixOf s1) a2) | s1 <- a1]
2
>
>
> Jetzt kann das fast schon ein Haskell/F#-Unkundiger verstehen ;-)

In Haskell ist häufig der Weg das Ziel :-)
1
    let filter = Array.filter
2
    let contains search (s : string) = s.Contains search
3
    [| for s in a1 ->  (s,  filter (contains s) a2) |] 
4
    // oder mit mehr Klammern
5
    [| for s in a1 -> (s, [| for s2 in a2 do if s2.Contains(s) then yield s2 |]) |]

p.s. www.tryfsharp.org falls man das mal ohne VS ausprobieren will

von Yalu X. (yalu) (Moderator)


Lesenswert?

Arc Net schrieb:
> In Haskell ist häufig der Weg das Ziel :-)

Nein, genau das Gegenteil: Je kürzer der Weg (der Programmcode), desto
besser. Und fast immer dient die Kürze auch der Übersichtlichkeit,
genauso wie das Vermeiden vieler verschachtelter Klammern. Ausnahmen
bestätigen die Regel ;-)

Aber das ist in F# doch genauso. Es ist sicher nicht primär eine
Geschmacksfrage, wenn einem dieses
1
    [| for s in a1 ->  (s,  filter (contains s) a2) |]
besser gefällt als dieses:
1
    Array.map (fun s1 -> (s1, (Array.filter (fun (s2 : string) -> s2.Contains(s1)) a2))) a1

So, jetzt bin ich mal gespannt, ob Nash sich schon ein VS 2010 besorgt
hat, um in den Genuss von F# zu kommen ;-)

von Arc N. (arc)


Lesenswert?

Yalu X. schrieb:
> Arc Net schrieb:
>> In Haskell ist häufig der Weg das Ziel :-)
>
> Nein, genau das Gegenteil: Je kürzer der Weg (der Programmcode), desto
> besser. Und fast immer dient die Kürze auch der Übersichtlichkeit,
> genauso wie das Vermeiden vieler verschachtelter Klammern. Ausnahmen
> bestätigen die Regel ;-)

So (drastisch) sollte das nicht gemeint sein, sondern eher ausdrücken 
das
1) mehr (und hin und wieder zu viel) auf den Stil/die Eleganz wert 
gelegt wird
2) meistens schon die saubere Formulierung reicht, um zu sehen/zeigen 
das die Funktion korrekt ist

> So, jetzt bin ich mal gespannt, ob Nash sich schon ein VS 2010 besorgt
> hat, um in den Genuss von F# zu kommen ;-)

p.s. mal sehen wie viele Unis hier mitziehen: Die CMU fängt im 
Grundstudium mit Standard ML und (einem Subset von) C an. Kein Java, 
kein C++ etc.
http://existentialtype.wordpress.com

von Markus (Gast)


Lesenswert?

Was haltet Ihr eigentlich von PureBasic?

Gruß
Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.