From d65d82363bea8454e3ae7b014ecc086f46ed4992 Mon Sep 17 00:00:00 2001 From: m90 Date: Sat, 11 Oct 2014 17:31:47 +0200 Subject: add german translation of csharp tutorial --- de-de/csharp-de.html.markdown | 880 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 880 insertions(+) create mode 100644 de-de/csharp-de.html.markdown diff --git a/de-de/csharp-de.html.markdown b/de-de/csharp-de.html.markdown new file mode 100644 index 00000000..9feb1450 --- /dev/null +++ b/de-de/csharp-de.html.markdown @@ -0,0 +1,880 @@ +--- +language: c# +contributors: + - ["Irfan Charania", "https://github.com/irfancharania"] + - ["Max Yankov", "https://github.com/golergka"] + - ["Melvyn Laïly", "http://x2a.yt"] + - ["Shaun McCarthy", "http://www.shaunmccarthy.com"] +translators: + - ["Frederik Ring", "https://github.com/m90"] +filename: LearnCSharp-de.cs +--- +C# ist eine elegante, typsichere und objektorientierte Sprache, mit der Entwickler eine Vielzahl sicherer und robuster Anwendungen erstellen können, die im .NET Framework ausgeführt werden. + +[Mehr über C# erfährst du hier.](http://msdn.microsoft.com/de-de/library/vstudio/z1zx9t92.aspx) + +```c# +// Einzeilige Kommentare starten mit zwei Schrägstrichen: // +/* +Mehrzeile Kommentare wie in C mit /* */ +*/ +/// +/// XML-Kommentare können zur automatisierten Dokumentation verwendet werden +/// + +// Zu Beginn werden die in der Datei verwendeten Namespaces aufgeführt +using System; +using System.Collections.Generic; +using System.Data.Entity; +using System.Dynamic; +using System.Linq; +using System.Linq.Expressions; +using System.Net; +using System.Threading.Tasks; +using System.IO; + +// definiert einen Namespace um Code in "packages" zu organisieren +namespace Learning +{ + // Jede .cs-Datei sollte zumindest eine Klasse mit dem Namen der Datei + // enthalten. Das ist zwar nicht zwingend erforderlich, es anders zu + // handhaben führt aber unweigerlich ins Chaos (wirklich)! + public class LearnCSharp + { + // Zuerst kommen hier Syntax-Grundlagen, + // wenn du bereits Java oder C++ programmieren kannst, + // lies bei "Interessante Features" weiter! + public static void Syntax() + { + // Mit Console.WriteLine kannst du einfachen Text ausgeben + Console.WriteLine("Hello World"); + Console.WriteLine( + "Integer: " + 10 + + " Double: " + 3.14 + + " Boolean: " + true); + + // Console.Write erzeugt keinen Zeilenumbruch + Console.Write("Hello "); + Console.Write("World"); + + /////////////////////////////////////////////////// + // Typen & Variablen + // + // Deklariere eine Variable mit + /////////////////////////////////////////////////// + + // Sbyte - Vorzeichenbehaftete 8-Bit Ganzzahl + // (-128 <= sbyte <= 127) + sbyte fooSbyte = 100; + + // Byte - Vorzeichenlose 8-Bit Ganzzahl + // (0 <= byte <= 255) + byte fooByte = 100; + + // Short - 16-Bit Ganzzahl + // Vorzeichenbehaftet - (-32,768 <= short <= 32,767) + // Vorzeichenlos - (0 <= ushort <= 65,535) + short fooShort = 10000; + ushort fooUshort = 10000; + + // Integer - 32-bit Ganzzahl + int fooInt = 1; // (-2,147,483,648 <= int <= 2,147,483,647) + uint fooUint = 1; // (0 <= uint <= 4,294,967,295) + + // Long - 64-bit Ganzzahl + long fooLong = 100000L; // (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807) + ulong fooUlong = 100000L; // (0 <= ulong <= 18,446,744,073,709,551,615) + // Ganze Zahlen werden standardmäßig - je nach Größe - als int oder + // uint behandelt. Ein nachgestelltes L markiert den Wert als long + // oder ulong. + + // Double - Double-precision 64-bit IEEE 754 Fließkommazahl + double fooDouble = 123.4; // Genauigkeit: 15-16 Stellen + + // Float - Single-precision 32-bit IEEE 754 Fließkommazahl + float fooFloat = 234.5f; // Genauigkeit: 7 Stellen + // Das nachgestellte f zeigt an dass es sich um einen Wert vom Typ + // float handelt + + // Decimal - ein 128-Bit-Datentyp mit mehr Genauigkeit als andere + // Fließkommatypen, und somit bestens geeignet für Berechnung von + // Geld- und Finanzwerten + decimal fooDecimal = 150.3m; + + // Boolean - true & false + bool fooBoolean = true; // oder false + + // Char - Ein einzelnes 16-Bit Unicode Zeichen + char fooChar = 'A'; + + // Strings - im Gegensatz zu allen vorhergehenden Basistypen, die + // alle Werttypen sind ist String ein Referenztyp. Er ist somit + // nullable, Werttypen sind dies nicht. + string fooString = "\"maskiere\" Anführungszeichen, und füge \n (Umbrüche) und \t (Tabs) hinzu"; + Console.WriteLine(fooString); + + // Jeder Buchstabe eines Strings kann über seinen Index referenziert + // werden: + char charFromString = fooString[1]; // => 'e' + // Strings sind unveränderlich: + // `fooString[1] = 'X';` funktioniert nicht + + // Ein Vergleich zweier Strings, unter Berücksichtigung der + // aktuellen sprachspezifischen Gegebenheiten (also z.B. a,ä,b,c in + // deutschsprachigen Umgebungen), und ohne Beachtung von + // Groß- und Kleinschreibung: + string.Compare(fooString, "x", StringComparison.CurrentCultureIgnoreCase); + + // Formatierung, genau wie "sprintf" + string fooFs = string.Format("Mikrofon Check, {0} {1}, {0} {1:0.0}", 1, 2); + + // Datumsangaben und Formatierung + DateTime fooDate = DateTime.Now; + Console.WriteLine(fooDate.ToString("hh:mm, dd MMM yyyy")); + + // Durch ein vorangestelltes @ lässt sich ein mehrzeiliger String + // schreiben. Um " zu maskieren benutzt man "" + string bazString = @"Hier geht es +zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; + + // Die Keywords const oder readonly kennzeichnen eine unveränderliche + // Variable/Konstante. Die Werte von Konstanten werden übrigens + // bereits zur Compile-Zeit berechnet. + const int HOURS_I_WORK_PER_WEEK = 9001; + + /////////////////////////////////////////////////// + // Datenstrukturen + /////////////////////////////////////////////////// + + // Arrays - Index beginnt bei Null + // Die Größe des Arrays wird bei der Deklaration festgelegt + // Die syntaktische Struktur um ein neues Array zu erzeugen sieht + // folgendermaßen aus: + // [] = new []; + int[] intArray = new int[10]; + + // Arrays können auch über ein Array-Literal deklariert werden: + int[] y = { 9000, 1000, 1337 }; + + // Indizierung eines Arrays - Zugriff auf ein bestimmtes Element + Console.WriteLine("intArray @ 0: " + intArray[0]); + // Arrays sind nicht veränderbar + intArray[1] = 1; + + // Listen + // Durch ihre größere Flexibilität kommen Listen weit häufiger + // zum Einsatz als Arrays. Eine Liste wird so deklariert: + // List = new List(); + List intList = new List(); + List stringList = new List(); + List z = new List { 9000, 1000, 1337 }; // intialize + // Die <> kennzeichnen "Generics", mehr dazu unter "Coole Sachen" + + // Listen haben keinen Default-Wert. + // Bevor auf einen Index zugegriffen werden kann, muss dieser + // auch gesetzt worden sein: + intList.Add(1); + Console.WriteLine("intList @ 0: " + intList[0]); + + // Andere interessante Datenstrukturen sind: + // Stack/Queue + // Dictionary (entspricht einer Hash Map) + // HashSet + // Read-only Collections + // Tuple (.Net 4+) + + /////////////////////////////////////// + // Operatoren + /////////////////////////////////////// + Console.WriteLine("\n->Operatoren"); + + // kurze Schreibweise um mehrere Deklarationen zusammenzufassen: + int i1 = 1, i2 = 2; + + // Arithmetik funktioniert wie erwartet: + Console.WriteLine(i1 + i2 - i1 * 3 / 7); // => 3 + + // Modulo + Console.WriteLine("11%3 = " + (11 % 3)); // => 2 + + // Vergleiche + Console.WriteLine("3 == 2? " + (3 == 2)); // => false + Console.WriteLine("3 != 2? " + (3 != 2)); // => true + Console.WriteLine("3 > 2? " + (3 > 2)); // => true + Console.WriteLine("3 < 2? " + (3 < 2)); // => false + Console.WriteLine("2 <= 2? " + (2 <= 2)); // => true + Console.WriteLine("2 >= 2? " + (2 >= 2)); // => true + + // Bitweise Operatoren + /* + ~ Unäres bitweises NICHT + << Verschieben nach links + >> Verschieben nach rechts + & Bitweises UND + ^ Bitweises exklusives ODER + | Bitweises inklusives ODER + */ + + // Inkremente + int i = 0; + Console.WriteLine("\n->Inc/Dec-rementation"); + Console.WriteLine(i++); //i = 1. Post-Inkrement + Console.WriteLine(++i); //i = 2. Pre-Inkrement + Console.WriteLine(i--); //i = 1. Post-Dekrement + Console.WriteLine(--i); //i = 0. Pre-Dekrement + + /////////////////////////////////////// + // Kontrollstrukturen + /////////////////////////////////////// + Console.WriteLine("\n->Kontrollstrukturen"); + + // If-Statements funktionieren wie in C + int j = 10; + if (j == 10) + { + Console.WriteLine("Ich werde ausgegeben"); + } + else if (j > 10) + { + Console.WriteLine("Ich nicht"); + } + else + { + Console.WriteLine("Ich auch nicht"); + } + + // Ternärer Operator + // Anstatt eines einfachen if/else lässt sich auch folgendes schreiben: + // ? : + string isTrue = (true) ? "Ja" : "Nein"; + + // while-Schleife + int fooWhile = 0; + while (fooWhile < 100) + { + //Wird 100mal wiederholt, fooWhile 0->99 + fooWhile++; + } + + // do-while-Schleife + int fooDoWhile = 0; + do + { + //Wird 100mal wiederholt, fooDoWhile 0->99 + fooDoWhile++; + } while (fooDoWhile < 100); + + //for-Schleifen => for(; ; ) + for (int fooFor = 0; fooFor < 10; fooFor++) + { + //Wird 10mal wiederholt, fooFor 0->9 + } + + // foreach-Schleife + // Die normale Syntax für eine foreach-Schleife lautet: + // foreach( in ) + // foreach kann mit jedem Objekt verwendet werden das IEnumerable + // oder IEnumerable implementiert. Alle Auflistungs-Typen + // (Array, List, Dictionary...) im .NET Framework implementieren + // eines dieser beiden Interfaces. + + foreach (char character in "Hallo Welt".ToCharArray()) + { + // Ein Durchgang für jedes Zeichen im String + } + // (ToCharArray() könnte man hier übrigens auch weglassen, + // da String IEnumerable bereits implementiert) + + // Switch Struktur + // Ein Switch funktioniert mit byte, short, char und int Datentypen + // Auch Aufzählungstypen können verwendet werden, genau wie + // die Klasse String, und ein paar Sonderklassen die Wrapper für + // Primitives sind: Character, Byte, Short und Integer + int month = 3; + string monthString; + switch (month) + { + case 1: + monthString = "Januar"; + break; + case 2: + monthString = "Februar"; + break; + case 3: + monthString = "März"; + break; + // Man kann für mehrere Fälle auch das selbe Verhalten + // definierern. Jeder Block muss aber mit einem break-Statement + // abgeschlossen werden. Einzelne Fälle können über + // `goto case x` erreicht werden + case 6: + case 7: + case 8: + monthString = "Sommer!!"; + break; + default: + monthString = "Irgendein anderer Monat"; + break; + } + + /////////////////////////////////////// + // Umwandlung von Datentypen und Typecasting + /////////////////////////////////////// + + // Umwandlung + + // von String nach Integer + // bei einem Fehler wirft diese Code eine Exception + int.Parse("123"); //gibt die Ganzzahl 123 zurück + + // TryParse gibt bei einem Fehler den Default-Wert zurück + // (im Fall von int: 0) + int tryInt; + if (int.TryParse("123", out tryInt)) // Function is boolean + { + Console.WriteLine(tryInt); // 123 + } + + // von Integer nach String + // Die Klasse Convert stellt Methoden zur Kovertierung von unterschiedlichsten Daten zur Verfügung + Convert.ToString(123); // "123" + // oder + tryInt.ToString(); // "123" + } + + /////////////////////////////////////// + // Klassen + /////////////////////////////////////// + public static void Classes() + { + + // Benutze das new-Keyword um eine Instanz einer Klasse zu erzeugen + Bicycle trek = new Bicycle(); + + // So werden Methoden der Instanz aufgerufen + trek.SpeedUp(3); // Es empfiehlt sich immer Getter und Setter zu benutzen + trek.Cadence = 100; + + // ToString ist eine Konvention über die man überlicherweiser + // Informationen über eine Instanz erhält + Console.WriteLine("Infos zu trek: " + trek.Info()); + + // Wir instantiieren ein neues Hochrad + PennyFarthing funbike = new PennyFarthing(1, 10); + Console.WriteLine("Infos zu funbike: " + funbike.Info()); + + Console.Read(); + } // Ende der Methode main + + // Main als Konsolenstartpunkt + // Eine Konsolenanwendung muss eine Methode Main als Startpunkt besitzen + public static void Main(string[] args) + { + OtherInterestingFeatures(); + } + + /////////////////////////////////////// + // Interessante Features + /////////////////////////////////////// + + // Methodensignaturen + + public // Sichtbarkeit + static // Erlaubt einen Zugriff auf der Klasse (nicht auf einer Instanz) + int // Typ des Rückgabewerts, + MethodSignatures( + // Erstes Argument, erwartet int + int maxCount, + // setzt sich selbst auf 0 wenn kein anderer Wert übergeben wird + int count = 0, + int another = 3, + // enthält alle weiteren der Methode übergebenen Parameter (quasi Splats) + params string[] otherParams + ) + { + return -1; + } + + // Methoden können überladen werden solange sie eine eindeutige + // Signatur haben + public static void MethodSignatures(string maxCount) + { + } + + // Generische Typen + // Die Typen für TKey und TValue werden erst beim Aufruf der Methode + // festgelegt. Diese Methode emuliert z.B. SetDefault aus Python: + public static TValue SetDefault( + IDictionary dictionary, + TKey key, + TValue defaultItem) + { + TValue result; + if (!dictionary.TryGetValue(key, out result)) + { + return dictionary[key] = defaultItem; + } + return result; + } + + // Über ihr Interface lassen sich die möglichen Typen auch beschränken + public static void IterateAndPrint(T toPrint) where T: IEnumerable + { + // Da T ein IEnumerable ist können wir foreach benutzen + foreach (var item in toPrint) + { + // Item ist ein int + Console.WriteLine(item.ToString()); + } + } + + public static void OtherInterestingFeatures() + { + // Optionale Parameter + MethodSignatures(3, 1, 3, "Ein paar", "extra", "Strings"); + // setzt explizit einen bestimmten Parameter, andere werden übersprungen + MethodSignatures(3, another: 3); + + // Erweiterungsmethoden + int i = 3; + i.Print(); // Weiter unten definiert + + // Nullables - perfekt für die Interaktion mit + // Datenbanken / Rückgabewerten + // Jeder Wert (d.h. keine Klassen) kann durch das Nachstellen eines ?s + // nullable gemacht werden: ? = + int? nullable = null; // Die explizite Langform wäre Nullable + Console.WriteLine("Mein Nullable: " + nullable); + bool hasValue = nullable.HasValue; // true wenn nicht null + + // ?? ist "syntaktischer Zucker" um einen Defaultwert für den Fall + // dass die Variable null ist festzulegen. + int notNullable = nullable ?? 0; // 0 + + // Implizit typisierte (dynamische) Variablen + // Man kann auch den Compiler den Typ einer Variable bestimmen lassen: + var magic = "magic ist zur Compile-Zeit ein String, folglich geht keine Typsicherheit verloren"; + magic = 9; // funktioniert nicht da magic vom Typ String ist + + // Generics + var phonebook = new Dictionary() { + {"Sarah", "212 555 5555"} // Fügt einen Eintrag zum Telefonbuch hinzu + }; + + // Hier könnte man auch unser generisches SetDefault von + // weiter oben benutzen: + Console.WriteLine(SetDefault(phonebook, "Xaver", "kein Telefon")); // kein Telefon + // TKey und TValue müssen nicht angegeben werden, da sie auch implizit + // vom Compiler ermittelt werden können + Console.WriteLine(SetDefault(phonebook, "Resi", "kein Telefon")); // 212 555 5555 + + // Lambdas - konzise Syntax für Inline-Funktionen + Func square = (x) => x * x; // Das letzte Element vom Typ T ist der Rückgabewert + Console.WriteLine(square(3)); // 9 + + // Disposables - einfaches Management von nicht verwalteten Ressourcen + // So gut wie alle Objekte über die auf nicht verwaltete Ressourcen + // (Dateien, Geräte, ...) zugreifen implementieren das Interface + // IDisposable. Das using Statement stellt sicher dass die vom + // IDisposable benutzten Ressourcen nach der Benutzung wieder + // freigegeben werden + using (StreamWriter writer = new StreamWriter("log.txt")) + { + writer.WriteLine("Alles bestens!"); + // Am Ende des Codeblocks werden die Ressourcen wieder + // freigegeben - auch im Falle einer Exception + } + + // Parallel Klasse + // http://blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspx + var websites = new string[] { + "http://www.google.com", "http://www.reddit.com", + "http://www.shaunmccarthy.com" + }; + var responses = new Dictionary(); + + // Für jeden Request wird ein neuer Thread erzeugt, der nächste + // Schritt wird erst nach Beendigung aller Requests ausgeführt + Parallel.ForEach(websites, + // maximal 3 Threads gleichzeitig + new ParallelOptions() {MaxDegreeOfParallelism = 3}, + website => + { + // Hier folgt eine sehr langwierige Operation + using (var r = WebRequest.Create(new Uri(website)).GetResponse()) + { + responses[website] = r.ContentType; + } + }); + + // Dieser Code wird erst nach Beendigung aller Requests ausgeführt + foreach (var key in responses.Keys) + { + Console.WriteLine("{0}:{1}", key, responses[key]); + } + + // Dynamische Objekte (gut um mit anderen Sprachen zu arbeiten) + dynamic student = new ExpandoObject(); + student.FirstName = "Christian"; // hier muss keine Klasse angegeben werden + + // Einem solchen Objekt kann man sogar Methoden zuordnen. + // Das Beispiel gibt einen String zurück und erwartet einen String + student.Introduce = new Func( + (introduceTo) => string.Format("Hallo {0}, das ist {1}", student.FirstName, introduceTo)); + Console.WriteLine(student.Introduce("Bettina")); + + // IQueryable - So gut wie alle Aufzählungstypen implementieren + // dieses Interface, welches eine Vielzahl von funktionalen Methoden + // wie Map / Filter / Reduce zur Verfügung stellt: + var bikes = new List(); + // sortiert die Liste + bikes.Sort(); + // sortiert nach Anzahl Räder + bikes.Sort((b1, b2) => b1.Wheels.CompareTo(b2.Wheels)); + var result = bikes + // diese Filter können auch aneinandergehängt werden + .Where(b => b.Wheels > 3) // (gibt ein IQueryable des vorherigen Typs zurück) + .Where(b => b.IsBroken && b.HasTassles) + // diese Zuordnung gibt ein IQueryable zurück + .Select(b => b.ToString()); + + // "Reduce" - addiert alle Räder der Aufzählung zu einem Wert + var sum = bikes.Sum(b => b.Wheels); + + // So erzeugt man ein implizit typisiertes Objekt, basierend auf + // den Parametern der Elemente: + var bikeSummaries = bikes.Select(b=>new { Name = b.Name, IsAwesome = !b.IsBroken && b.HasTassles }); + // Auch wenn wir es hier nicht demonstrieren können: + // In einer IDE wie VisualStudio kriegen wir hier sogar TypeAhead, + // da der Compiler in der Lage ist, die passenden Typen zu erkennen. + foreach (var bikeSummary in bikeSummaries.Where(b => b.IsAwesome)) + { + Console.WriteLine(bikeSummary.Name); + } + + // AsParallel-Methode + // Jetzt kommen die Schmankerl! Die AsParallel-Methode kombiniert + // LINQ und parallele Operationen: + var threeWheelers = bikes.AsParallel().Where(b => b.Wheels == 3).Select(b => b.Name); + // Diese Berechnung passiert parallel! Benötigte Threads werden + // automatisch erzeugt, und die Rechenlast unter ihnen aufgeteilt. + // Ein Traum für die Verarbeitung von großen Datenmengen + // auf mehreren Cores! + + // LINQ - bildet Auflistungstypen auf IQueryable Objekte ab + // LinqToSql beispielsweise speichert und liest aus einer + // SQL-Datenbank, LinqToXml aus einem XML-Dokument. + // LINQ-Operationen werden "lazy" ausgeführt. + var db = new BikeRepository(); + + // Die verzögerte Ausführung ist super für Datenbankabfragen + var filter = db.Bikes.Where(b => b.HasTassles); // noch keine Abfrage + // Es können noch mehr Filter hinzugefügt werden (auch mit + // Bedingungen) - ideal für z.B. "erweiterte Suchen" + if (42 > 6) + filter = filter.Where(b => b.IsBroken); // immer noch keine Abfrage + + var query = filter + .OrderBy(b => b.Wheels) + .ThenBy(b => b.Name) + .Select(b => b.Name); // auch hier: immer noch keine Abfrage + + // Erst hier wird die Datenbankabfrage wirklich ausgeführt, + // limitiert auf die Elemente die der foreach-Loop verwendet + foreach (string bike in query) + { + Console.WriteLine(result); + } + + } + + } // Ende der Klasse LearnCSharp + + // Eine .cs-Datei kann auch mehrere Klassen enthalten + + public static class Extensions + { + // Erweiterungsmethoden + public static void Print(this object obj) + { + Console.WriteLine(obj.ToString()); + } + } + + // Syntax zur Deklaration einer Klasse + // class { + // // Datenfelder, Konstruktoren und Methoden leben alle + // // innerhalb dieser Deklaration + // } + + public class Bicycle + { + // Felder/Variablen der Klasse "Bicycle" + // Das Keyword public macht das Member von überall zugänglich + public int Cadence + { + get // get definiert eine Methode um die Eigenschaft abzurufen + { + return _cadence; + } + set // set definiert eine Methode um die Eigenschaft zu setzen + { + _cadence = value; // value ist der dem Setter übergebene Wert + } + } + private int _cadence; + + // Das Keyword protected macht das Member nur für die Klasse selbst, + // und ihre Subklassen zugänglich + protected virtual int Gear + { + get; // erzeugt eine Eigenschaft für die kein "Zwischenwert" benötigt wird + set; + } + + // Das Keyword internal macht das Member innerhalb der Assembly zugänglich + internal int Wheels + { + get; + private set; // get/set kann auch über Keywords modifiziert werden + } + + int _speed; // Member ohne vorangestellte Keywords sind standardmäßig + // private, sie sind nur innerhalb der Klasse zugänglich. + // Man kann aber natürlich auch das Keyword private benutzen. + private string Name { get; set; } + + // Ein Enum ist ein klar definierter Satz an benannten Konstanten + // Eigentlich ordnet es diese Konstanten nur bestimmten Werten zu + // (einer int-Zahl, solange nicht anders angegeben). Mögliche Typen für + // die Werte eines Enums sind byte, sbyte, short, ushort, int, uint, + // long, oder ulong. Alle Werte in einem Enum sind eindeutig. + public enum BikeBrand + { + Colnago, + EddyMerckx, + Bianchi = 42, // so kann man den Wert explizit setzen + Kynast // 43 + } + // Nachdem dieser Typ in der Klasse "Bicycle" definiert ist + // sollte Code ausserhalb der Klasse den Typen als Bicycle referenzieren + + // Nachdem das Enum deklariert ist, können wir den Typen verwenden: + public BikeBrand Brand; + + // Als static gekennzeichnete Member gehören dem Typ selbst, + // nicht seinen Instanzen. Man kann sie also ohne Referenz zu einem + // Objekt benutzen + Console.WriteLine("Schon " + Bicycle.bicyclesCreated + " Fahrräder, nur für dieses Tutorial!"); + static public int BicyclesCreated = 0; + + // readonly-Werte werden zur Laufzeit gesetzt + // Ihr Wert kann nur bei ihrer Deklaration, oder in einem Konstruktor + // festgelegt werden + readonly bool _hasCardsInSpokes = false; // readonly und private + + // Konstruktoren bestimmen was bei einer Instantiierung passiert + // Das ist ein Default-Konstruktor: + public Bicycle() + { + // Member der Klasse können über das Keyword this erreicht werden + this.Gear = 1; + // oft ist das aber gar nicht nötig + Cadence = 50; + _speed = 5; + Name = "Bonanzarad"; + Brand = BikeBrand.Kynast; + BicyclesCreated++; + } + + // Das ist ein spezifischer Konstruktor (d.h. er erwartet Argumente): + public Bicycle(int startCadence, int startSpeed, int startGear, + string name, bool hasCardsInSpokes, BikeBrand brand) + : base() // ruft zuerst den "base"-Konstruktor auf + { + Gear = startGear; + Cadence = startCadence; + _speed = startSpeed; + Name = name; + _hasCardsInSpokes = hasCardsInSpokes; + Brand = brand; + } + + // Konstruktoren können aneinandergehängt werden: + public Bicycle(int startCadence, int startSpeed, BikeBrand brand) : + this(startCadence, startSpeed, 0, "richtig große Räder", true, brand) + { + } + + // Syntax für Methoden: + // () + + // Klassen können Getter und Setter für Werte definieren, + // oder diese Werte direkt als Eigenschaft implementieren + // (in C# der bevorzugte Weg) + + // Parameter von Methoden können Default-Werte haben. + // "SpeedUp" kann man also auch ohne Parameter aufrufen: + public void SpeedUp(int increment = 1) + { + _speed += increment; + } + + public void SlowDown(int decrement = 1) + { + _speed -= decrement; + } + + // Eigenschaften mit get/set + // wenn es nur um den Zugriff auf Daten geht ist eine Eigenschaft zu + // empfehlen. Diese können Getter und Setter haben, oder auch nur Getter + // bzw. Setter + private bool _hasTassles; // private Variable + public bool HasTassles // öffentliches Interface + { + get { return _hasTassles; } + set { _hasTassles = value; } + } + + // Das kann man auch kürzer schreiben: + // Dieser Syntax erzeugt automatisch einen hinterlegten Wert, + // der gesetzt bzw. zurückgegeben wird: + public bool IsBroken { get; private set; } + public int FrameSize + { + get; + // für Getter und Setter kann der Zugriff auch einzeln + // beschränkt werden, FrameSize kann also nur von innerhalb + // der Klasse "Bicycle" gesetzt werden + private set; + } + + // Diese Methode gibt eine Reihe an Informationen über das Objekt aus: + public virtual string Info() + { + return "Gang: " + Gear + + " Kadenz: " + Cadence + + " Geschwindigkeit: " + _speed + + " Name: " + Name + + " Hipster-Karten zwischen den Speichen: " + (_hasCardsInSpokes ? "Na klar!" : "Bloß nicht!") + + "\n------------------------------\n" + ; + } + + // Auch Methoden können als static gekennzeichnet werden, nützlich + // beispielsweise für Helper-Methoden + public static bool DidWeCreateEnoughBycles() + { + // In einer statischen Methode können wir natürlich auch nur + // statische Member der Klasse referenzieren + return BicyclesCreated > 9000; + } + // Wenn eine Klasse nur statische Member enthält, kann es eine gute Idee + // sein die Klasse selbst als static zu kennzeichnen + + } // Ende der Klasse "Bicycle" + + // "PennyFarthing" ist eine Unterklasse von "Bicycle" + class PennyFarthing : Bicycle + { + // (Hochräder - englisch Penny Farthing - sind diese antiken Fahrräder + // mit riesigem Vorderrad. Sie haben keine Gangschaltung.) + + // hier wird einfach der Elternkonstruktor aufgerufen + public PennyFarthing(int startCadence, int startSpeed) : + base(startCadence, startSpeed, 0, "Hochrad", true, BikeBrand.EddyMerckx) + { + } + + protected override int Gear + { + get + { + return 0; + } + set + { + throw new ArgumentException("Ein Hochrad hat keine Gangschaltung, doh!"); + } + } + + public override string Info() + { + string result = "Hochrad "; + result += base.ToString(); // ruft die "base"-Version der Methode auf + return result; + } + } + + // Interfaces (auch Schnittstellen genant) definieren nur die Signaturen + // ihrer Member, enthalten aber auf keinen Fall ihre Implementierung. + interface IJumpable + { + // Alle Member eines Interfaces sind implizit public + void Jump(int meters); + } + + interface IBreakable + { + // Interfaces können Eigenschaften, Methoden und Events definieren + bool Broken { get; } + } + + // Eine Klasse kann nur von einer Klasse erben, kann aber eine beliebige + // Anzahl von Interfaces implementieren + class MountainBike : Bicycle, IJumpable, IBreakable + { + int damage = 0; + + public void Jump(int meters) + { + damage += meters; + } + + public bool Broken + { + get + { + return damage > 100; + } + } + } + + // Stellt eine Datenbankverbindung für das LinqToSql-Beispiel her. + // EntityFramework Code First ist großartig (ähnlich wie Ruby's ActiveRecord, aber bidirektional) + // http://msdn.microsoft.com/de-de/data/jj193542.aspx + public class BikeRepository : DbSet + { + public BikeRepository() + : base() + { + } + + public DbSet Bikes { get; set; } + } +} // Ende des Namespaces +``` + +## In dieser Übersicht nicht enthalten sind die Themen: + + * Flags + * Attributes + * Static properties + * Exceptions, Abstraction + * ASP.NET (Web Forms/MVC/WebMatrix) + * Winforms + * Windows Presentation Foundation (WPF) + +## Zum Weiterlesen gibt es viele gute Anlaufpunkte: + + * [DotNetPerls](http://www.dotnetperls.com) + * [C# in Depth](http://manning.com/skeet2) + * [Programming C#](http://shop.oreilly.com/product/0636920024064.do) + * [LINQ](http://shop.oreilly.com/product/9780596519254.do) + * [MSDN Library](http://msdn.microsoft.com/en-us/library/618ayhy6.aspx) + * [ASP.NET MVC Tutorials](http://www.asp.net/mvc/tutorials) + * [ASP.NET Web Matrix Tutorials](http://www.asp.net/web-pages/tutorials) + * [ASP.NET Web Forms Tutorials](http://www.asp.net/web-forms/tutorials) + * [Windows Forms Programming in C#](http://www.amazon.com/Windows-Forms-Programming-Chris-Sells/dp/0321116208) + +[C# Coding Conventions](http://msdn.microsoft.com/de-des/library/vstudio/ff926074.aspx) \ No newline at end of file -- cgit v1.2.3 From bd247d01ded10c5e530aec7057dce2ae3dd939d5 Mon Sep 17 00:00:00 2001 From: m90 Date: Sat, 11 Oct 2014 17:58:44 +0200 Subject: fix yet-to-be-translated name --- de-de/csharp-de.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-de/csharp-de.html.markdown b/de-de/csharp-de.html.markdown index 9feb1450..bab3cd71 100644 --- a/de-de/csharp-de.html.markdown +++ b/de-de/csharp-de.html.markdown @@ -458,7 +458,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Generics var phonebook = new Dictionary() { - {"Sarah", "212 555 5555"} // Fügt einen Eintrag zum Telefonbuch hinzu + {"Resi", "212 555 5555"} // Fügt einen Eintrag zum Telefonbuch hinzu }; // Hier könnte man auch unser generisches SetDefault von -- cgit v1.2.3 From 0af2d0dcbf400ee0bb8d1e5761fae51f3a01db6d Mon Sep 17 00:00:00 2001 From: m90 Date: Sat, 11 Oct 2014 18:28:05 +0200 Subject: typo --- de-de/csharp-de.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-de/csharp-de.html.markdown b/de-de/csharp-de.html.markdown index bab3cd71..66dfbc2c 100644 --- a/de-de/csharp-de.html.markdown +++ b/de-de/csharp-de.html.markdown @@ -763,7 +763,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Auch Methoden können als static gekennzeichnet werden, nützlich // beispielsweise für Helper-Methoden - public static bool DidWeCreateEnoughBycles() + public static bool DidWeCreateEnoughBicycles() { // In einer statischen Methode können wir natürlich auch nur // statische Member der Klasse referenzieren -- cgit v1.2.3 From 99a669fe511d18b8feb35a99b320671045d2e3a5 Mon Sep 17 00:00:00 2001 From: m90 Date: Sat, 11 Oct 2014 18:40:15 +0200 Subject: them typographic mistakes --- de-de/csharp-de.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-de/csharp-de.html.markdown b/de-de/csharp-de.html.markdown index 66dfbc2c..54692f7c 100644 --- a/de-de/csharp-de.html.markdown +++ b/de-de/csharp-de.html.markdown @@ -877,4 +877,4 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; * [ASP.NET Web Forms Tutorials](http://www.asp.net/web-forms/tutorials) * [Windows Forms Programming in C#](http://www.amazon.com/Windows-Forms-Programming-Chris-Sells/dp/0321116208) -[C# Coding Conventions](http://msdn.microsoft.com/de-des/library/vstudio/ff926074.aspx) \ No newline at end of file +[C# Coding Conventions](http://msdn.microsoft.com/de-de/library/vstudio/ff926074.aspx) \ No newline at end of file -- cgit v1.2.3 From 54e44487302f84c9ed60f785b781eef22747c16a Mon Sep 17 00:00:00 2001 From: m90 Date: Sat, 11 Oct 2014 18:57:38 +0200 Subject: fix english comment and use non-american phone number --- de-de/csharp-de.html.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/de-de/csharp-de.html.markdown b/de-de/csharp-de.html.markdown index 54692f7c..32f254a4 100644 --- a/de-de/csharp-de.html.markdown +++ b/de-de/csharp-de.html.markdown @@ -330,7 +330,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // TryParse gibt bei einem Fehler den Default-Wert zurück // (im Fall von int: 0) int tryInt; - if (int.TryParse("123", out tryInt)) // Function is boolean + if (int.TryParse("123", out tryInt)) // gibt true oder false zurück { Console.WriteLine(tryInt); // 123 } @@ -458,7 +458,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Generics var phonebook = new Dictionary() { - {"Resi", "212 555 5555"} // Fügt einen Eintrag zum Telefonbuch hinzu + {"Resi", "08822 / 43 67"} // Fügt einen Eintrag zum Telefonbuch hinzu }; // Hier könnte man auch unser generisches SetDefault von @@ -466,7 +466,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; Console.WriteLine(SetDefault(phonebook, "Xaver", "kein Telefon")); // kein Telefon // TKey und TValue müssen nicht angegeben werden, da sie auch implizit // vom Compiler ermittelt werden können - Console.WriteLine(SetDefault(phonebook, "Resi", "kein Telefon")); // 212 555 5555 + Console.WriteLine(SetDefault(phonebook, "Resi", "kein Telefon")); // 08822 / 43 67 // Lambdas - konzise Syntax für Inline-Funktionen Func square = (x) => x * x; // Das letzte Element vom Typ T ist der Rückgabewert -- cgit v1.2.3 From a142c72ed4c0c7a772b63bd07e6a40f7b465e857 Mon Sep 17 00:00:00 2001 From: m90 Date: Sat, 11 Oct 2014 19:41:30 +0200 Subject: a plethora of smaller tweaks --- de-de/csharp-de.html.markdown | 84 +++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/de-de/csharp-de.html.markdown b/de-de/csharp-de.html.markdown index 32f254a4..c3da57ab 100644 --- a/de-de/csharp-de.html.markdown +++ b/de-de/csharp-de.html.markdown @@ -59,10 +59,10 @@ namespace Learning /////////////////////////////////////////////////// // Typen & Variablen - // - // Deklariere eine Variable mit /////////////////////////////////////////////////// + // Deklariere eine Variable mit + // Sbyte - Vorzeichenbehaftete 8-Bit Ganzzahl // (-128 <= sbyte <= 127) sbyte fooSbyte = 100; @@ -97,7 +97,7 @@ namespace Learning // float handelt // Decimal - ein 128-Bit-Datentyp mit mehr Genauigkeit als andere - // Fließkommatypen, und somit bestens geeignet für Berechnung von + // Fließkommatypen, und somit bestens geeignet für Berechnung von // Geld- und Finanzwerten decimal fooDecimal = 150.3m; @@ -108,7 +108,7 @@ namespace Learning char fooChar = 'A'; // Strings - im Gegensatz zu allen vorhergehenden Basistypen, die - // alle Werttypen sind ist String ein Referenztyp. Er ist somit + // alle Werttypen sind, ist String ein Referenztyp. Er ist somit // nullable, Werttypen sind dies nicht. string fooString = "\"maskiere\" Anführungszeichen, und füge \n (Umbrüche) und \t (Tabs) hinzu"; Console.WriteLine(fooString); @@ -135,7 +135,7 @@ namespace Learning // Durch ein vorangestelltes @ lässt sich ein mehrzeiliger String // schreiben. Um " zu maskieren benutzt man "" string bazString = @"Hier geht es -zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; +zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // Die Keywords const oder readonly kennzeichnen eine unveränderliche // Variable/Konstante. Die Werte von Konstanten werden übrigens @@ -167,7 +167,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // List = new List(); List intList = new List(); List stringList = new List(); - List z = new List { 9000, 1000, 1337 }; // intialize + List z = new List { 9000, 1000, 1337 }; // Die <> kennzeichnen "Generics", mehr dazu unter "Coole Sachen" // Listen haben keinen Default-Wert. @@ -217,7 +217,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Inkremente int i = 0; - Console.WriteLine("\n->Inc/Dec-rementation"); + Console.WriteLine("\n->Inkrement / Dekrement"); Console.WriteLine(i++); //i = 1. Post-Inkrement Console.WriteLine(++i); //i = 2. Pre-Inkrement Console.WriteLine(i--); //i = 1. Post-Dekrement @@ -240,7 +240,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; } else { - Console.WriteLine("Ich auch nicht"); + Console.WriteLine("Ich leider auch nicht"); } // Ternärer Operator @@ -286,9 +286,9 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // da String IEnumerable bereits implementiert) // Switch Struktur - // Ein Switch funktioniert mit byte, short, char und int Datentypen + // Ein Switch funktioniert mit byte, short, char und int Datentypen. // Auch Aufzählungstypen können verwendet werden, genau wie - // die Klasse String, und ein paar Sonderklassen die Wrapper für + // die Klasse String, und ein paar Sonderklassen, die Wrapper für // Primitives sind: Character, Byte, Short und Integer int month = 3; string monthString; @@ -304,7 +304,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; monthString = "März"; break; // Man kann für mehrere Fälle auch das selbe Verhalten - // definierern. Jeder Block muss aber mit einem break-Statement + // definieren. Jeder Block muss aber mit einem break-Statement // abgeschlossen werden. Einzelne Fälle können über // `goto case x` erreicht werden case 6: @@ -336,7 +336,8 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; } // von Integer nach String - // Die Klasse Convert stellt Methoden zur Kovertierung von unterschiedlichsten Daten zur Verfügung + // Die Klasse Convert stellt Methoden zur Konvertierung von + // unterschiedlichsten Daten zur Verfügung: Convert.ToString(123); // "123" // oder tryInt.ToString(); // "123" @@ -355,7 +356,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; trek.SpeedUp(3); // Es empfiehlt sich immer Getter und Setter zu benutzen trek.Cadence = 100; - // ToString ist eine Konvention über die man überlicherweiser + // ToString ist eine Konvention über die man üblicherweiser // Informationen über eine Instanz erhält Console.WriteLine("Infos zu trek: " + trek.Info()); @@ -395,8 +396,8 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; return -1; } - // Methoden können überladen werden solange sie eine eindeutige - // Signatur haben + // Methoden können überladen werden, solange sie eindeutige + // Signaturen haben public static void MethodSignatures(string maxCount) { } @@ -417,7 +418,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; return result; } - // Über ihr Interface lassen sich die möglichen Typen auch beschränken + // Möglichen Typen lassen sich auch über ihr Interface beschränken: public static void IterateAndPrint(T toPrint) where T: IEnumerable { // Da T ein IEnumerable ist können wir foreach benutzen @@ -441,7 +442,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Nullables - perfekt für die Interaktion mit // Datenbanken / Rückgabewerten - // Jeder Wert (d.h. keine Klassen) kann durch das Nachstellen eines ?s + // Jeder Wert (d.h. keine Klassen) kann durch das Nachstellen eines ? // nullable gemacht werden: ? = int? nullable = null; // Die explizite Langform wäre Nullable Console.WriteLine("Mein Nullable: " + nullable); @@ -451,8 +452,9 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // dass die Variable null ist festzulegen. int notNullable = nullable ?? 0; // 0 - // Implizit typisierte (dynamische) Variablen - // Man kann auch den Compiler den Typ einer Variable bestimmen lassen: + // Implizit typisierte Variablen + // Man kann auch den Typ einer Variable auch vom Compiler + // bestimmen lassen: var magic = "magic ist zur Compile-Zeit ein String, folglich geht keine Typsicherheit verloren"; magic = 9; // funktioniert nicht da magic vom Typ String ist @@ -464,8 +466,8 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Hier könnte man auch unser generisches SetDefault von // weiter oben benutzen: Console.WriteLine(SetDefault(phonebook, "Xaver", "kein Telefon")); // kein Telefon - // TKey und TValue müssen nicht angegeben werden, da sie auch implizit - // vom Compiler ermittelt werden können + // TKey und TValue müssen nicht zwingend angegeben werden, da sie + // auch implizit vom Compiler ermittelt werden können Console.WriteLine(SetDefault(phonebook, "Resi", "kein Telefon")); // 08822 / 43 67 // Lambdas - konzise Syntax für Inline-Funktionen @@ -473,11 +475,11 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; Console.WriteLine(square(3)); // 9 // Disposables - einfaches Management von nicht verwalteten Ressourcen - // So gut wie alle Objekte über die auf nicht verwaltete Ressourcen - // (Dateien, Geräte, ...) zugreifen implementieren das Interface + // So gut wie alle Objekte die auf nicht verwaltete Ressourcen + // (Dateien, Geräte, ...) zugreifen, implementieren das Interface // IDisposable. Das using Statement stellt sicher dass die vom // IDisposable benutzten Ressourcen nach der Benutzung wieder - // freigegeben werden + // freigegeben werden: using (StreamWriter writer = new StreamWriter("log.txt")) { writer.WriteLine("Alles bestens!"); @@ -494,7 +496,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; var responses = new Dictionary(); // Für jeden Request wird ein neuer Thread erzeugt, der nächste - // Schritt wird erst nach Beendigung aller Requests ausgeführt + // Schritt wird erst nach Beendigung aller Tasks ausgeführt Parallel.ForEach(websites, // maximal 3 Threads gleichzeitig new ParallelOptions() {MaxDegreeOfParallelism = 3}, @@ -515,7 +517,8 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Dynamische Objekte (gut um mit anderen Sprachen zu arbeiten) dynamic student = new ExpandoObject(); - student.FirstName = "Christian"; // hier muss keine Klasse angegeben werden + // hier muss keine Klasse angegeben werden + student.FirstName = "Christian"; // Einem solchen Objekt kann man sogar Methoden zuordnen. // Das Beispiel gibt einen String zurück und erwartet einen String @@ -567,12 +570,14 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // LINQ-Operationen werden "lazy" ausgeführt. var db = new BikeRepository(); - // Die verzögerte Ausführung ist super für Datenbankabfragen + // Die verzögerte Ausführung ist optimal für Datenbankabfragen var filter = db.Bikes.Where(b => b.HasTassles); // noch keine Abfrage // Es können noch mehr Filter hinzugefügt werden (auch mit // Bedingungen) - ideal für z.B. "erweiterte Suchen" if (42 > 6) + { filter = filter.Where(b => b.IsBroken); // immer noch keine Abfrage + } var query = filter .OrderBy(b => b.Wheels) @@ -601,7 +606,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; } } - // Syntax zur Deklaration einer Klasse + // Syntax zur Deklaration einer Klasse: // class { // // Datenfelder, Konstruktoren und Methoden leben alle // // innerhalb dieser Deklaration @@ -644,7 +649,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Man kann aber natürlich auch das Keyword private benutzen. private string Name { get; set; } - // Ein Enum ist ein klar definierter Satz an benannten Konstanten + // Ein Enum ist ein klar definierter Satz an benannten Konstanten. // Eigentlich ordnet es diese Konstanten nur bestimmten Werten zu // (einer int-Zahl, solange nicht anders angegeben). Mögliche Typen für // die Werte eines Enums sind byte, sbyte, short, ushort, int, uint, @@ -656,8 +661,8 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; Bianchi = 42, // so kann man den Wert explizit setzen Kynast // 43 } - // Nachdem dieser Typ in der Klasse "Bicycle" definiert ist - // sollte Code ausserhalb der Klasse den Typen als Bicycle referenzieren + // Nachdem dieser Typ in der Klasse "Bicycle" definiert ist, + // sollte Code ausserhalb der Klasse den Typen als Bicycle.Brand referenzieren // Nachdem das Enum deklariert ist, können wir den Typen verwenden: public BikeBrand Brand; @@ -665,7 +670,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Als static gekennzeichnete Member gehören dem Typ selbst, // nicht seinen Instanzen. Man kann sie also ohne Referenz zu einem // Objekt benutzen - Console.WriteLine("Schon " + Bicycle.bicyclesCreated + " Fahrräder, nur für dieses Tutorial!"); + Console.WriteLine("Schon " + Bicycle.BicyclesCreated + " Fahrräder, nur für dieses Tutorial!"); static public int BicyclesCreated = 0; // readonly-Werte werden zur Laufzeit gesetzt @@ -673,7 +678,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // festgelegt werden readonly bool _hasCardsInSpokes = false; // readonly und private - // Konstruktoren bestimmen was bei einer Instantiierung passiert + // Konstruktoren bestimmen was bei einer Instantiierung passiert. // Das ist ein Default-Konstruktor: public Bicycle() { @@ -727,8 +732,8 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Eigenschaften mit get/set // wenn es nur um den Zugriff auf Daten geht ist eine Eigenschaft zu - // empfehlen. Diese können Getter und Setter haben, oder auch nur Getter - // bzw. Setter + // empfehlen. Diese können Getter und Setter haben, oder auch nur + // einen Getter bzw. einen Setter private bool _hasTassles; // private Variable public bool HasTassles // öffentliches Interface { @@ -738,7 +743,8 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Das kann man auch kürzer schreiben: // Dieser Syntax erzeugt automatisch einen hinterlegten Wert, - // der gesetzt bzw. zurückgegeben wird: + // (entsprechend `private bool _isBroken`) der gesetzt + // bzw. zurückgegeben wird: public bool IsBroken { get; private set; } public int FrameSize { @@ -763,7 +769,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; // Auch Methoden können als static gekennzeichnet werden, nützlich // beispielsweise für Helper-Methoden - public static bool DidWeCreateEnoughBicycles() + public static bool DidWeCreateEnoughBicyclesYet() { // In einer statischen Methode können wir natürlich auch nur // statische Member der Klasse referenzieren @@ -807,7 +813,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; } // Interfaces (auch Schnittstellen genant) definieren nur die Signaturen - // ihrer Member, enthalten aber auf keinen Fall ihre Implementierung. + // ihrer Member, enthalten aber auf keinen Fall ihre Implementierung: interface IJumpable { // Alle Member eines Interfaces sind implizit public @@ -840,7 +846,7 @@ zur nächsten Zeile ""Wahnsinn!"", die Massen waren kaum zu halten"; } } - // Stellt eine Datenbankverbindung für das LinqToSql-Beispiel her. + // Das hier stellt eine Datenbankverbindung für das LinqToSql-Beispiel her. // EntityFramework Code First ist großartig (ähnlich wie Ruby's ActiveRecord, aber bidirektional) // http://msdn.microsoft.com/de-de/data/jj193542.aspx public class BikeRepository : DbSet -- cgit v1.2.3 From ea95b83e406e0badfb2b1b8a7d66458629850199 Mon Sep 17 00:00:00 2001 From: m90 Date: Sun, 12 Oct 2014 10:24:00 +0200 Subject: another round of improvements and corrections --- de-de/csharp-de.html.markdown | 89 ++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/de-de/csharp-de.html.markdown b/de-de/csharp-de.html.markdown index c3da57ab..dc77dda0 100644 --- a/de-de/csharp-de.html.markdown +++ b/de-de/csharp-de.html.markdown @@ -8,6 +8,7 @@ contributors: translators: - ["Frederik Ring", "https://github.com/m90"] filename: LearnCSharp-de.cs +lang: de-de --- C# ist eine elegante, typsichere und objektorientierte Sprache, mit der Entwickler eine Vielzahl sicherer und robuster Anwendungen erstellen können, die im .NET Framework ausgeführt werden. @@ -16,7 +17,7 @@ C# ist eine elegante, typsichere und objektorientierte Sprache, mit der Entwickl ```c# // Einzeilige Kommentare starten mit zwei Schrägstrichen: // /* -Mehrzeile Kommentare wie in C mit /* */ +Mehrzeile Kommentare wie in C Schrägstrich / Stern */ /// /// XML-Kommentare können zur automatisierten Dokumentation verwendet werden @@ -41,21 +42,21 @@ namespace Learning // handhaben führt aber unweigerlich ins Chaos (wirklich)! public class LearnCSharp { - // Zuerst kommen hier Syntax-Grundlagen, - // wenn du bereits Java oder C++ programmieren kannst, + // Zuerst erklärt dieses Tutorial die Syntax-Grundlagen, + // wenn du bereits Java oder C++ programmieren kannst: // lies bei "Interessante Features" weiter! public static void Syntax() { - // Mit Console.WriteLine kannst du einfachen Text ausgeben - Console.WriteLine("Hello World"); + // Mit Console.WriteLine kannst du einfachen Text ausgeben: + Console.WriteLine("Hallo Welt"); Console.WriteLine( "Integer: " + 10 + " Double: " + 3.14 + " Boolean: " + true); // Console.Write erzeugt keinen Zeilenumbruch - Console.Write("Hello "); - Console.Write("World"); + Console.Write("Hallo "); + Console.Write("Welt"); /////////////////////////////////////////////////// // Typen & Variablen @@ -96,9 +97,9 @@ namespace Learning // Das nachgestellte f zeigt an dass es sich um einen Wert vom Typ // float handelt - // Decimal - ein 128-Bit-Datentyp mit mehr Genauigkeit als andere - // Fließkommatypen, und somit bestens geeignet für Berechnung von - // Geld- und Finanzwerten + // Decimal - ein 128-Bit-Datentyp mit größerer Genauigkeit als + // andere Fließkommatypen, und somit bestens geeignet für + // die Berechnung von Geld- und Finanzwerten decimal fooDecimal = 150.3m; // Boolean - true & false @@ -108,20 +109,20 @@ namespace Learning char fooChar = 'A'; // Strings - im Gegensatz zu allen vorhergehenden Basistypen, die - // alle Werttypen sind, ist String ein Referenztyp. Er ist somit - // nullable, Werttypen sind dies nicht. + // alle Werttypen sind, ist String ein Referenztyp. Strings sind + // somit nullable, Werttypen sind dies nicht. string fooString = "\"maskiere\" Anführungszeichen, und füge \n (Umbrüche) und \t (Tabs) hinzu"; Console.WriteLine(fooString); - // Jeder Buchstabe eines Strings kann über seinen Index referenziert - // werden: + // Jeder Buchstabe eines Strings kann über seinen Index + // referenziert werden: char charFromString = fooString[1]; // => 'e' // Strings sind unveränderlich: // `fooString[1] = 'X';` funktioniert nicht // Ein Vergleich zweier Strings, unter Berücksichtigung der - // aktuellen sprachspezifischen Gegebenheiten (also z.B. a,ä,b,c in - // deutschsprachigen Umgebungen), und ohne Beachtung von + // aktuellen, sprachspezifischen Gegebenheiten (also z.B. a,ä,b,c + // in deutschsprachigen Umgebungen), und ohne Beachtung von // Groß- und Kleinschreibung: string.Compare(fooString, "x", StringComparison.CurrentCultureIgnoreCase); @@ -137,9 +138,9 @@ namespace Learning string bazString = @"Hier geht es zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; - // Die Keywords const oder readonly kennzeichnen eine unveränderliche - // Variable/Konstante. Die Werte von Konstanten werden übrigens - // bereits zur Compile-Zeit berechnet. + // Die Keywords const oder readonly kennzeichnen eine + // unveränderliche Variable/Konstante. Die Werte von Konstanten + // werden übrigens bereits zur Compile-Zeit berechnet. const int HOURS_I_WORK_PER_WEEK = 9001; /////////////////////////////////////////////////// @@ -147,10 +148,10 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; /////////////////////////////////////////////////// // Arrays - Index beginnt bei Null - // Die Größe des Arrays wird bei der Deklaration festgelegt + // Die Größe des Arrays wird bei der Deklaration festgelegt. // Die syntaktische Struktur um ein neues Array zu erzeugen sieht // folgendermaßen aus: - // [] = new []; + // [] = new []; int[] intArray = new int[10]; // Arrays können auch über ein Array-Literal deklariert werden: @@ -158,13 +159,13 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // Indizierung eines Arrays - Zugriff auf ein bestimmtes Element Console.WriteLine("intArray @ 0: " + intArray[0]); - // Arrays sind nicht veränderbar + // Arrays sind veränderbar intArray[1] = 1; // Listen - // Durch ihre größere Flexibilität kommen Listen weit häufiger - // zum Einsatz als Arrays. Eine Liste wird so deklariert: - // List = new List(); + // Durch ihre größere Flexibilität kommen Listen in C# weit + // häufiger zum Einsatz als Arrays. Eine Liste wird so deklariert: + // List = new List(); List intList = new List(); List stringList = new List(); List z = new List { 9000, 1000, 1337 }; @@ -189,6 +190,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; Console.WriteLine("\n->Operatoren"); // kurze Schreibweise um mehrere Deklarationen zusammenzufassen: + // (Benutzung vom C# Styleguide aber ausdrücklich abgeraten!) int i1 = 1, i2 = 2; // Arithmetik funktioniert wie erwartet: @@ -246,13 +248,13 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // Ternärer Operator // Anstatt eines einfachen if/else lässt sich auch folgendes schreiben: // ? : - string isTrue = (true) ? "Ja" : "Nein"; + string isTrue = true ? "Ja" : "Nein"; // while-Schleife int fooWhile = 0; while (fooWhile < 100) { - //Wird 100mal wiederholt, fooWhile 0->99 + // Wird 100mal wiederholt, fooWhile 0->99 fooWhile++; } @@ -260,14 +262,14 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; int fooDoWhile = 0; do { - //Wird 100mal wiederholt, fooDoWhile 0->99 + // Wird 100mal wiederholt, fooDoWhile 0->99 fooDoWhile++; } while (fooDoWhile < 100); //for-Schleifen => for(; ; ) for (int fooFor = 0; fooFor < 10; fooFor++) { - //Wird 10mal wiederholt, fooFor 0->9 + // Wird 10mal wiederholt, fooFor 0->9 } // foreach-Schleife @@ -358,11 +360,11 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // ToString ist eine Konvention über die man üblicherweiser // Informationen über eine Instanz erhält - Console.WriteLine("Infos zu trek: " + trek.Info()); + Console.WriteLine("Infos zu trek: " + trek.ToString()); // Wir instantiieren ein neues Hochrad PennyFarthing funbike = new PennyFarthing(1, 10); - Console.WriteLine("Infos zu funbike: " + funbike.Info()); + Console.WriteLine("Infos zu funbike: " + funbike.ToString()); Console.Read(); } // Ende der Methode main @@ -443,7 +445,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // Nullables - perfekt für die Interaktion mit // Datenbanken / Rückgabewerten // Jeder Wert (d.h. keine Klassen) kann durch das Nachstellen eines ? - // nullable gemacht werden: ? = + // nullable gemacht werden: ? = int? nullable = null; // Die explizite Langform wäre Nullable Console.WriteLine("Mein Nullable: " + nullable); bool hasValue = nullable.HasValue; // true wenn nicht null @@ -502,7 +504,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; new ParallelOptions() {MaxDegreeOfParallelism = 3}, website => { - // Hier folgt eine sehr langwierige Operation + // Hier folgt eine langwierige, asynchrone Operation using (var r = WebRequest.Create(new Uri(website)).GetResponse()) { responses[website] = r.ContentType; @@ -517,7 +519,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // Dynamische Objekte (gut um mit anderen Sprachen zu arbeiten) dynamic student = new ExpandoObject(); - // hier muss keine Klasse angegeben werden + // hier muss keine Typ angegeben werden student.FirstName = "Christian"; // Einem solchen Objekt kann man sogar Methoden zuordnen. @@ -564,7 +566,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // Ein Traum für die Verarbeitung von großen Datenmengen // auf mehreren Cores! - // LINQ - bildet Auflistungstypen auf IQueryable Objekte ab + // LINQ - bildet einen Datenspeicher auf IQueryable Objekte ab // LinqToSql beispielsweise speichert und liest aus einer // SQL-Datenbank, LinqToXml aus einem XML-Dokument. // LINQ-Operationen werden "lazy" ausgeführt. @@ -629,7 +631,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; } private int _cadence; - // Das Keyword protected macht das Member nur für die Klasse selbst, + // Das Keyword protected macht das Member nur für die Klasse selbst // und ihre Subklassen zugänglich protected virtual int Gear { @@ -670,7 +672,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; // Als static gekennzeichnete Member gehören dem Typ selbst, // nicht seinen Instanzen. Man kann sie also ohne Referenz zu einem // Objekt benutzen - Console.WriteLine("Schon " + Bicycle.BicyclesCreated + " Fahrräder, nur für dieses Tutorial!"); + // Console.WriteLine("Schon " + Bicycle.BicyclesCreated + " Fahrräder, nur für dieses Tutorial!"); static public int BicyclesCreated = 0; // readonly-Werte werden zur Laufzeit gesetzt @@ -731,8 +733,8 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; } // Eigenschaften mit get/set - // wenn es nur um den Zugriff auf Daten geht ist eine Eigenschaft zu - // empfehlen. Diese können Getter und Setter haben, oder auch nur + // wenn es nur um den Zugriff auf Daten geht, ist eine Eigenschaft zu + // empfehlen. Diese können Getter und Setter haben, oder auch nur // einen Getter bzw. einen Setter private bool _hasTassles; // private Variable public bool HasTassles // öffentliches Interface @@ -756,7 +758,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; } // Diese Methode gibt eine Reihe an Informationen über das Objekt aus: - public virtual string Info() + public virtual string ToString() { return "Gang: " + Gear + " Kadenz: " + Cadence + @@ -804,7 +806,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; } } - public override string Info() + public override string ToString() { string result = "Hochrad "; result += base.ToString(); // ruft die "base"-Version der Methode auf @@ -847,7 +849,8 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; } // Das hier stellt eine Datenbankverbindung für das LinqToSql-Beispiel her. - // EntityFramework Code First ist großartig (ähnlich wie Ruby's ActiveRecord, aber bidirektional) + // EntityFramework Code First ist großartig + // (ähnlich zu Ruby's ActiveRecord, aber bidirektional) // http://msdn.microsoft.com/de-de/data/jj193542.aspx public class BikeRepository : DbSet { @@ -865,7 +868,7 @@ zur nächsten Zeile, ""Wahnsinn!"", die Massen waren kaum zu bändigen"; * Flags * Attributes - * Static properties + * Statische Eigenschaften * Exceptions, Abstraction * ASP.NET (Web Forms/MVC/WebMatrix) * Winforms -- cgit v1.2.3 From 4a7a7e3e9dabc3b02e656a377ca3f8342e781f48 Mon Sep 17 00:00:00 2001 From: Levi Bostian Date: Fri, 17 Oct 2014 21:17:43 -0500 Subject: Add @ukom Polish Perl translation from PR https://github.com/adambard/learnxinyminutes-docs/pull/341 --- pl-pl/perl-pl.html.markdown | 169 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 pl-pl/perl-pl.html.markdown diff --git a/pl-pl/perl-pl.html.markdown b/pl-pl/perl-pl.html.markdown new file mode 100644 index 00000000..9e8ade5b --- /dev/null +++ b/pl-pl/perl-pl.html.markdown @@ -0,0 +1,169 @@ +--- +name: perl +category: language +language: perl +filename: learnperl.pl +contributors: + - ["Korjavin Ivan", "http://github.com/korjavin"] + - ["Michał Kupczyński", "http://github.com/ukoms"] +lang: pl-pl +--- + +Perl 5 jest wysoce użytecznym, bogatym w wiele opcji językiem programowania +z ponad 25 latami nieustannego rozwoju. + +Perl 5 używany jest na ponad 100 różnych platformach (od przenośnych do w +pełni stacjonarnych) i nadaje się zarówno do szybkiego prototypowania jak +i projektów deweloperskich prowadzonych na szeroką skalę. + +```perl + +# Pojedyncza linia komentarza zaczyna się od znaku hasha (płotka) "#". + +#### Typy zmiennych w Perlu + +# Zmienna zaczyna się od symbolu dolara "$". +# Prawidłowa nazwa zmiennej zaczyna się od litery lub podkreślnika "_", +# po których następuje dowolna ilość liter, cyfr i podkreślników. + +### W Perlu występują trzy główne typy zmiennych: skalary, tablice i hasze. + +## Skalary +# Skalar przechowuje pojedynczą wartość: +my $zwierze = "wielbłąd"; +my $odpowiedź = 42; + +# Wartości skalarne mogą być ciągami znaków, liczbami całkowitymi lub +# zmiennoprzecinkowymi, zaś Perl automatycznie dokonuje konwersji pomiędzy nimi, +# w zależności od wykonywanego kodu/kontekstu. + +## Tablice +# Tablica przechowuje listę wartości: +my @zwierzęta = ("wielbłąd", "alpaka", "sowa"); +my @liczby = (23, 42, 69); +my @mieszanka = ("wielbłąd", 42, 1.23); + +## Hasze +# Hasz przechowuje zestawy par klucz-wartość: +my %kolor_owocu = ('jabłko', 'czerwony', 'banan', 'żółty'); + +# Możesz używać białych znaków (spacje, tabulatory) i operatora strzałki "=>" +# by czytelniej sformatować zapis hasza: +my %kolor_owocu = ( + jabłko => 'czerwony', + banan => 'żółty', +); + +# Skalary, tablice i hasze są bardziej wyczerpująco udokumentowane w dokumencie +# [perldoc perldata](http://perldoc.perl.org/perldata.html). + +# Bardziej złożone typy danych mogą być stworzone poprzez używanie referencji, +# które pozwalają Ci zbudować listy i hasze wewnątrz list i haszy. + +#### Warunki logiczne i pętle + +# W Perlu występują typowe warunki i pętle. +if ($var) { + ... +} elsif ($var eq 'bar') { + ... +} else { + ... +} + +unless (warunek) { + ... +} +# Powyższy zapis jest równoznaczny zapisowi "if (!warunek)" + +# Perlowy skrócony zapis warunków: +print "Siema!" if $rozochocony; +print "Nie mamy bananów" unless $banany; + +# Pętla while +while (warunek) { + ... +} + +# Pętle for oraz foreach +for ($i = 0; $i <= $max; $i++) { + ... +} + +foreach (@tablica) { + print "Tym elementem jest $_\n"; +} + +# lub + +foreach my $iterator (@tablica) { + print "Iterowanym elementem jest $iterator\n"; +} + +#### Wyrażenia regularne + +# Perlowe wyrażenia regularne są tematem tak rozległym, jak wymagającym. +# Istnieje ogromna ilość dokumentacji w artykułach takich jak +# [perlrequick](http://perldoc.perl.org/perlrequick.html), +# [perlretut](http://perldoc.perl.org/perlretut.html) i inne. +# W dużym skrócie, podstawy perlowych wyrażeń regularnych są następujące: + +# Proste dopasowanie: +if (/foo/) { ... } # prawda jeżeli $_ zawiera "foo" +if ($a =~ /foo/) { ... } # prawda jeżeli $a zawiera "foo" + +# Prosta zamiana: +# Zamienia "foo" na "bar" w zmiennej $a +$a =~ s/foo/bar/; +# Zamienia WSZYSTKIE WYSTĄPIENIA "foo" na "bar" w zmiennej $a +$a =~ s/foo/bar/g; + +#### Pliki i I/O + +# Możesz otworzyć plik do odczytu lub zapisu używając funkcji "open ()". +open (my $odczyt, "<", "odczyt.txt") or die "Błąd otwierania input.txt: $!"; +open (my $zapis, ">", "zapis.txt") or die "Błąd otwierania output.txt: $!"; +open (my $dopisanie, ">>", "my.log") or die "Błąd otwierania my.log: $!"; + +# Pliki możesz odczytywać z otworzonego handlera używając operatora "<>" +# (operator diamentowy). W kontekście skalarnym (przypisanie wyniku do skalara) +# operator ten zczytuje pojedynczą linię pliku, w kontekście listowym +# (przypisanie wyniku do tablicy) zczytuje całą zawartość pliku, przypisując +# każdą linię jako kolejny element listy: +my $linia = <$in>; +my @linie = <$in>; + +#### Perlowe funkcje (procedury) + +# Pisanie funkcji (procedur) jest proste: +sub logger { + my $wiadomosc_do_loga = shift; + open (my HANDLER, ">>", "my.log") or die "Błąd otwierania my.log: $!"; + print HANDLER $wiadomosc_do_loga; +} + +# Teraz można używać napisanej funkcji, tak jak każdej innej wbudowanej +# funkcji perlowej: +logger ("Mamy funkcję perlową"); + +``` + +#### Używanie modułów perlowych + +Moduły perlowe dostarczają szeroki wachlarz możliwości, byś nie musiał +wynajdywać koła na nowo. Moduły te można pobrać z [CPAN](http://www.cpan.org). +Sam Perl zawiera w swoich dystrybucjach kilka najpopularniejszych modułów +z repozytorium [CPAN](http://www.cpan.org). + +Najczęściej zadawane pytania [perlfaq](http://perldoc.perl.org/perlfaq.html) +- zawierają pytania i odpowiedzi dotyczące wielu typowo realizowanych zadań. +Często znajdziesz tam również sugestie dotyczące użycia najlepszego modułu +z repozytorium CPAN do zrealizowania konkretnego zadania. + + +#### Do doczytania + + - [perl-tutorial](http://perl-tutorial.org/) + - [Naucz się Perla na www.perl.com](http://www.perl.org/learn.html) + - [perldoc](http://perldoc.perl.org/) + - wbudowane w Perla: `perldoc perlintro` \ No newline at end of file -- cgit v1.2.3 From 484b01e663f209b86000ee181a6a8832ec130242 Mon Sep 17 00:00:00 2001 From: Joao Farias Date: Sat, 18 Oct 2014 19:52:45 -0300 Subject: [groovy-pt] Translation of Groovy page to pt-br --- pt-br/groovy-pt.html.markdown | 435 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 435 insertions(+) create mode 100644 pt-br/groovy-pt.html.markdown diff --git a/pt-br/groovy-pt.html.markdown b/pt-br/groovy-pt.html.markdown new file mode 100644 index 00000000..885d5b27 --- /dev/null +++ b/pt-br/groovy-pt.html.markdown @@ -0,0 +1,435 @@ +--- +language: Groovy +category: language +filename: learngroovy.groovy +contributors: + - ["Roberto Pérez Alcolea", "http://github.com/rpalcolea"] +translators: + - ["João Farias", "https://github.com/JoaoGFarias"] +lang: pt-br +--- + +Groovy - Uma linguagem dinâmica para a plataforma Java. [Leia mais aqui.](http://groovy.codehaus.org) + +```groovy + +/* + Prepara-se: + + 1) Instale a máquina virtual de Groovy - http://gvmtool.net/ + 2) Intalse o Groovy: gvm install groovy + 3) Inicie o console groovy digitando: groovyConsole + +*/ + +// Comentário de uma linha inicia-se com duas barras +/* +Comentário de múltiplas linhas são assim. +*/ + +// Olá Mundo! +println "Olá mundo!" + +/* + Variáveis: + + Você pode atribuir valores a variáveis para uso posterior +*/ + +def x = 1 +println x + +x = new java.util.Date() +println x + +x = -3.1499392 +println x + +x = false +println x + +x = "Groovy!" +println x + +/* + Coleções e mapeamentos +*/ + +//Criando uma lista vazia +def tecnologias = [] + +/*** Adicionando elementos à lista ***/ + +// Assim como Java +tecnologias.add("Grails") + +// Shift para esquerda adiciona e retorna a lista +tecnologias << "Groovy" + +// Adição de múltiplos elementos +tecnologias.addAll(["Gradle","Griffon"]) + +/*** Removendo elementos da lista ***/ + +// Assim como Java +tecnologias.remove("Griffon") + +// Subtração também funciona +tecnologias = technologies - 'Grails' + +/*** Iterando sobre listas ***/ + +// Itera sobre os elementos da lista +tecnologias.each { println "Tecnologias: $it"} +tecnologias.eachWithIndex { it, i -> println "$i: $it"} + +/*** Checando os elementos da lista ***/ + +//Avalia se a lista contém o elemento 'Groovy' +contem = tecnologias.contains( 'Groovy' ) + +// Ou +contem = 'Groovy' in tecnologias + +// Checagem por múltiplos elementos +tecnologias.containsAll(['Groovy','Grails']) + +/*** Ordenando listas ***/ + +// Ordena a lista (altera a lista in-place) +tecnologias.sort() + +// Para ordenar a lista sem alterar a original +tecnologiasOrdenadas = tecnologias.sort( false ) + +/*** Manipulando listas ***/ + +//Substitue todos os elementos da lista +Collections.replaceAll(tecnologias, 'Gradle', 'gradle') + +//Desorganiza a lista +Collections.shuffle(tecnologias, new Random()) + +//Limpa a lista +technologies.clear() + +//Criando um mapeamento vazio +def devMap = [:] + +//Adicionando valores +devMap = ['nome':'Roberto', 'framework':'Grails', 'linguagem':'Groovy'] +devMap.put('ultimoNome','Perez') + +//Iterando sobre os elementos do mapeamento +devMap.each { println "$it.key: $it.value" } +devMap.eachWithIndex { it, i -> println "$i: $it"} + +//Avalia se um mapeamento contém uma chave +assert devMap.containsKey('nome') + +//Avalia se um mapeamento contém um valor +assert devMap.containsValue('Roberto') + +//Pega as chaves de um mapeamento +println devMap.keySet() + +//Pega os valores de um mapeamento +println devMap.values() + +/* + Groovy Beans + + GroovyBeans são JavaBeans com uma sintaxe muito mais simples. + + Quando Groovy é compilado para bytecode, as seguintes regras são usadas: + + * Se o nome é declarado com um modificador de acesso(public, private or + protected) então um atributo é gerado. + + * Um nome declarado sem modificador de acesso gera um campo privado com + getter e setter públicos (ou seja, uma propriedade). + + * Se uma propriedade é declarada como final, um campo private final é criado + e o setter não é gerado. + + * Você pode declarar uma propriedade e também declarar seus próprios getters + e setters. + + * Você pode declarar uma propriedade e um campo com o mesmo nome, a propriedade + usará este campo. + + * Se você quer uma propriedade private ou protected, você deve prover seus + próprios getters e setter, que devem ser declarados como private ou protected. + + * Se você acessar uma propriedade dentro da classe e esta propriedade é definida + em tempo de compilação com 'this', implícito ou explícito (por exemplo, + this.foo, ou simplesmente foo), Groovy acessará este campo diretamente, sem + passar pelo getter ou setter. + + * Se você acessar uma propriedade que não existe usando foo, explicitamente ou + implicitamente, então Groovy irá acessar esta propriedade através da meta + classe, o que pode falhar em tempo de execução. + +*/ + +class Foo { + // propriedade de leitura, apenas + final String nome = "Roberto" + + // propriedade de leitura, apenas, com getter e setter públicos + String linguagem + protected void setLinguagem(String linguagem) { this.linguagem = linguagem } + + // propriedade tipada dinamicamente + def ultimoNome +} + +/* + Condicionais e loops +*/ + +//Groovy suporta a sintaxe if-else +def x = 3 + +if(x==1) { + println "Um" +} else if(x==2) { + println "Dois" +} else { + println "X é maior que Dois" +} + +//Groovy também suporta o operador ternário +def y = 10 +def x = (y > 1) ? "functionou" : "falhou" +assert x == "functionou" + +//Loop 'for' +//Itera sobre um intervalo (range) +def x = 0 +for (i in 0 .. 30) { + x += i +} + +//Itera sobre uma lista +x = 0 +for( i in [5,3,2,1] ) { + x += i +} + +//Itera sobre um array +array = (0..20).toArray() +x = 0 +for (i in array) { + x += i +} + +//Itera sobre um mapa +def map = ['name':'Roberto', 'framework':'Grails', 'language':'Groovy'] +x = 0 +for ( e in map ) { + x += e.value +} + +/* + Operadores + + Sobrecarregamento de Operadores para uma lsita dos operadores comuns que + Grooby suporta: + http://groovy.codehaus.org/Operator+Overloading + + Operadores Groovy úteis +*/ +//Operador de espalhamento: invoca uma ação sobre todos os itens de um +//objeto agregador. +def tecnologias = ['Groovy','Grails','Gradle'] +tecnologias*.toUpperCase() // = to tecnologias.collect { it?.toUpperCase() } + +//Operador de navegação segura: usado para evitar NullPointerException. +def usuario = User.get(1) +def nomeUsuario = usuario?.nomeUsuario + + +/* + Closures + Um closure, em Grooby, é como um "bloco de código" ou um ponteiro para método. + É um pedação de código que é definido e executado em um momento posterior. + + Mais informação em: http://groovy.codehaus.org/Closures+-+Formal+Definition +*/ +//Exemplo: +def clos = { println "Hello World!" } + +println "Executando o closure:" +clos() + +//Passando parêmetros para um closure +def soma = { a, b -> println a+b } +soma(2,4) + +//Closdures por referir-se a variáveis que não estão listadas em sua +//lista de parêmetros. +def x = 5 +def multiplicarPor = { num -> num * x } +println multiplicarPor(10) + +// Se você tiver um closure que tem apenas um argumento, você pode omitir +// o parâmetro na definição do closure +def clos = { print it } +clos( "oi" ) + +/* + Groovy pode memorizar resultados de closures [1][2][3] +*/ +def cl = {a, b -> + sleep(3000) // simula processamento + a + b +} + +mem = cl.memoize() + +def chamaClosure(a, b) { + def inicio = System.currentTimeMillis() + mem(a, b) + println "Os inputs(a = $a, b = $b) - tomam ${System.currentTimeMillis() - inicio} msecs." +} + +chamaClosure(1, 2) +chamaClosure(1, 2) +chamaClosure(2, 3) +chamaClosure(2, 3) +chamaClosure(3, 4) +chamaClosure(3, 4) +chamaClosure(1, 2) +chamaClosure(2, 3) +chamaClosure(3, 4) + +/* + Expando + + A classe Expando é um bean dinâmico que permite adicionar propriedade e + closures como métodos a uma instância desta classe + + http://mrhaki.blogspot.mx/2009/10/groovy-goodness-expando-as-dynamic-bean.html +*/ + def usuario = new Expando(nome:"Roberto") + assert 'Roberto' == nome.name + + nome.lastName = 'Pérez' + assert 'Pérez' == nome.lastName + + nome.showInfo = { out -> + out << "Name: $name" + out << ", Last name: $lastName" + } + + def sw = new StringWriter() + println nome.showInfo(sw) + + +/* + Metaprogramação (MOP) +*/ + +//Usando a ExpandoMetaClasse para adicionar comportamento +String.metaClass.testAdd = { + println "adicionamos isto" +} + +String x = "teste" +x?.testAdd() + +//Interceptando chamadas a métodos +class Test implements GroovyInterceptable { + def soma(Integer x, Integer y) { x + y } + + def invocaMetodo(String name, args) { + System.out.println "Invoca método $name com argumentos: $args" + } +} + +def teste = new Test() +teste?.soma(2,3) +teste?.multiplica(2,3) + +//Groovy suporta propertyMissing para lidar com tentativas de resolução de +//propriedades. +class Foo { + def propertyMissing(String nome) { nome } +} +def f = new Foo() + +assertEquals "boo", f.boo + +/* + TypeChecked e CompileStatic + Groovy, por natureza, é e sempre será uma linguagem dinâmica, mas ela também + suporta typecheked e compilestatic + + Mais informações: http://www.infoq.com/articles/new-groovy-20 +*/ +//TypeChecked +import groovy.transform.TypeChecked + +void testeMethod() {} + +@TypeChecked +void test() { + testeMethod() + + def nome = "Roberto" + + println noomee + +} + +//Outro exemplo: +import groovy.transform.TypeChecked + +@TypeChecked +Integer test() { + Integer num = "1" + + Integer[] numeros = [1,2,3,4] + + Date dia = numeros[1] + + return "Teste" + +} + +//Exemplo de CompileStatic : +import groovy.transform.CompileStatic + +@CompileStatic +int soma(int x, int y) { + x + y +} + +assert soma(2,5) == 7 + + +``` + +## Referências + +[Groovy documentation](http://groovy.codehaus.org/Documentation) + +[Groovy web console](http://groovyconsole.appspot.com/) + +Junte-se a um [grupo de usuários Groovy](http://groovy.codehaus.org/User+Groups) + +## Livro + +* [Groovy Goodness] (https://leanpub.com/groovy-goodness-notebook) + +* [Groovy in Action] (http://manning.com/koenig2/) + +* [Programming Groovy 2: Dynamic Productivity for the Java Developer] (http://shop.oreilly.com/product/9781937785307.do) + +[1] http://roshandawrani.wordpress.com/2010/10/18/groovy-new-feature-closures-can-now-memorize-their-results/ +[2] http://www.solutionsiq.com/resources/agileiq-blog/bid/72880/Programming-with-Groovy-Trampoline-and-Memoize +[3] http://mrhaki.blogspot.mx/2011/05/groovy-goodness-cache-closure-results.html + + + -- cgit v1.2.3 From b4e5719ae90dbba989b1f3f5b9018d436d99e25d Mon Sep 17 00:00:00 2001 From: Andrei Curelaru Date: Sat, 25 Oct 2014 01:28:23 +0200 Subject: =?UTF-8?q?D=C3=A9but=20de=20traduction=20Markdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fr-fr/markdown.html.markdown | 255 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 fr-fr/markdown.html.markdown diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown new file mode 100644 index 00000000..32806054 --- /dev/null +++ b/fr-fr/markdown.html.markdown @@ -0,0 +1,255 @@ +--- +language: markdown +contributors: + - ["Andrei Curelaru", "http://infinidad.fr/"] +filename: markdown.md +--- + +Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être une syntaxe facile à lire et à écrire, aisément convertible en HTML(et beaucoup d'autres formats aussi à present). + +Donnez moi autant de retours que vous voulez! +Sentez vous libre de forker et envoyer des pull request! + + +```markdown + + + + + + +# Ceci est un

+## Ceci est un

+### Ceci est un

+#### Ceci est un

+##### Ceci est un

+###### Ceci est un
+ + +Ceci est un h1 +============= + +Ceci est un h2 +------------- + + + + +*This text is in italics.* +_And so is this text._ + +**This text is in bold.** +__And so is this text.__ + +***This text is in both.*** +**_As is this!_** +*__And this!__* + + + +~~This text is rendered with strikethrough.~~ + + + +This is a paragraph. I'm typing in a paragraph isn't this fun? + +Now I'm in paragraph 2. +I'm still in paragraph 2 too! + + +I'm in paragraph three! + + + +I end with two spaces (highlight me to see them). + +There's a
above me! + + + +> This is a block quote. You can either +> manually wrap your lines and put a `>` before every line or you can let your lines get really long and wrap on their own. +> It doesn't make a difference so long as they start with a `>`. + +> You can also use more than one level +>> of indentation? +> How neat is that? + + + + +* Item +* Item +* Another item + +or + ++ Item ++ Item ++ One more item + +or + +- Item +- Item +- One last item + + + +1. Item one +2. Item two +3. Item three + + + +1. Item one +1. Item two +1. Item three + + + + +1. Item one +2. Item two +3. Item three + * Sub-item + * Sub-item +4. Item four + + + +Boxes below without the 'x' are unchecked HTML checkboxes. +- [ ] First task to complete. +- [ ] Second task that needs done +This checkbox below will be a checked HTML checkbox. +- [x] This task has been completed + + + + + This is code + So is this + + + + my_array.each do |item| + puts item + end + + + +John didn't even know what the `go_to()` function did! + + + +\`\`\`ruby +def foobar + puts "Hello world!" +end +\`\`\` + +<-- The above text doesn't require indenting, plus Github will use syntax +highlighting of the language you specify after the ``` --> + + + + +*** +--- +- - - +**************** + + + + +[Click me!](http://test.com/) + + + +[Click me!](http://test.com/ "Link to Test.com") + + + +[Go to music](/music/). + + + +[Click this link][link1] for more info about it! +[Also check out this link][foobar] if you want to. + +[link1]: http://test.com/ "Cool!" +[foobar]: http://foobar.biz/ "Alright!" + + + + + +[This][] is a link. + +[this]: http://thisisalink.com/ + + + + + + +![This is the alt-attribute for my image](http://imgur.com/myimage.jpg "An optional title") + + + +![This is the alt-attribute.][myimage] + +[myimage]: relative/urls/cool/image.jpg "if you need a title, it's here" + + + + + is equivalent to +[http://testwebsite.com/](http://testwebsite.com/) + + + + + + + +I want to type *this text surrounded by asterisks* but I don't want it to be +in italics, so I do this: \*this text surrounded by asterisks\*. + + + + +| Col1 | Col2 | Col3 | +| :----------- | :------: | ------------: | +| Left-aligned | Centered | Right-aligned | +| blah | blah | blah | + + + +Col 1 | Col2 | Col3 +:-- | :-: | --: +Ugh this is so ugly | make it | stop + + + +``` + +For more info, check out John Gruber's official post of syntax [here](http://daringfireball.net/projects/markdown/syntax) and Adam Pritchard's great cheatsheet [here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). -- cgit v1.2.3 From f7b1bfeb45d3f1a0c3a059740541f856bdcb1606 Mon Sep 17 00:00:00 2001 From: Vinh Nguyen Date: Sat, 25 Oct 2014 09:59:01 +0700 Subject: Fix Vietnamese Git guide typo and update content --- vi-vn/git-vi.html.markdown | 66 ++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/vi-vn/git-vi.html.markdown b/vi-vn/git-vi.html.markdown index bdb88204..1bcc94a0 100644 --- a/vi-vn/git-vi.html.markdown +++ b/vi-vn/git-vi.html.markdown @@ -2,14 +2,15 @@ category: tool tool: git contributors: - - ["Jake Prather", "http://github.com/JakeHP"] + - ["Jake Prather", "http://github.com/JakeHP"] + - ["Vinh Nguyen", "https://twitter.com/vinhnx"] filename: LearnGit-vi.txt lang: vi-vn --- Git là một hệ quản lý mã nguồn và phiên bản phân tán (distributed version control and source code management system). -Nó làm được điều này là do một loạt các snapshot từ đề án của bạn, and nó hoạt động +Nó làm được điều này là do một loạt các snapshot từ đề án của bạn, và nó hoạt động với các snapshot đó để cung cấp cho bạn với chức năng đến phiên bản và quản lý mã nguồn của bạn. @@ -19,7 +20,7 @@ quản lý mã nguồn của bạn. Version Control là một hệ thống ghi lại những thay đổi ở một tập tin, hay một nhóm các tập tin, theo thời gian. -### Centralized Versioning VS Distributed Versioning +### So sánh giữa Centralized Versioning và Distributed Versioning * Quản lý phiên bản tập trung (Centralized Versioning) tập trung vào việc đồng bộ hóa, theo dõi, và lưu trữ tập tin. * Quản lý phiên bản phân tán (Distributed Versioning) tập trung vào việc chia sẻ các thay đổi. Mỗi sự thay đổi có một mã định dạng (id) duy nhất. @@ -75,7 +76,7 @@ con trỏ này sẽ cập nhật tự động và trỏ đến commit mới nh ### HEAD và head (thành phần của thư mục .git) -HEAD là một con trỏ đến nhánh hiện tại. Một repo chỉ có một HEAD *đang hoạt động*. +HEAD là một con trỏ đến branch hiện tại. Một repo chỉ có một HEAD *đang hoạt động*. head là một con trỏ đến bất kỳ commit nào. Một repo có thể có nhiều head. ### Các Tài Nguyên Mang Tính Khái Niệm @@ -165,29 +166,29 @@ $ git add ./*.java ### branch -Quản lý nhánh. Bạn có thể xem, sửa, tạo, xóa các nhánh bằng cách dùng lệnh này. +Quản lý nhánh (branch). Bạn có thể xem, sửa, tạo, xóa các nhánh bằng cách dùng lệnh này. ```bash -# liệt kê các nhanh đang có và ở remote +# liệt kê các branch đang có và ở remote $ git branch -a -# tạo nhánh mới +# tạo branch mới $ git branch myNewBranch -# xóa một nhánh +# xóa một branch $ git branch -d myBranch -# đặt tên lại một nhánh +# đặt tên lại một branch # git branch -m $ git branch -m myBranchName myNewBranchName -# chỉnh sủa diễn giải của một nhánh +# chỉnh sửa diễn giải của một branch $ git branch myBranchName --edit-description ``` ### checkout -Cập nhật tất cả các file torng tree hiện tại để cho trùng khớp với phiên bản của index, hoặc tree cụ thể. +Cập nhật tất cả các file trong tree hiện tại để cho trùng khớp với phiên bản của index, hoặc tree cụ thể. ```bash # Checkout (chuyển) một repo - mặc định là nhánh master @@ -201,8 +202,8 @@ $ git checkout -b newBranch ### clone Nhân bản, hoặc sao chép, một repo hiện có thành một thư mục mới. Nó cũng thêm -các nhánh có remote-tracking cho mỗi nhánh trong một repo được nhân bản, mà -cho phép bạn push đến một nhánh remote. +các branch có remote-tracking cho mỗi branch trong một repo được nhân bản, mà +cho phép bạn push đến một remote branch. ```bash # Nhân bản learnxinyminutes-docs @@ -211,7 +212,7 @@ $ git clone https://github.com/adambard/learnxinyminutes-docs.git ### commit -Lưu trữ nội dung hiện tại của index trong một "commit" mới. Điều này cho phép tạo ra thay đổi và một lời nhắn (ghi chú) tạo ra bởi người dùng. +Lưu trữ nội dung hiện tại của index trong một "commit" mới. Điều này cho phép tạo ra thay đổi và một ghi chú tạo ra bởi người dùng. ```bash # commit với một ghi chú @@ -279,7 +280,7 @@ $ git log --merges "Trộn" các thay đổi từ commit bên ngoài vào trong nhánh hiện tại. ```bash -# Merge nhánh cụ thể vào nhánh hiện tại. +# Merge branch cụ thể vào branch hiện tại. $ git merge branchName # Luôn khởi tạo một merge commit khi trộn (merge) @@ -304,30 +305,35 @@ $ git mv -f myFile existingFile ### pull -Kéo (tải) về từ một repo và merge nó vào nhánh khác. +Pull về từ một repo và merge nó vào branch khác. ```bash -# Cập nhật repo cục bộ của bạn, bằng cách merge các thay đổi mới +# Cập nhật repo local của bạn, bằng cách merge các thay đổi mới # từ remote "origin" và nhánh "master". # git pull # git pull => hoàn toàn mặc định như => git pull origin master $ git pull origin master -# Merge các thay đổi từ nhánh remote và rebase -# các commit nhánh lên trên thư mục cục bộ, như: "git pull , git rebase " +# Merge các thay đổi từ remote branch và rebase +# các commit trong branch lên trên local repo, như sau: "git pull , git rebase " $ git pull origin master --rebase ``` ### push -Đẩy và trộn (mege) các tay đổi từ một nhánh đế một remote & nhánh. - -```bash -# Push và merge các thay đổi từ repo cục bộ đến một -# remote tên là "origin" và nhánh "master". -# git push -# git push => hoàn toàn defaults to => git push origin master -$ git push origin master +push và merge các thay đổi từ một branch đến một remote & branch. + +```bash +# Push và merge các thay đổi từ một repo local đến một +# remote có tên là "origin" và nhánh "master". +# git push +# git push => mặc định ẩn đến => git push origin master +$ git push origin master + +# Để liên kết đến một branch local với một branch remote, thêm vào cờ -u: +$ git push -u origin master +# Từ lúc này, bất cứ khi nào bạn muốn push từ cùng một nhánh local đó, sử dụng lối tắt: +$ git push ``` ### rebase (thận trọng) @@ -390,4 +396,8 @@ $ git rm /pather/to/the/file/HelloWorld.c * [SalesForce Cheat Sheet](https://na1.salesforce.com/help/doc/en/salesforce_git_developer_cheatsheet.pdf) -* [GitGuys](http://www.gitguys.com/) +* [GitGuys](http://www.gitguys.com/) + +* [Git - the simple guide](http://rogerdudler.github.io/git-guide/index.html) + + -- cgit v1.2.3 From e4889157c7e1f0550b0f2b57b46bc7c085a917f4 Mon Sep 17 00:00:00 2001 From: Andrei Curelaru Date: Sat, 25 Oct 2014 14:56:07 +0200 Subject: mi chemin --- fr-fr/markdown.html.markdown | 174 +++++++++++++++++++++---------------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index 32806054..82c26bb0 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -1,30 +1,27 @@ --- language: markdown contributors: - - ["Andrei Curelaru", "http://infinidad.fr/"] +- ["Andrei Curelaru", "http://www.infinidad.fr"] filename: markdown.md --- -Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être une syntaxe facile à lire et à écrire, aisément convertible en HTML(et beaucoup d'autres formats aussi à present). +Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être d'une syntaxe facile à lire et à écrire, +aisément convertible en HTML(et beaucoup d'autres formats aussi à présent). -Donnez moi autant de retours que vous voulez! -Sentez vous libre de forker et envoyer des pull request! +Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" et envoyer des pull request! ```markdown - - - + + - + # Ceci est un

## Ceci est un

### Ceci est un

@@ -32,122 +29,125 @@ text you want to be in that element by a number of hashes (#) --> ##### Ceci est un

###### Ceci est un
- + Ceci est un h1 ============= Ceci est un h2 ------------- - - - -*This text is in italics.* -_And so is this text._ + + -**This text is in bold.** -__And so is this text.__ +*Ce texte est en italique.* +_Celui-ci aussi._ -***This text is in both.*** -**_As is this!_** -*__And this!__* +**CE texte est en gras.** +__Celui-là aussi.__ - +***Ce texte a les deux styles.*** +**_Pareil ici_** +*__Et là!__* -~~This text is rendered with strikethrough.~~ + - +~~Ce texte est barré avec strikethrough.~~ + -This is a paragraph. I'm typing in a paragraph isn't this fun? +Ceci est un paragraphe. J'écris dans un paragraphe, marrant non? -Now I'm in paragraph 2. -I'm still in paragraph 2 too! +Maintenant je suis dans le paragraphe 2. +Je suis toujours dans le paragraphe 2 ici aussi! -I'm in paragraph three! +Puis là, eh oui, le paragraphe3! + -I end with two spaces (highlight me to see them). +J'ai deux espaces vides à la fin (sélectionnez moi pour les voir). -There's a
above me! +Bigre, il y a un
au dessus de moi! - + -> This is a block quote. You can either -> manually wrap your lines and put a `>` before every line or you can let your lines get really long and wrap on their own. -> It doesn't make a difference so long as they start with a `>`. +> Ceci est une superbe citation. Vous pouvez même +> revenir à la ligne quand ça vous chante, et placer un `>` devant chaque bout de ligne faisant partie +> de la citation. +> La taille ne compte pas^^ tant que chaque ligne commence par un `>`. -> You can also use more than one level ->> of indentation? -> How neat is that? +> Vous pouvez aussi utiliser plus d'un niveau +>> d'imbrication! +> Class et facile, pas vrai? - - + + * Item * Item -* Another item +* Un autre item or + Item + Item -+ One more item ++ Encore un item -or +or - Item - Item -- One last item +- Un dernier item - + -1. Item one -2. Item two -3. Item three +1. Item un +2. Item deux +3. Item trois - + -1. Item one -1. Item two -1. Item three - +1. Item un +1. Item deux +1. Item trois + - + -1. Item one -2. Item two -3. Item three - * Sub-item - * Sub-item -4. Item four +1. Item un +2. Item deux +3. Item trois +* Sub-item +* Sub-item +4. Item quatre - + -Boxes below without the 'x' are unchecked HTML checkboxes. -- [ ] First task to complete. -- [ ] Second task that needs done -This checkbox below will be a checked HTML checkbox. -- [x] This task has been completed +Les [ ] ci dessous, n'ayant pas de [ x ], deviendront des cases à cocher HTML non-cochées. +- [ ] Première tache à réaliser. +- [ ] Une autre chose à faire. +La case suivante sera une case à cocher HTML cochée. +- [x] Ca ... c'est fait! - - + + - This is code - So is this +This is code +So is this - my_array.each do |item| - puts item - end +my_array.each do |item| +puts item +end @@ -157,7 +157,7 @@ John didn't even know what the `go_to()` function did! \`\`\`ruby def foobar - puts "Hello world!" +puts "Hello world!" end \`\`\` @@ -170,7 +170,7 @@ with or without spaces. --> *** --- -- - - +- - - **************** @@ -237,10 +237,10 @@ in italics, so I do this: \*this text surrounded by asterisks\*. -| Col1 | Col2 | Col3 | +| Col1 | Col2 | Col3 | | :----------- | :------: | ------------: | | Left-aligned | Centered | Right-aligned | -| blah | blah | blah | +| blah | blah | blah | @@ -248,8 +248,8 @@ Col 1 | Col2 | Col3 :-- | :-: | --: Ugh this is so ugly | make it | stop - + ``` -For more info, check out John Gruber's official post of syntax [here](http://daringfireball.net/projects/markdown/syntax) and Adam Pritchard's great cheatsheet [here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). +For more info, check out John Gruber's official post of syntax [here](http://daringfireball.net/projects/markdown/syntax) and Adam Pritchard's great cheatsheet [here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). \ No newline at end of file -- cgit v1.2.3 From 476c3a21c6f38c4497c968f8b8d2a946542da137 Mon Sep 17 00:00:00 2001 From: Andrei Curelaru Date: Sat, 25 Oct 2014 16:43:50 +0200 Subject: =?UTF-8?q?ay=C3=A9=20c'est=20fait?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fr-fr/markdown.html.markdown | 155 ++++++++++++++++++++----------------------- 1 file changed, 72 insertions(+), 83 deletions(-) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index 82c26bb0..b1b000fa 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -5,23 +5,20 @@ contributors: filename: markdown.md --- -Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être d'une syntaxe facile à lire et à écrire, -aisément convertible en HTML(et beaucoup d'autres formats aussi à présent). +Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être d'une syntaxe facile à lire et à écrire, aisément convertible en HTML (et beaucoup d'autres formats aussi à présent). Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" et envoyer des pull request! ```markdown - - + + + + + - + # Ceci est un

## Ceci est un

### Ceci est un

@@ -42,40 +39,37 @@ Ceci est un h2 *Ce texte est en italique.* _Celui-ci aussi._ -**CE texte est en gras.** +**Ce texte est en gras.** __Celui-là aussi.__ ***Ce texte a les deux styles.*** **_Pareil ici_** *__Et là!__* - + ~~Ce texte est barré avec strikethrough.~~ + +séparées par une ou plusieurs lignes vides. --> -Ceci est un paragraphe. J'écris dans un paragraphe, marrant non? +Ceci est un paragraphe. Là, je suis dans un paragraphe, facile non? Maintenant je suis dans le paragraphe 2. Je suis toujours dans le paragraphe 2 ici aussi! -Puis là, eh oui, le paragraphe3! +Puis là, eh oui, le paragraphe 3! - J'ai deux espaces vides à la fin (sélectionnez moi pour les voir). Bigre, il y a un
au dessus de moi! - + > Ceci est une superbe citation. Vous pouvez même > revenir à la ligne quand ça vous chante, et placer un `>` devant chaque bout de ligne faisant partie @@ -87,32 +81,31 @@ Bigre, il y a un
au dessus de moi! > Class et facile, pas vrai? - + * Item * Item * Un autre item -or +ou + Item + Item + Encore un item -or +ou - Item - Item - Un dernier item - + 1. Item un 2. Item deux 3. Item trois - + 1. Item un 1. Item deux @@ -137,119 +130,115 @@ La case suivante sera une case à cocher HTML cochée. - [x] Ca ... c'est fait! - + -This is code -So is this + echo "Ca, c'est du Code!"; + var Ca = "aussi !"; - + -my_array.each do |item| -puts item -end + my_array.each do |item| + puts item + end - + -John didn't even know what the `go_to()` function did! +La fonction `run()` ne vous oblige pas d'aller courir! - + -\`\`\`ruby +\`\`\`ruby def foobar puts "Hello world!" end -\`\`\` +\`\`\` -<-- The above text doesn't require indenting, plus Github will use syntax -highlighting of the language you specify after the ``` --> +<-- Pas besoin d'indentation pour le code juste au dessus, de plus, Github va utiliser une coloration syntaxique pour le langage indiqué après les ``` --> - - + + *** --- - - - **************** - - + + -[Click me!](http://test.com/) +[Clic moi!](http://test.com/) - + -[Click me!](http://test.com/ "Link to Test.com") +[Clic moi!](http://test.com/ "Lien vers Test.com") - + -[Go to music](/music/). +[En avant la musique](/music/). - + -[Click this link][link1] for more info about it! -[Also check out this link][foobar] if you want to. +[Cliquez ici][link1] pour plus d'information! +[Regardez aussi par ici][foobar] si vous voulez. [link1]: http://test.com/ "Cool!" [foobar]: http://foobar.biz/ "Alright!" - + - + -[This][] is a link. +[Ceci][] est un lien. -[this]: http://thisisalink.com/ +[ceci]: http://ceciestunlien.com/ - + - + -![This is the alt-attribute for my image](http://imgur.com/myimage.jpg "An optional title") +![Ceci est l'attribut ALT de l'image](http://imgur.com/monimage.jpg "Titre optionnel") - + -![This is the alt-attribute.][myimage] +![Ceci est l'attribut ALT de l'image][monimage] -[myimage]: relative/urls/cool/image.jpg "if you need a title, it's here" +[monimage]: relative/urls/cool/image.jpg "si vous voulez un titre, c'est ici." - - + + - is equivalent to + est équivalent à : [http://testwebsite.com/](http://testwebsite.com/) - + - + +Il suffit de précéder les caractères spécifiques à ignorer par des backslash \ -I want to type *this text surrounded by asterisks* but I don't want it to be -in italics, so I do this: \*this text surrounded by asterisks\*. +Pour taper *ce texte* entouré d'astérisques mais pas en italique : Tapez \*ce texte\*. - - + + | Col1 | Col2 | Col3 | | :----------- | :------: | ------------: | -| Left-aligned | Centered | Right-aligned | -| blah | blah | blah | +| Alignement Gauche | Centé | Alignement Droite | +| bla | bla | bla | - + Col 1 | Col2 | Col3 :-- | :-: | --: -Ugh this is so ugly | make it | stop +Ough que c'est moche | svp | arrêtez ``` -For more info, check out John Gruber's official post of syntax [here](http://daringfireball.net/projects/markdown/syntax) and Adam Pritchard's great cheatsheet [here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). \ No newline at end of file +Pour plus d'information, consultez [ici](http://daringfireball.net/projects/markdown/syntax) le post officiel de Jhon Gruber à propos de la syntaxe, et [là](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) la superbe cheatsheet de Adam Pritchard. \ No newline at end of file -- cgit v1.2.3 From 710e504fbcb4c70abb2f9eb2ac8c6f7cbd879d50 Mon Sep 17 00:00:00 2001 From: Jelle Besseling Date: Sat, 25 Oct 2014 16:19:40 +0200 Subject: Dutch translation of the brainfuck tutorial --- nl-nl/brainfuck-nl.html.markdown | 86 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 nl-nl/brainfuck-nl.html.markdown diff --git a/nl-nl/brainfuck-nl.html.markdown b/nl-nl/brainfuck-nl.html.markdown new file mode 100644 index 00000000..cd12b1d0 --- /dev/null +++ b/nl-nl/brainfuck-nl.html.markdown @@ -0,0 +1,86 @@ +--- +language: brainfuck +contributors: + - ["Prajit Ramachandran", "http://prajitr.github.io/"] + - ["Mathias Bynens", "http://mathiasbynens.be/"] +translators: + - ["Jelle Besseling", "https://github.com/Jell-E"] +lang: nl-nl +--- + +Brainfuck (schrijf je niet met een hoofdletter behalve aan het begin van een +zin) is een extreem +minimalistische Turing-complete programmeertaal met maar acht commando's. + +``` +Elk karakter behalve "><+-.,[]" (en de quotes) wordt genegeerd. + +Brainfuck wordt gerepresenteerd door een array met 30,000 cellen die initieel +gevuld is met nullen en een pointer die wijst naar de huidige cel. + +Dit zijn de acht commando's: ++ : Verhoog de huidige cell met 1. +- : Verminder de huidige cell met 1. +> : Beweeg de pointer naar de volgende cell (één naar rechts). +< : Beweeg de pointer naar de vorige cell (één naar links). +. : Print de huidige cell als een ASCII karakter(d.w.z. 65 = 'A'). +, : Lees een karakter in de huidige cell. +[ : Als de huidige cell nul is ga dan naar de bijbehorende ] . + Als het geen nul is, ga dan gewoon verder. +] : Als de huidige cell nul is ga dan gewoon verder. + Als het geen nul is, ga dan terug naar de bijbehorende [ . + +[ en ] maken een while loop. Ze moeten uiteraard wel gebalanceerd zijn + +Laten we een kijkje nemen naar een paar brainfuck programma's. + +++++++ [ > ++++++++++ < - ] > +++++ . + +Dit programma print het karakter 'A'. Eerst verhoogt het cell #1 tot 6. +Cell #1 wordt gebruikt om te loopen. Dan begint het de loop ([) en gaat +naar cell #2. Het verhoogt cell #2 tien keer, gaat terug naar cell #1, en +verlaagt cell #1. Deze loop gebeurt zes keer (na zes keer staat cell #1 +weer op nul, waarna het doorgaat naar het einde van de loop (]) en +verder gaat). + +De pointer staat nu weer op cell #1, deze heeft een waarde van 0, en cell #2 +heeft een waarde van 60. > beweegt de pointer naar cell #2, daarna verhoogt +het de cell vijf keer, waardoor het een waarde van 65 bevat, en print dan +de waarde van cell #2. 65 is 'A' in ASCII, dus 'A' wordt geprint in de terminal. + + +, [ > + < - ] > . + +Dit programma leest een karakter van de gebruiker in put en kopieert dat +karakter in cel #1. Dan start de loop. Ga naar cel #2, verhoog de waarde in +cel #2, ga terug naar cel #1, en verklein de waarde in cel #1. Dit gaat door +totdat cel #1 nul is en cel #2 de oude waarde heeft van cell #1. Omdat we +op cel #1 staan verplaatst > de pointer één naar rechts en . print het +karakter in cel #2. + +Houd wel in gedachten dat de spaties alleen zijn voor leesbaarheid, je kan het +bovenstaande programma net zo goed schrijven als: + +,[>+<-]>. + +Probeer maar eens te bedenken wat het volgende programma doet: + +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> + +Dit programma neemt twee getallen als input, en vermenigvuldigt ze. + +In het begin leest het twee karakters in cel #1 en #2. Dan start het de +buitenste loop, met als teller cel #1. Het beweegt naar cel #2, dan start het +de binnenste loop met als teller cel #2, daar verhoogd het cel #3. Maar +dan is er een probleem als cel #2 nul wordt aan het einde van de binnenste loop. +Om dit op te lossen wordt ook cel #4 verhoogd naar het oorspronkelijke getal +uit cel #2 en daarna wordt cel #4 weer gekopieerd naar cell #2. +Het resultaat komt in cel #3 te staan. +``` + +En dat is dan brainfuck. Niet heel moeilijk, toch? Je kan zelf voor de lol +brainfuck programma's gaan schrijven, of je kan een interpreter schrijven +voor brainfuck in een andere taal. Het is namelijk redelijk makkelijk om te +implementeren aangezien brainfuck maar acht commando's heeft. En als je een +masochist bent kan je ook nog proberen om brainfuck te implementeren… in +brainfuck. -- cgit v1.2.3 From 9ff3a57c07c654a41460d113f7a8535a97d5c642 Mon Sep 17 00:00:00 2001 From: Jelle Besseling Date: Sat, 25 Oct 2014 16:36:27 +0200 Subject: [python/de] Fix typo in url of German translation My text editor apparently also fixed some incorrect trailing spaces and tabs on empty lines --- de-de/python-de.html.markdown | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/de-de/python-de.html.markdown b/de-de/python-de.html.markdown index 5ddb6f4b..b996ccae 100644 --- a/de-de/python-de.html.markdown +++ b/de-de/python-de.html.markdown @@ -3,7 +3,7 @@ language: python contributors: - ["Louie Dinh", "http://ldinh.ca"] translators: - - ["kultprok", "http:/www.kulturproktologie.de"] + - ["kultprok", "http://www.kulturproktologie.de"] filename: learnpython-de.py lang: de-de --- @@ -17,7 +17,7 @@ Hinweis: Dieser Beitrag bezieht sich besonders auf Python 2.7, er sollte aber au ```python # Einzeilige Kommentare beginnen mit einer Raute (Doppelkreuz) -""" Mehrzeilige Strings werden mit +""" Mehrzeilige Strings werden mit drei '-Zeichen geschrieben und werden oft als Kommentare genutzt. """ @@ -283,7 +283,7 @@ Ausgabe: for animal in ["hund", "katze", "maus"]: # Wir können Strings mit % formatieren print "%s ist ein Säugetier" % animal - + """ `range(Zahl)` gibt eine null-basierte Liste bis zur angegebenen Zahl wieder Ausgabe: @@ -458,7 +458,7 @@ import math as m math.sqrt(16) == m.sqrt(16) #=> True # Module sind in Python nur gewöhnliche Dateien. Wir -# können unsere eigenen schreiben und importieren. Der Name des +# können unsere eigenen schreiben und importieren. Der Name des # Moduls ist der Dateiname. # Wir können auch die Funktionen und Attribute eines @@ -484,4 +484,3 @@ dir(math) * [Programming Python](http://www.amazon.com/gp/product/0596158106/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596158106&linkCode=as2&tag=homebits04-20) * [Dive Into Python](http://www.amazon.com/gp/product/1441413022/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441413022&linkCode=as2&tag=homebits04-20) * [Python Essential Reference](http://www.amazon.com/gp/product/0672329786/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0672329786&linkCode=as2&tag=homebits04-20) - -- cgit v1.2.3 From 059ef4ebfafb9ae46603599c0619f0e2634c693a Mon Sep 17 00:00:00 2001 From: Jelle Besseling Date: Sat, 25 Oct 2014 16:38:43 +0200 Subject: Revert "[python/de] Fix typo in url of German translation" This reverts commit c44552b25840c742043aa64470f5cc3caaac4a5b. --- de-de/python-de.html.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/de-de/python-de.html.markdown b/de-de/python-de.html.markdown index b996ccae..5ddb6f4b 100644 --- a/de-de/python-de.html.markdown +++ b/de-de/python-de.html.markdown @@ -3,7 +3,7 @@ language: python contributors: - ["Louie Dinh", "http://ldinh.ca"] translators: - - ["kultprok", "http://www.kulturproktologie.de"] + - ["kultprok", "http:/www.kulturproktologie.de"] filename: learnpython-de.py lang: de-de --- @@ -17,7 +17,7 @@ Hinweis: Dieser Beitrag bezieht sich besonders auf Python 2.7, er sollte aber au ```python # Einzeilige Kommentare beginnen mit einer Raute (Doppelkreuz) -""" Mehrzeilige Strings werden mit +""" Mehrzeilige Strings werden mit drei '-Zeichen geschrieben und werden oft als Kommentare genutzt. """ @@ -283,7 +283,7 @@ Ausgabe: for animal in ["hund", "katze", "maus"]: # Wir können Strings mit % formatieren print "%s ist ein Säugetier" % animal - + """ `range(Zahl)` gibt eine null-basierte Liste bis zur angegebenen Zahl wieder Ausgabe: @@ -458,7 +458,7 @@ import math as m math.sqrt(16) == m.sqrt(16) #=> True # Module sind in Python nur gewöhnliche Dateien. Wir -# können unsere eigenen schreiben und importieren. Der Name des +# können unsere eigenen schreiben und importieren. Der Name des # Moduls ist der Dateiname. # Wir können auch die Funktionen und Attribute eines @@ -484,3 +484,4 @@ dir(math) * [Programming Python](http://www.amazon.com/gp/product/0596158106/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596158106&linkCode=as2&tag=homebits04-20) * [Dive Into Python](http://www.amazon.com/gp/product/1441413022/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441413022&linkCode=as2&tag=homebits04-20) * [Python Essential Reference](http://www.amazon.com/gp/product/0672329786/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0672329786&linkCode=as2&tag=homebits04-20) + -- cgit v1.2.3 From f7aadaff81b3d0c55c4ea2fbea65774590daa2e6 Mon Sep 17 00:00:00 2001 From: Andrei Curelaru Date: Sat, 25 Oct 2014 16:59:58 +0200 Subject: some fixes on line-length --- fr-fr/markdown.html.markdown | 106 ++++++++++++++++++++++++++++++------------- 1 file changed, 75 insertions(+), 31 deletions(-) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index b1b000fa..ba6c038d 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -5,20 +5,32 @@ contributors: filename: markdown.md --- -Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être d'une syntaxe facile à lire et à écrire, aisément convertible en HTML (et beaucoup d'autres formats aussi à présent). +Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être d'une syntaxe +facile à lire et à écrire, aisément convertible en HTML, +(et beaucoup d'autres formats aussi à présent). -Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" et envoyer des pull request! +Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" +et envoyer des pull request! ```markdown - + - + - + - + # Ceci est un

## Ceci est un

### Ceci est un

@@ -26,7 +38,10 @@ Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" et e ##### Ceci est un

###### Ceci est un
- + + Ceci est un h1 ============= @@ -46,11 +61,12 @@ __Celui-là aussi.__ **_Pareil ici_** *__Et là!__* - + ~~Ce texte est barré avec strikethrough.~~ - Ceci est un paragraphe. Là, je suis dans un paragraphe, facile non? @@ -62,17 +78,21 @@ Je suis toujours dans le paragraphe 2 ici aussi! Puis là, eh oui, le paragraphe 3! J'ai deux espaces vides à la fin (sélectionnez moi pour les voir). Bigre, il y a un
au dessus de moi! - + > Ceci est une superbe citation. Vous pouvez même -> revenir à la ligne quand ça vous chante, et placer un `>` devant chaque bout de ligne faisant partie +> revenir à la ligne quand ça vous chante, et placer un `>` +> devant chaque bout de ligne faisant partie > de la citation. > La taille ne compte pas^^ tant que chaque ligne commence par un `>`. @@ -81,7 +101,8 @@ Bigre, il y a un
au dessus de moi! > Class et facile, pas vrai? - + * Item * Item @@ -105,12 +126,13 @@ ou 2. Item deux 3. Item trois - + 1. Item un 1. Item deux 1. Item trois - + @@ -121,16 +143,20 @@ ou * Sub-item 4. Item quatre - + + +Les [ ] ci dessous, n'ayant pas de [ x ], +deviendront des cases à cocher HTML non-cochées. -Les [ ] ci dessous, n'ayant pas de [ x ], deviendront des cases à cocher HTML non-cochées. - [ ] Première tache à réaliser. - [ ] Une autre chose à faire. La case suivante sera une case à cocher HTML cochée. - [x] Ca ... c'est fait! - + echo "Ca, c'est du Code!"; var Ca = "aussi !"; @@ -146,18 +172,21 @@ fonctionne aussi à l'intérieur du bloc de code --> La fonction `run()` ne vous oblige pas d'aller courir! - + -\`\`\`ruby +\`\`\`ruby + def foobar puts "Hello world!" end \`\`\` -<-- Pas besoin d'indentation pour le code juste au dessus, de plus, Github va utiliser une coloration syntaxique pour le langage indiqué après les ``` --> +<-- Pas besoin d'indentation pour le code juste au dessus, de plus, Github +va utiliser une coloration syntaxique pour le langage indiqué après les ``` --> - *** @@ -166,12 +195,16 @@ avec ou sans espaces entre chaque un. --> **************** - [Clic moi!](http://test.com/) - + [Clic moi!](http://test.com/ "Lien vers Test.com") @@ -187,9 +220,13 @@ avec ou sans espaces entre chaque un. --> [link1]: http://test.com/ "Cool!" [foobar]: http://foobar.biz/ "Alright!" - + - + [Ceci][] est un lien. @@ -198,9 +235,10 @@ avec ou sans espaces entre chaque un. --> - + -![Ceci est l'attribut ALT de l'image](http://imgur.com/monimage.jpg "Titre optionnel") +![Attribut ALT de l'image](http://imgur.com/monimage.jpg "Titre optionnel") @@ -221,10 +259,14 @@ avec ou sans espaces entre chaque un. --> Il suffit de précéder les caractères spécifiques à ignorer par des backslash \ -Pour taper *ce texte* entouré d'astérisques mais pas en italique : Tapez \*ce texte\*. +Pour taper *ce texte* entouré d'astérisques mais pas en italique : +Tapez \*ce texte\*. - + | Col1 | Col2 | Col3 | | :----------- | :------: | ------------: | @@ -241,4 +283,6 @@ Ough que c'est moche | svp | arrêtez ``` -Pour plus d'information, consultez [ici](http://daringfireball.net/projects/markdown/syntax) le post officiel de Jhon Gruber à propos de la syntaxe, et [là](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) la superbe cheatsheet de Adam Pritchard. \ No newline at end of file +Pour plus d'information : + consultez [ici](http://daringfireball.net/projects/markdown/syntax) le post officiel de Jhon Gruber à propos de la syntaxe, + et [là](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) la superbe cheatsheet de Adam Pritchard. \ No newline at end of file -- cgit v1.2.3 From 9bfb86a75df37132f915d964990d25862d9ded7d Mon Sep 17 00:00:00 2001 From: Andrei Curelaru Date: Sat, 25 Oct 2014 19:47:24 +0200 Subject: typographic and other fixes --- fr-fr/markdown.html.markdown | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index ba6c038d..edd3f025 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -5,9 +5,9 @@ contributors: filename: markdown.md --- -Markdown a été crée par Jhon Gruber en 2004. Ceci se veut être d'une syntaxe -facile à lire et à écrire, aisément convertible en HTML, -(et beaucoup d'autres formats aussi à présent). +Markdown a été créé par Jhon Gruber en 2004. Il se veut être d'une syntaxe +facile à lire et à écrire, aisément convertible en HTML + (et beaucoup d'autres formats aussi à présent). Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" et envoyer des pull request! @@ -18,18 +18,18 @@ et envoyer des pull request! est un document Markdown valide. Autrement dit, vous pouvez utiliser des balises HTML dans un fichier Markdown, comme la balise commentaire dans laquelle nous sommes à présent, car celle-ci ne sera pas affectée par -le parser(analyseur syntaxique) Markdown. --> +le parser( analyseur syntaxique ) Markdown. --> - + - + # Ceci est un

## Ceci est un

@@ -61,8 +61,8 @@ __Celui-là aussi.__ **_Pareil ici_** *__Et là!__* - + ~~Ce texte est barré avec strikethrough.~~ @@ -72,7 +72,7 @@ séparées par une ou plusieurs lignes vides. --> Ceci est un paragraphe. Là, je suis dans un paragraphe, facile non? Maintenant je suis dans le paragraphe 2. -Je suis toujours dans le paragraphe 2 ici aussi! +Je suis toujours dans le paragraphe 2! Puis là, eh oui, le paragraphe 3! @@ -87,18 +87,17 @@ J'ai deux espaces vides à la fin (sélectionnez moi pour les voir). Bigre, il y a un
au dessus de moi! - + > Ceci est une superbe citation. Vous pouvez même -> revenir à la ligne quand ça vous chante, et placer un `>` +> revenir à la ligne quand ça vous chante, et placer un `>` > devant chaque bout de ligne faisant partie > de la citation. > La taille ne compte pas^^ tant que chaque ligne commence par un `>`. > Vous pouvez aussi utiliser plus d'un niveau >> d'imbrication! -> Class et facile, pas vrai? +> Classe et facile, pas vrai? +les bons chiffres. Ceci dit, cette variante perd en clarté.--> 1. Item un 1. Item deux 1. Item trois - + @@ -152,16 +151,16 @@ deviendront des cases à cocher HTML non-cochées. - [ ] Première tache à réaliser. - [ ] Une autre chose à faire. La case suivante sera une case à cocher HTML cochée. -- [x] Ca ... c'est fait! +- [x] Ça ... c'est fait! - echo "Ca, c'est du Code!"; - var Ca = "aussi !"; + echo "Ça, c'est du Code!"; + var Ça = "aussi !"; - my_array.each do |item| @@ -170,7 +169,7 @@ fonctionne aussi à l'intérieur du bloc de code --> -La fonction `run()` ne vous oblige pas d'aller courir! +La fonction `run()` ne vous oblige pas à aller courir! -- cgit v1.2.3 From 10fad1328574fdadef79b3e960dc759cebea8770 Mon Sep 17 00:00:00 2001 From: Andrei Curelaru Date: Sat, 25 Oct 2014 19:51:39 +0200 Subject: Good bye Asterix --- fr-fr/markdown.html.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index edd3f025..fa10e62f 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -100,8 +100,8 @@ Bigre, il y a un
au dessus de moi! > Classe et facile, pas vrai? - + * Item * Item -- cgit v1.2.3 From b4edd938235f139dcacd555121a1f755f55482f3 Mon Sep 17 00:00:00 2001 From: Andrei Curelaru Date: Sat, 25 Oct 2014 22:36:40 +0200 Subject: other fixes --- fr-fr/markdown.html.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index fa10e62f..e3ac5a92 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -175,11 +175,12 @@ La fonction `run()` ne vous oblige pas à aller courir! des syntaxes spécifiques --> \`\`\`ruby - + def foobar puts "Hello world!" end -\`\`\` +\`\`\` <-- Pas besoin d'indentation pour le code juste au dessus, de plus, Github va utiliser une coloration syntaxique pour le langage indiqué après les ``` --> -- cgit v1.2.3 From 928fdd34b03a3e5ef5f30327a3072c242c549fd7 Mon Sep 17 00:00:00 2001 From: Baptiste Fontaine Date: Sun, 26 Oct 2014 12:57:49 +0100 Subject: [markdown/en] Fixed typo in language author MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s “John Gruber”, not “Jhon Gruber”. --- fr-fr/markdown.html.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index e3ac5a92..50e507cd 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -5,7 +5,7 @@ contributors: filename: markdown.md --- -Markdown a été créé par Jhon Gruber en 2004. Il se veut être d'une syntaxe +Markdown a été créé par John Gruber en 2004. Il se veut être d'une syntaxe facile à lire et à écrire, aisément convertible en HTML (et beaucoup d'autres formats aussi à présent). @@ -285,4 +285,4 @@ Ough que c'est moche | svp | arrêtez Pour plus d'information : consultez [ici](http://daringfireball.net/projects/markdown/syntax) le post officiel de Jhon Gruber à propos de la syntaxe, - et [là](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) la superbe cheatsheet de Adam Pritchard. \ No newline at end of file + et [là](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) la superbe cheatsheet de Adam Pritchard. -- cgit v1.2.3 From 9f2d4d80277bd8d420f002b4214fcd48cadad49e Mon Sep 17 00:00:00 2001 From: Baptiste Fontaine Date: Sun, 26 Oct 2014 13:58:11 +0100 Subject: Brainfuck French translation added --- fr-fr/brainfuck-fr.html.markdown | 87 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 fr-fr/brainfuck-fr.html.markdown diff --git a/fr-fr/brainfuck-fr.html.markdown b/fr-fr/brainfuck-fr.html.markdown new file mode 100644 index 00000000..4b8e918f --- /dev/null +++ b/fr-fr/brainfuck-fr.html.markdown @@ -0,0 +1,87 @@ +--- +language: brainfuck +filename: learnbrainfuck-fr.bf +contributors: + - ["Prajit Ramachandran", "http://prajitr.github.io/"] + - ["Mathias Bynens", "http://mathiasbynens.be/"] +translators: + - ["Baptiste Fontaine", "http://bfontaine.net"] +lang: fr-fr +--- + +Brainfuck (sans majuscule à part au début d’une phrase) est un langage +Turing-complet extrêmement simple avec seulement 8 commandes. + +``` +Tout caractère en dehors de "><+-.,[]" (en dehors des guillements) est ignoré. + +Brainfuck est représenté par un tableau de 30 000 cellules initialisées à 0 et +un pointeur de données pointant sur la cellule courante. + +Il y a huit commandes : ++ : Incrémente la valeur de la cellule courante de un. +- : Décrémente la valeur de la cellule courante de un. +> : Déplace le pointeur de données sur la cellule suivante (à droite). +< : Déplace le pointeur de données sur la cellule précédente (à gauche). +. : Affiche la valeur ASCII de la cellule courante (par ex. 65 = 'A'). +, : Lit un caractère et le place dans la cellule courante. +[ : Si la valeur dans la cellule courante vaut 0, saute au ] correspondant. + Sinon, continue avec la commande suivante. +] : Si la valeur dans la cellule courante vaut 0, continue avec la commande + suivante. Sinon, retourne au [ correspondant. + +[ et ] forment une boucle « tant que » (« while »). Ils doivent évidemment +aller par paires. + +Regardons quelques programmes simples en brainfuck. + +++++++ [ > ++++++++++ < - ] > +++++ . + +Ce programme affiche la lettre 'A'. Il commence par incrémenter la première +cellule à 6. Il entre ensuite dans une boucle et se déplace sur la seconde +cellule. Il l’incrémente 10 fois, retourne sur la première cellule, et la +décrémente. Cette boucle est exécutée 6 fois (ce qui correspond aux 6 +décrémentations de la première cellule pour la faire atteindre 0, ce qui fait +sortir de la boucle). + +À ce moment-là, nous sommes sur la première cellule, qui a une valeur de 0, +tandis que la seconde cellule a une valeur de 60. Nous nous déplaçons sur +celle-ci, l’incrémentons 5 fois, pour une valeur de 65, et affichons sa valeur. +En ASCII, 65 correspond à 'A' donc le programme affiche 'A' dans le terminal. + +, [ > + < - ] > . + +Ce programme lit un caractère sur l’entrée standard et le copie dans la +première cellule. Il commence ensuite une boucle : il bouge sur la seconde +cellule, incrémente sa valeur, retourne sur la première et décrémente sa +valeur. Il continue jusqu’à ce que cette valeur soit à 0, et que la seconde +cellule contienne l’ancienne valeur de la première. Comme nous sommes sur la +première cellule à la fin de la boucle, il bouge sur la seconde et affiche sa +valeur en ASCII. + +Souvenez-vous que les espaces sont uniquement pour favoriser la lisibilité, +vous pourriez tout aussi aisément écrire le programme comme ceci : + +,[>+<-]>. + +Essayez et devinez ce que ce programme fait : + +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> + +Ce programme prend deux nombres en entrée, et les multiplie. + +Il commence par lire deux entrées, puis commence une boucle externe, qui a une +condition sur la première cellule. Il bouge ensuite sur la seconde, et commence +une boucle interne sur celle-ci, en incrémentant la troisième cellule. Il y a +cependant un problème : à la fin de la boucle interne, la valeur de la seconde +cellule est à zéro. Dans ce cas, la boucle interne ne fonctionnera pas une +seconde fois. Pour régler le problème, nous incrémentons aussi la quatrième +cellule, puis recopions sa valeur dans la seconde cellule. +À la fin, la troisième cellule contient le résultat de la multiplication. +``` + +Et voilà ce qu’est le brainfuck. Pas très dur, hein ? Pour le fun, vous pouvez +écrire vos propres programmes en brainfuck, ou écrire un interpréteur brainfuck +dans un autre langage. L’interpréteur est relativement simple à implémenter, +mais si vous êtes un masochiste, essayez d’écrire un interpréteur brainfuck en… +brainfuck. -- cgit v1.2.3 From 00c4a6324e177b86c8b26318ed77d7373d8e716f Mon Sep 17 00:00:00 2001 From: Subramanian Date: Mon, 27 Oct 2014 09:06:43 +0530 Subject: correcting the setName method set the method argument dogsName to name, instead of doggie_name --- c++.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c++.html.markdown b/c++.html.markdown index 50de5eff..9f357b08 100644 --- a/c++.html.markdown +++ b/c++.html.markdown @@ -305,7 +305,7 @@ void Dog::Dog() // if you are modifying them or const reference if you are not. void Dog::setName(const std::string& dogsName) { - name = doggie_name; + name = dogsName; } void Dog::setWeight(int dogsWeight) -- cgit v1.2.3 From fb28f2c10258eb92dc40db648a304f3e5b78bd2f Mon Sep 17 00:00:00 2001 From: ml242 Date: Mon, 27 Oct 2014 00:43:20 -0400 Subject: Your Name: Matt Subject Line: Addresses Comparisons in Javascript What Happened: I believe that starting out with the double equals instead of the triple equals for strict comparison checking is incorrect. Because double equals uses type coercion, it is more of a feature the needs to be understood. Beginners looking at the language should look upon the stricter method as the proper one because it is less likely to give a surprising result. I also tried to address the behaviour by adding an example to the double equals comparison. Hope that the community is interested in pulling in these changes, they stem from teaching beginners javaScript but I am by no means the authority. --- javascript.html.markdown | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/javascript.html.markdown b/javascript.html.markdown index 76017c17..f190ff98 100644 --- a/javascript.html.markdown +++ b/javascript.html.markdown @@ -77,13 +77,13 @@ false; !true; // = false !false; // = true -// Equality is == -1 == 1; // = true -2 == 1; // = false +// Equality is === +1 === 1; // = true +2 === 1; // = false -// Inequality is != -1 != 1; // = false -2 != 1; // = true +// Inequality is !== +1 !== 1; // = false +2 !== 1; // = true // More comparisons 1 < 10; // = true @@ -97,11 +97,13 @@ false; // and are compared with < and > "a" < "b"; // = true -// Type coercion is performed for comparisons... +// Type coercion is performed for comparisons with double equals... "5" == 5; // = true +null == undefined; // = true // ...unless you use === "5" === 5; // = false +null === undefined; // = false // You can access characters in a string with charAt "This is a string".charAt(0); // = 'T' -- cgit v1.2.3 From b82da4edfe654617b3309f3fba382a13f2565c81 Mon Sep 17 00:00:00 2001 From: Russell Allen Date: Mon, 27 Oct 2014 22:07:24 +1100 Subject: First draft Self page --- self.html.markdown | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 self.html.markdown diff --git a/self.html.markdown b/self.html.markdown new file mode 100644 index 00000000..bd81285e --- /dev/null +++ b/self.html.markdown @@ -0,0 +1,142 @@ +--- +language: self +contributors:r + - ["Russell Allen", "http://github.com/russellallen"] +filename: self.html.markdown +--- + +Self is a fast prototype based OO language which runs in its own JIT vm. Most development is done through interacting with live objects through a visual development environment called *morphic* with integrated browsers and debugger. + +Everything in Self is an object. All computation is done by sending messages to objects. Objects in Self can be understood as sets of key-value slots. + +# Constructing objects + +The inbuild Self parser can construct objects, including method objects. + +``` +"This is a comment" + +"A string:" +'This is a string with \'escaped\' characters.\n' + +"A 30 bit integer" +23 + +"A 30 bit float" +3.2 + +"-20" +-14r16 + +"An object which only understands one message, 'x' which returns 20" +(| + x = 20. +|) + +"An object which also understands 'x:' which sets the x slot" +(| + x <- 20. +|) + +"An object which understands the method 'doubleX' which doubles the value of x and then returns the object" +(| + x <- 20. + doubleX = (x: x * 2. self) +|) + +"An object which understands all the messages that 'traits point' understands". The parser looks up 'traits point' by sending the messages 'traits' then 'point' to a known object called the 'lobby'. It looks up the 'true' object by also sending the message 'true' to the lobby." +(| parent* = traits point. + x = 7. + y <- 5. + isNice = true. +|) +``` + +# Sending messages to objects + +Messages can either be unary, binary or keyword. Precedence is in that order. Unlike Smalltalk, the precedence of binary messages must be specified, and all keywords after the first must start with a capital letter. Messages are separeated from their destination by whitespace. + +``` +23 printLine → unary message, sends 'printLine' to the object '23' + which prints the string '23' to stdout and returns the receiving object (ie 23) +(23 + 7) * 8 → sends the message '+' with '7' to '23', then the message '*' with '8' to the result +2 power: 8 → sends 'power:' to '2' with '8' returns 256 +'hello' keyOf: 'e' IfAbsent: -1 → sends 'keyOf:IfAbsent:' to 'hello' with arguments 'e' and '-1'. Returns 1, the index of 'e' in 'hello'. +``` + +# Blocks + +Self defines flow control like Smalltalk and Ruby by way of blocks. Blocks are delayed computations of the form: + +``` +[|:x. localVar| x doSomthing With: localVar] +``` + +Examples of the use of a block: + +``` +'hello' copyMutable mapBy: [|:c| c capitalize] → 'HELLO' + +'hello' size > 5 ifTrue: ['Yay'] False: ['Nah'] → 'Nah' + +'hello' copyMutable mapBy: [|:c| + c = 'e' ifTrue: [c capitalize] + False: ['a']] + → 'HaLLO' +``` + +Multiple expressions are separated by a period. ^ returns immediately. + +``` +'hello' copyMutable mapBy: [|:c. tmp <- ''| + tmp: c capitalize. + tmp = 'E' ifTrue: [^ 'An \'E\'! How icky!']. + c capitalize + ] + → An 'E'! How icky! +``` + +Blocks are performed by sending them the message 'value' and inherit (delegate to) their contexts: +``` +[|x| + x: 15. + "Repeatedly sends 'value' to the first block while the result of sending 'value' to the + second block is the 'true' object" + [x > 0] whileTrue: [x: x - 1]. + x +] value → 0 +``` + +# Methods + +Methods are like blocks but are not within a context but are the values of slots. Unlike Smalltalk, methods by default return their final value not 'self'. + +``` +"Here is an object with one assignable slot 'x' and a method 'reduceXTo: y'" +(| + x <- 50. + reduceXTo: y = ( + [x > y] whileTrue: [x: x - 1]. + self) +|) +"Sending the message 'reduceXTo: 10' to this object will put the object '10' in the 'x' slot and return the original object" +``` + +# Prototypes + +Self has no classes. The way to get an object is to find a prototype and copy it. + +``` +| d | +d: dictionary copy. +d at: 'hello' Put: 23 + 8. +d at: 'goodbye' Put: 'No!. +"Prints No!" +( d at: 'goodbye' IfAbsent: 'Yes! ) printLine. +"Prints 31" +( d at: 'hello' IfAbsent: -1 ) printLine. +``` + +# Further information + +The [Self handbook](http://handbook.selflanguage.org) has much more information, and nothing beats hand-on experience with Self by downloading it from the [homepage](http://www.selflanguage.org). -- cgit v1.2.3 From 3c66f479413af0f7d00de8e46ec449cac293f4bd Mon Sep 17 00:00:00 2001 From: Russell Allen Date: Mon, 27 Oct 2014 22:11:20 +1100 Subject: Cleaner code samples --- self.html.markdown | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/self.html.markdown b/self.html.markdown index bd81285e..e1a52af8 100644 --- a/self.html.markdown +++ b/self.html.markdown @@ -57,11 +57,19 @@ The inbuild Self parser can construct objects, including method objects. Messages can either be unary, binary or keyword. Precedence is in that order. Unlike Smalltalk, the precedence of binary messages must be specified, and all keywords after the first must start with a capital letter. Messages are separeated from their destination by whitespace. ``` -23 printLine → unary message, sends 'printLine' to the object '23' - which prints the string '23' to stdout and returns the receiving object (ie 23) -(23 + 7) * 8 → sends the message '+' with '7' to '23', then the message '*' with '8' to the result -2 power: 8 → sends 'power:' to '2' with '8' returns 256 -'hello' keyOf: 'e' IfAbsent: -1 → sends 'keyOf:IfAbsent:' to 'hello' with arguments 'e' and '-1'. Returns 1, the index of 'e' in 'hello'. +"unary message, sends 'printLine' to the object '23' +which prints the string '23' to stdout and returns the receiving object (ie 23)" +23 printLine + +"sends the message '+' with '7' to '23', then the message '*' with '8' to the result" +(23 + 7) * 8 + +"sends 'power:' to '2' with '8' returns 256" +2 power: 8 + +"sends 'keyOf:IfAbsent:' to 'hello' with arguments 'e' and '-1'. +Returns 1, the index of 'e' in 'hello'." +'hello' keyOf: 'e' IfAbsent: -1 ``` # Blocks @@ -75,14 +83,14 @@ Self defines flow control like Smalltalk and Ruby by way of blocks. Blocks are d Examples of the use of a block: ``` -'hello' copyMutable mapBy: [|:c| c capitalize] → 'HELLO' +'hello' copyMutable mapBy: [|:c| c capitalize] "returns 'HELLO'" -'hello' size > 5 ifTrue: ['Yay'] False: ['Nah'] → 'Nah' +'hello' size > 5 ifTrue: ['Yay'] False: ['Nah'] "returns 'Nah'" 'hello' copyMutable mapBy: [|:c| c = 'e' ifTrue: [c capitalize] False: ['a']] - → 'HaLLO' +"returns 'HaLLO'" ``` Multiple expressions are separated by a period. ^ returns immediately. @@ -93,7 +101,7 @@ Multiple expressions are separated by a period. ^ returns immediately. tmp = 'E' ifTrue: [^ 'An \'E\'! How icky!']. c capitalize ] - → An 'E'! How icky! +"returns An 'E'! How icky!" ``` Blocks are performed by sending them the message 'value' and inherit (delegate to) their contexts: @@ -104,7 +112,8 @@ Blocks are performed by sending them the message 'value' and inherit (delegate t second block is the 'true' object" [x > 0] whileTrue: [x: x - 1]. x -] value → 0 +] value +"returns 0" ``` # Methods -- cgit v1.2.3 From 9fdfb3f56627c23b5dc5581fef353e010e7ff148 Mon Sep 17 00:00:00 2001 From: Russell Allen Date: Mon, 27 Oct 2014 22:13:08 +1100 Subject: Better use of linebreaks --- self.html.markdown | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/self.html.markdown b/self.html.markdown index e1a52af8..7b1f38af 100644 --- a/self.html.markdown +++ b/self.html.markdown @@ -83,29 +83,32 @@ Self defines flow control like Smalltalk and Ruby by way of blocks. Blocks are d Examples of the use of a block: ``` -'hello' copyMutable mapBy: [|:c| c capitalize] "returns 'HELLO'" +"returns 'HELLO'" +'hello' copyMutable mapBy: [|:c| c capitalize] -'hello' size > 5 ifTrue: ['Yay'] False: ['Nah'] "returns 'Nah'" +"returns 'Nah'" +'hello' size > 5 ifTrue: ['Yay'] False: ['Nah'] +"returns 'HaLLO'" 'hello' copyMutable mapBy: [|:c| c = 'e' ifTrue: [c capitalize] False: ['a']] -"returns 'HaLLO'" ``` Multiple expressions are separated by a period. ^ returns immediately. ``` +"returns An 'E'! How icky!" 'hello' copyMutable mapBy: [|:c. tmp <- ''| tmp: c capitalize. tmp = 'E' ifTrue: [^ 'An \'E\'! How icky!']. c capitalize ] -"returns An 'E'! How icky!" ``` Blocks are performed by sending them the message 'value' and inherit (delegate to) their contexts: ``` +"returns 0" [|x| x: 15. "Repeatedly sends 'value' to the first block while the result of sending 'value' to the @@ -113,7 +116,6 @@ Blocks are performed by sending them the message 'value' and inherit (delegate t [x > 0] whileTrue: [x: x - 1]. x ] value -"returns 0" ``` # Methods @@ -121,14 +123,16 @@ Blocks are performed by sending them the message 'value' and inherit (delegate t Methods are like blocks but are not within a context but are the values of slots. Unlike Smalltalk, methods by default return their final value not 'self'. ``` -"Here is an object with one assignable slot 'x' and a method 'reduceXTo: y'" +"Here is an object with one assignable slot 'x' and a method 'reduceXTo: y'. +Sending the message 'reduceXTo: 10' to this object will put +the object '10' in the 'x' slot and return the original object" (| x <- 50. reduceXTo: y = ( [x > y] whileTrue: [x: x - 1]. self) |) -"Sending the message 'reduceXTo: 10' to this object will put the object '10' in the 'x' slot and return the original object" +. ``` # Prototypes -- cgit v1.2.3 From 122b9ab40855ad386e398e8f71cb539eeab47b85 Mon Sep 17 00:00:00 2001 From: Baptiste Fontaine Date: Mon, 27 Oct 2014 12:25:34 +0100 Subject: Brainfuck/fr: a couple fixes after proof-reading --- fr-fr/brainfuck-fr.html.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fr-fr/brainfuck-fr.html.markdown b/fr-fr/brainfuck-fr.html.markdown index 4b8e918f..3882734d 100644 --- a/fr-fr/brainfuck-fr.html.markdown +++ b/fr-fr/brainfuck-fr.html.markdown @@ -54,12 +54,12 @@ En ASCII, 65 correspond à 'A' donc le programme affiche 'A' dans le terminal. Ce programme lit un caractère sur l’entrée standard et le copie dans la première cellule. Il commence ensuite une boucle : il bouge sur la seconde cellule, incrémente sa valeur, retourne sur la première et décrémente sa -valeur. Il continue jusqu’à ce que cette valeur soit à 0, et que la seconde -cellule contienne l’ancienne valeur de la première. Comme nous sommes sur la -première cellule à la fin de la boucle, il bouge sur la seconde et affiche sa -valeur en ASCII. +valeur. Il continue jusqu’à ce que la valeur de la première cellule soit à 0, +et que la seconde cellule contienne l’ancienne valeur de la première. Comme +nous sommes sur la première cellule à la fin de la boucle, il bouge sur la +seconde et affiche sa valeur en ASCII. -Souvenez-vous que les espaces sont uniquement pour favoriser la lisibilité, +Souvenez-vous que les espaces sont uniquement là pour favoriser la lisibilité, vous pourriez tout aussi aisément écrire le programme comme ceci : ,[>+<-]>. -- cgit v1.2.3 From 67de7d7281ce9703665cfcbf240cd2c79bac450c Mon Sep 17 00:00:00 2001 From: ven Date: Mon, 27 Oct 2014 20:01:55 +0100 Subject: [Common Lisp/en] Add a missing argument to `(walker)` --- common-lisp.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-lisp.html.markdown b/common-lisp.html.markdown index 08134e35..c4ecb5e8 100644 --- a/common-lisp.html.markdown +++ b/common-lisp.html.markdown @@ -431,7 +431,7 @@ nil ; for false - and the empty list :walked (walker (1- n)))) -(walker) ; => :walked +(walker 5) ; => :walked ;; Most of the time, we use DOLIST or LOOP -- cgit v1.2.3 From 759f7349d2ff36ee7d9b28c20d9ce690de413683 Mon Sep 17 00:00:00 2001 From: Srinivas Gorur-Shandilya Date: Mon, 27 Oct 2014 16:52:14 -0400 Subject: cleaned up code, added struct docs cleaned up code, added struct docs --- matlab.html.markdown | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/matlab.html.markdown b/matlab.html.markdown index 9dae8ef2..42db6ad7 100644 --- a/matlab.html.markdown +++ b/matlab.html.markdown @@ -40,36 +40,40 @@ ctrl-c % Abort current computation edit('myfunction.m') % Open function/script in editor type('myfunction.m') % Print the source of function/script to Command Window -profile viewer % Open profiler +profile on % turns on the code profiler +profile of % turns off the code profiler +profile viewer % Open profiler -help command % Displays documentation for command in Command Window -doc command % Displays documentation for command in Help Window -lookfor command % Searches for a given command +help command % Displays documentation for command in Command Window +doc command % Displays documentation for command in Help Window +lookfor command % Searches for a command in all other commands % Output formatting -format short % 4 decimals in a floating number -format long % 15 decimals -format bank % only two digits after decimal point - for financial calculations -fprintf +format short % 4 decimals in a floating number +format long % 15 decimals +format bank % only two digits after decimal point - for financial calculations +fprintf('text') % print "text" to the screen +disp('text') % print "text" to the screen % Variables & Expressions -myVariable = 4 % Notice Workspace pane shows newly created variable +myVariable = 4 % Notice Workspace pane shows newly created variable myVariable = 4; % Semi colon suppresses output to the Command Window -4 + 6 % ans = 10 -8 * myVariable % ans = 32 -2 ^ 3 % ans = 8 +4 + 6 % ans = 10 +8 * myVariable % ans = 32 +2 ^ 3 % ans = 8 a = 2; b = 3; c = exp(a)*sin(pi/2) % c = 7.3891 % Calling functions can be done in either of two ways: % Standard function syntax: -load('myFile.mat', 'y') +load('myFile.mat', 'y') % arguments within parantheses, spererated by commas % Command syntax: -load myFile.mat y % no parentheses, and spaces instead of commas +load myFile.mat y % no parentheses, and spaces instead of commas % Note the lack of quote marks in command form: inputs are always passed as % literal text - cannot pass variable values. Also, can't receive output: -[V,D] = eig(A) % this has no equivalent in command form +[V,D] = eig(A); % this has no equivalent in command form +[~,D] = eig(A); % if you only want D and not V @@ -100,6 +104,10 @@ a = {'one', 'two', 'three'} a(1) % ans = 'one' - returns a cell char(a(1)) % ans = one - returns a string +% Structures +A.b = {'one','two'}; +A.c = [1 2]; +A.d.e = false; % Vectors x = [4 32 53 7 1] @@ -160,6 +168,10 @@ A(1,:) % All columns in row 1 % 4 5 42 % 7 8 9 +% this is the same as +vertcat(A,A); + + [A , A] % Concatenation of matrices (horizontally) %ans = @@ -168,6 +180,8 @@ A(1,:) % All columns in row 1 % 4 5 42 4 5 42 % 7 8 9 7 8 9 +% this is the same as +horzcat(A,A); A(:, [3 1 2]) % Rearrange the columns of original matrix @@ -180,10 +194,13 @@ A(:, [3 1 2]) % Rearrange the columns of original matrix size(A) % ans = 3 3 A(1, :) =[] % Delete the first row of the matrix +A(:, 1) =[] % Delete the first column of the matrix +transpose(A) % Transpose the matrix, which is the same as: +A' ctranspose(A) % Hermitian transpose the matrix % (the transpose, followed by taking complex conjugate of each element) -transpose(A) % Transpose the matrix, without taking complex conjugate + -- cgit v1.2.3 From 02db45c5dc935043a9e19f3550121ae78965e5ca Mon Sep 17 00:00:00 2001 From: Dana de Waal Date: Tue, 28 Oct 2014 03:23:52 +0100 Subject: A few trailing spaces and take 2 on Dutch spelling and translation. --- nl-nl/coffeescript-nl.html.markdown | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/nl-nl/coffeescript-nl.html.markdown b/nl-nl/coffeescript-nl.html.markdown index 70dcd463..dc0b1e19 100644 --- a/nl-nl/coffeescript-nl.html.markdown +++ b/nl-nl/coffeescript-nl.html.markdown @@ -5,23 +5,24 @@ contributors: - ["Xavier Yao", "http://github.com/xavieryao"] translators: - ["Jelle Besseling", "https://github.com/Jell-E"] + - ["D.A.W. de Waal", "http://github.com/diodewaal"] filename: coffeescript-nl.coffee lang: nl-nl --- -CoffeeScript is een kleine programmeertaal die compileerd naar JavaScript, -er is geen interpretatie tijdens het uitvoeren. -Als een van de nakomelingen van JavaScript probeert CoffeeScript om leesbare, -goed geformatteerdeen goed draaiende JavaScript code te genereren, -die in elke JavaScript runtime werkt. +CoffeeScript is een kleine programmeertaal die direct compileert naar +JavaScript en er is geen interpretatie tijdens het uitvoeren. +CoffeeScript probeert om leesbare, goed geformatteerde en goed draaiende +JavaScript code te genereren, die in elke JavaScript runtime werkt, als een +opvolger van JavaScript. -Op [de CoffeeScript website](http://coffeescript.org/), staat een -vollediger tutorial voor CoffeeScript. +Op [de CoffeeScript website](http://coffeescript.org/), staat een +volledigere tutorial voor CoffeeScript. ``` coffeescript # CoffeeScript is een taal voor hipsters. # Het gaat mee met alle trends van moderne talen. -# Dus commentaar begint met een hekje, net zoals bij Python en Ruby. +# Commentaar begint dus met een hekje, net zoals bij Python en Ruby. ### Blokken commentaar maak je zo, ze vertalen naar JavaScripts */ en /* @@ -47,7 +48,7 @@ vul = (houder, vloeistof = "koffie") -> # #vul = function(houder, vloeistof) { # if (vloeistof == null) { -# vloeistof = "coffee"; +# vloeistof = "koffie"; # } # return "Nu de " + houder + " met " + vloeistof + " aan het vullen..."; #}; @@ -75,12 +76,12 @@ wedstrijd = (winnaar, lopers...) -> # return print(winnaar, lopers); #}; -# Bestaan: +# Aanwezigheid: alert "Ik wist het!" if elvis? #=> if(typeof elvis !== "undefined" && elvis !== null) { alert("I knew it!"); } # Lijst abstractie: -derdemachten = (wiskunde.derdemacht num for num in lijst) +derdemachten = (wiskunde.derdemacht num for num in lijst) #=>derdemachten = (function() { # var _i, _len, _results; # _results = []; -- cgit v1.2.3 From eb43eb7ccdeaad7440d9fda90128691effda15e1 Mon Sep 17 00:00:00 2001 From: i Date: Tue, 28 Oct 2014 03:11:59 -0400 Subject: basic arithmetic *doesn't* work It's not really true that arithmetic is accurate in JavaScript. --- javascript.html.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/javascript.html.markdown b/javascript.html.markdown index cc210c4a..792cab98 100644 --- a/javascript.html.markdown +++ b/javascript.html.markdown @@ -39,13 +39,14 @@ doStuff() // 1. Numbers, Strings and Operators // JavaScript has one number type (which is a 64-bit IEEE 754 double). -// As with Lua, don't freak out about the lack of ints: doubles have a 52-bit -// mantissa, which is enough to store integers up to about 9✕10¹⁵ precisely. +// Doubles have a 52-bit mantissa, which is enough to store integers +// up to about 9✕10¹⁵ precisely. 3; // = 3 1.5; // = 1.5 -// All the basic arithmetic works as you'd expect. +// Some basic arithmetic works as you'd expect. 1 + 1; // = 2 +.1 + .2; // = 0.30000000000000004 8 - 1; // = 7 10 * 2; // = 20 35 / 5; // = 7 -- cgit v1.2.3 From e1bdeff354c2535515ea31e733a5f078a2f469eb Mon Sep 17 00:00:00 2001 From: Srinivas Gorur-Shandilya Date: Tue, 28 Oct 2014 09:56:18 -0400 Subject: clarified lookfor --- matlab.html.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/matlab.html.markdown b/matlab.html.markdown index 42db6ad7..121f16de 100644 --- a/matlab.html.markdown +++ b/matlab.html.markdown @@ -46,7 +46,8 @@ profile viewer % Open profiler help command % Displays documentation for command in Command Window doc command % Displays documentation for command in Help Window -lookfor command % Searches for a command in all other commands +lookfor command % Searches for command in the first commented line of all functions +lookfor command -all % searches for command in all functions % Output formatting -- cgit v1.2.3 From b3cceac37eefae7cfeac73fad7eefde3e40a5fce Mon Sep 17 00:00:00 2001 From: Adam Bard Date: Tue, 28 Oct 2014 23:12:58 +0200 Subject: Update markdown.html.markdown --- fr-fr/markdown.html.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/fr-fr/markdown.html.markdown b/fr-fr/markdown.html.markdown index 50e507cd..29c0d65d 100644 --- a/fr-fr/markdown.html.markdown +++ b/fr-fr/markdown.html.markdown @@ -3,6 +3,7 @@ language: markdown contributors: - ["Andrei Curelaru", "http://www.infinidad.fr"] filename: markdown.md +lang: fr-fr --- Markdown a été créé par John Gruber en 2004. Il se veut être d'une syntaxe -- cgit v1.2.3 From 9d9dd467cd836e169d64ff6f24749a7c52865a22 Mon Sep 17 00:00:00 2001 From: Russell Allen Date: Wed, 29 Oct 2014 14:46:27 +1100 Subject: Fix typos --- self.html.markdown | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/self.html.markdown b/self.html.markdown index 7b1f38af..f4b5fefc 100644 --- a/self.html.markdown +++ b/self.html.markdown @@ -1,6 +1,6 @@ --- language: self -contributors:r +contributors: - ["Russell Allen", "http://github.com/russellallen"] filename: self.html.markdown --- @@ -38,13 +38,19 @@ The inbuild Self parser can construct objects, including method objects. x <- 20. |) -"An object which understands the method 'doubleX' which doubles the value of x and then returns the object" +"An object which understands the method 'doubleX' which +doubles the value of x and then returns the object" (| x <- 20. doubleX = (x: x * 2. self) |) -"An object which understands all the messages that 'traits point' understands". The parser looks up 'traits point' by sending the messages 'traits' then 'point' to a known object called the 'lobby'. It looks up the 'true' object by also sending the message 'true' to the lobby." +"An object which understands all the messages +that 'traits point' understands". The parser +looks up 'traits point' by sending the messages +'traits' then 'point' to a known object called +the 'lobby'. It looks up the 'true' object by +also sending the message 'true' to the lobby." (| parent* = traits point. x = 7. y <- 5. @@ -77,7 +83,7 @@ Returns 1, the index of 'e' in 'hello'." Self defines flow control like Smalltalk and Ruby by way of blocks. Blocks are delayed computations of the form: ``` -[|:x. localVar| x doSomthing With: localVar] +[|:x. localVar| x doSomething with: localVar] ``` Examples of the use of a block: @@ -120,7 +126,7 @@ Blocks are performed by sending them the message 'value' and inherit (delegate t # Methods -Methods are like blocks but are not within a context but are the values of slots. Unlike Smalltalk, methods by default return their final value not 'self'. +Methods are like blocks but they are not within a context but instead are stored as values of slots. Unlike Smalltalk, methods by default return their final value not 'self'. ``` "Here is an object with one assignable slot 'x' and a method 'reduceXTo: y'. -- cgit v1.2.3 From 583f874cdf54c46ccfb1ea0a9480bdbffa308927 Mon Sep 17 00:00:00 2001 From: pbaisla Date: Wed, 29 Oct 2014 23:44:36 +0530 Subject: [tmux/en] Fix URL names --- tmux.html.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux.html.markdown b/tmux.html.markdown index ebc312ed..de3a8341 100644 --- a/tmux.html.markdown +++ b/tmux.html.markdown @@ -239,6 +239,6 @@ set -g status-right "#[fg=green] | #[fg=white]#(tmux-mem-cpu-load)#[fg=green] | Tmux | Home
Tmux Manual page
-Archlinux Wiki
-Gentoo Wiki
+Gentoo Wiki
+Archlinux Wiki
Display CPU/MEM % in statusbar
-- cgit v1.2.3 From 3f69c38ba3594eb93d86d1f4b2456241ffe9b14a Mon Sep 17 00:00:00 2001 From: xk liu Date: Thu, 30 Oct 2014 11:07:40 +0800 Subject: [matlab/en] Fix block comment syntax. The %{ and %} operators must appear alone on the lines that immediately precede and follow the block of help text. Do not include any other text on these lines. Reference: http://www.mathworks.com/help/matlab/matlab_prog/comments.html --- matlab.html.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/matlab.html.markdown b/matlab.html.markdown index 121f16de..2b9077d5 100644 --- a/matlab.html.markdown +++ b/matlab.html.markdown @@ -15,10 +15,12 @@ If you have any feedback please feel free to reach me at ```matlab % Comments start with a percent sign. -%{ Multi line comments look +%{ +Multi line comments look something like -this %} +this +%} % commands can span multiple lines, using '...': a = 1 + 2 + ... -- cgit v1.2.3 From 9324987c1fc465379060491d9a4b1c25cffde0fc Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Thu, 30 Oct 2014 16:43:49 +0100 Subject: use propernotation for decimals --- javascript.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript.html.markdown b/javascript.html.markdown index 792cab98..a92dcb4a 100644 --- a/javascript.html.markdown +++ b/javascript.html.markdown @@ -46,7 +46,7 @@ doStuff() // Some basic arithmetic works as you'd expect. 1 + 1; // = 2 -.1 + .2; // = 0.30000000000000004 +0.1 + 0.2; // = 0.30000000000000004 8 - 1; // = 7 10 * 2; // = 20 35 / 5; // = 7 -- cgit v1.2.3 From 02e81acfe1dc548553082672a2d04f826a0812e6 Mon Sep 17 00:00:00 2001 From: Adam Bard Date: Fri, 31 Oct 2014 00:44:24 +0200 Subject: Update self.html.markdown --- self.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/self.html.markdown b/self.html.markdown index f4b5fefc..69524a84 100644 --- a/self.html.markdown +++ b/self.html.markdown @@ -2,7 +2,7 @@ language: self contributors: - ["Russell Allen", "http://github.com/russellallen"] -filename: self.html.markdown +filename: learnself.self --- Self is a fast prototype based OO language which runs in its own JIT vm. Most development is done through interacting with live objects through a visual development environment called *morphic* with integrated browsers and debugger. -- cgit v1.2.3 From 112b0b7662d3e235e8bee88ba45fccd8d7932e98 Mon Sep 17 00:00:00 2001 From: Wes Turner Date: Thu, 30 Oct 2014 19:46:37 -0500 Subject: DOC: bash.html.markdown: add bash docs examples --- bash.html.markdown | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/bash.html.markdown b/bash.html.markdown index 11c1f3a2..81d586c4 100644 --- a/bash.html.markdown +++ b/bash.html.markdown @@ -208,4 +208,30 @@ grep "^foo.*bar$" file.txt grep -c "^foo.*bar$" file.txt # if you literally want to search for the string, and not the regex, use fgrep (or grep -F) fgrep "^foo.*bar$" file.txt + + +# Read Bash shell builtins documentation with the bash 'help' builtin: +help +help help +help for +help return +help source +help . + +# Read Bash manpage documentation with man +apropos bash +man 1 bash +man bash + +# Read info documentation with info (? for help) +apropos info | grep '^info.*(' +man info +info info +info 5 info + +# Read bash info documentation: +info bash +info bash 'Bash Features' +info bash 6 +info --apropos bash ``` -- cgit v1.2.3 From c309cc6e06647a9c1b6feae0082ebb5a86297453 Mon Sep 17 00:00:00 2001 From: jmaud Date: Fri, 31 Oct 2014 15:57:52 -0400 Subject: Correct contributors - Correct my github url/name - Remove kaernyk (converted account, now deleted) --- tmux.html.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tmux.html.markdown b/tmux.html.markdown index de3a8341..9eb96303 100644 --- a/tmux.html.markdown +++ b/tmux.html.markdown @@ -2,8 +2,7 @@ category: tool tool: tmux contributors: - - ["kaernyk", "https://github.com/kaernyk"] - - ["jmaud", "https://github.com/jmaud"] + - ["wzsk", "https://github.com/wzsk"] filename: LearnTmux.txt --- -- cgit v1.2.3 From a32bb0a2cc3b53b4ffa4d2e93ebe664afb7a7729 Mon Sep 17 00:00:00 2001 From: Bruno Kim Medeiros Cesar Date: Sat, 1 Nov 2014 01:37:26 -0200 Subject: Remove misleading example of NA in Levels section The levels section was using a level "NA" together with "female" and "male", which is misleading (given that NA was just introduced as a missing value). I updated it to what I believe is a better example of how NAs are interpreted. Additionally, I edited a comment about Inf that wouldn't compile. How about inserting it at the tutorial altogether? --- r.html.markdown | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/r.html.markdown b/r.html.markdown index 7cb56fd7..c555d748 100644 --- a/r.html.markdown +++ b/r.html.markdown @@ -179,7 +179,7 @@ c(3,3,3,2,2,1) # 3 3 3 2 2 1 # You can also have infinitely large or small numbers class(Inf) # "numeric" class(-Inf) # "numeric" -# You might use "Inf", for example, in integrate( dnorm(x), 3, Inf); +# You might use "Inf", for example, in integrate(dnorm, 3, Inf); # this obviates Z-score tables. # BASIC ARITHMETIC @@ -236,11 +236,12 @@ c('Z', 'o', 'r', 'r', 'o') == "Z" # TRUE FALSE FALSE FALSE FALSE # FACTORS # The factor class is for categorical data # Factors can be ordered (like childrens' grade levels) or unordered (like gender) -factor(c("female", "female", "male", "NA", "female")) -# female female male NA female -# Levels: female male NA +factor(c("female", "female", "male", NA, "female")) +# female female male female +# Levels: female male # The "levels" are the values the categorical data can take -levels(factor(c("male", "male", "female", "NA", "female"))) # "female" "male" "NA" +# Note that missing data does not enter the levels +levels(factor(c("male", "male", "female", NA, "female"))) # "female" "male" # If a factor vector has length 1, its levels will have length 1, too length(factor("male")) # 1 length(levels(factor("male"))) # 1 -- cgit v1.2.3 From e287075690f73c934825fc413bcc4a3e2be4456d Mon Sep 17 00:00:00 2001 From: Wes Turner Date: Thu, 30 Oct 2014 19:20:05 -0500 Subject: [bash/en] bash.html.markdown: add bash redirection examples --- bash.html.markdown | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/bash.html.markdown b/bash.html.markdown index 11c1f3a2..b0011420 100644 --- a/bash.html.markdown +++ b/bash.html.markdown @@ -111,12 +111,45 @@ ls -l # Lists every file and directory on a separate line # .txt files in the current directory: ls -l | grep "\.txt" -# You can also redirect a command, input and error output. -python2 hello.py < "input.in" -python2 hello.py > "output.out" -python2 hello.py 2> "error.err" -# The output error will overwrite the file if it exists, if you want to -# concatenate them, use ">>" instead. +# You can redirect command input and output (stdin, stdout, and stderr). +# Read from stdin until ^EOF$ and overwrite hello.py with the lines +# between "EOF": +cat > hello.py << EOF +#!/usr/bin/env python +from __future__ import print_function +import sys +print("#stdout", file=sys.stdout) +print("#stderr", file=sys.stderr) +for line in sys.stdin: + print(line, file=sys.stdout) +EOF + +# Run hello.py with various stdin, stdout, and stderr redirections: +python hello.py < "input.in" +python hello.py > "output.out" +python hello.py 2> "error.err" +python hello.py > "output-and-error.log" 2>&1 +python hello.py > /dev/null 2>&1 +# The output error will overwrite the file if it exists, +# if you want to append instead, use ">>": +python hello.py >> "output.out" 2>> "error.err" + +# Overwrite output.txt, append to error.err, and count lines: +info bash 'Basic Shell Features' 'Redirections' > output.out 2>> error.err +wc -l output.out error.err + +# Run a command and print its file descriptor (e.g. /dev/fd/123) +# see: man fd +echo <(echo "#helloworld") + +# Overwrite output.txt with "#helloworld": +cat > output.out <(echo "#helloworld") +echo "#helloworld" > output.out +echo "#helloworld" | cat > output.out +echo "#helloworld" | tee output.out >/dev/null + +# Cleanup temporary files verbosely (add '-i' for interactive) +rm -v output.out error.err output-and-error.log # Commands can be substituted within other commands using $( ): # The following command displays the number of files and directories in the -- cgit v1.2.3