diff options
-rw-r--r-- | csharp.html.markdown | 2 | ||||
-rw-r--r-- | fa-ir/brainfuck.html.markdown | 81 | ||||
-rw-r--r-- | java.html.markdown | 34 | ||||
-rw-r--r-- | javascript.html.markdown | 13 | ||||
-rw-r--r-- | julia.html.markdown | 34 | ||||
-rw-r--r-- | ko-kr/brainfuck-kr.html.markdown | 3 | ||||
-rw-r--r-- | php.html.markdown | 2 | ||||
-rw-r--r-- | pt-br/java-pt.html.markdown | 435 | ||||
-rw-r--r-- | python.html.markdown | 4 | ||||
-rw-r--r-- | ruby.html.markdown | 4 | ||||
-rw-r--r-- | zh-cn/bash-cn.html.markdown | 148 | ||||
-rw-r--r-- | zh-cn/brainfuck-cn.html.markdown | 70 |
12 files changed, 787 insertions, 43 deletions
diff --git a/csharp.html.markdown b/csharp.html.markdown index 87c2f704..dad0c26b 100644 --- a/csharp.html.markdown +++ b/csharp.html.markdown @@ -233,7 +233,7 @@ on a new line! ""Wow!"", the masses cried"; int fooWhile = 0; while (fooWhile < 100) { - //Iterated 99 times, fooWhile 0->99 + //Iterated 100 times, fooWhile 0->99 fooWhile++; } diff --git a/fa-ir/brainfuck.html.markdown b/fa-ir/brainfuck.html.markdown new file mode 100644 index 00000000..ef2bcba3 --- /dev/null +++ b/fa-ir/brainfuck.html.markdown @@ -0,0 +1,81 @@ +--- +language: brainfuck +contributors: + - ["Mohammad Valipour", "https://github.com/mvalipour"] +lang: fa-ir +--- + +<p dir='rtl'>برین فاک زبان برنامه نویسی تورینگ کامل بی نهایت ساده ایست که دارای فقط هشت</p> +<p dir='rtl'>دستور است.</p> + +<p dir='rtl'>هر کارکتری به جر کارکتر های زیر در این زبان در نظر گرفته نمیشود.</p> + + +`>` `<` `+` `-` `.` `,` `[` `]` + +<p dir='rtl'>برین فاک به صورت یک آرایه ی سی هزار خانه ای کار میکند که در ابتدا تمامی خانه های آن صفر هستند.</p> +<p dir='rtl'>همچنین یک اشاره گر در این برنامه به خانه ی فعلی اشاره میکند.</p> + +<p dir='rtl'>در زیر هشت دستور این زبان شرح داده شده است:</p> + +<p dir='rtl'>`+` : یک عدد به خانه ی فعلی اضافه می کند. +<p dir='rtl'>`-` : یک عدد از خانه ی فعلی کم می کند. </p> +<p dir='rtl'>`>` : اشاره گر به خانه ی بعدی میرود -- به راست</p> +<p dir='rtl'>`<` : اشاره گر به خانه ی قبلی میرود -- به چپ</p> +<p dir='rtl'>`.` : کارکتر اسکی معادل مقدار خانه ی فعلی را چاپ میکند. -- به عنوان مثال 65 برای A</p> +<p dir='rtl'>`,` : یک کارکتر را از ورودی خوانده و مقدار آن را در خانه ی فعلی زخیره میکند.</p> +<p dir='rtl'>`[` : اگر مقدار خانه ی فعلی صفر باشد به محل بسته شدن کروشه جهش میکند. -- و از همه ی دستور های بین آن صرف نظر میشود.</p> +<p dir='rtl'>در غیر این صورت به دستور بعدی میرود.</p> +<p dir='rtl'>`]` : اگر مقدار خانه ی فعلی صفر باشد به خانه ی بعدی و در غیر این صورت به محل باز شدن کروشه جهش می کند. -- به عقب</p> + +<p dir='rtl'>دو علامت کروشه امکان ایجاد حلقه را فراهم میکنند.</p> + +<p dir='rtl'>در اینجا یک برنامه ی ساره برین فاک را مشاهده میکنید.</p> + +``` +++++++ [ > ++++++++++ < - ] > +++++ . +``` + +<p dir='rtl'>این برنامه کارکتر A را بر روی خروجی چاپ میکند.</p> +<p dir='rtl'>در این برنامه خانه ی اول به عنوان متغیر حلقه و خانه ی دوم برای مقدار عددی A</p> +<p dir='rtl'>ابتدا عدد شش در خانه ی اول ایجاد شده. سپس برنامه وارد یک حلقه میشود که در هر بار </p> +<p dir='rtl'>تکرار آن اشاره گر به خانه ی دوم رفته و ده بار به خانه ی فعلی اضافه می کند.</p> +<p dir='rtl'>-- و در انتهای حلقه به خانه ی اول برگشته تا حلقه کنترل شود</p> +<p dir='rtl'>بعد از اتمام حلقه به خانه ی دوم میرود و پنج بار به این خانه اضافه کرده و سپس آنرا چاپ میکند.</p> + +``` +, [ > + < - ] > . +``` + +<p dir='rtl'>در این برنامه ابتدا یک کارکتر از ورودی خوانده می شود. سپس یک حلقه به تعداد بار مقدار</p> +<p dir='rtl'>عددی کارکتر، یک عدد به خانه ی دوم اضافه می کند. با این کار در واقع برنامه مقدار ورودی را در خانه ی </p> +<p dir='rtl'>دوم کپی می کند. و در نهایت آن را برروی خروجی چاپ می کند.</p> + +<p dir='rtl'>توجه داشته باشید که ردر بالا فواصل بین دستور ها فقط برای خوانایی بیشتر گذاشته شده اند.</p> +<p dir='rtl'>در واقع برنامه بالا به شکل زیر صحیح می باشد.</p> + +``` +,[>+<-]>. +``` + +<p dir='rtl'>حال سعی کنید ببینید که برنامه ی زیر چه کاری انجام می دهد؟</p> + +``` +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> +``` + +<p dir='rtl'>این برنامه دو عدد را از ورودی خوانده و با هم ضرب می کند.</p> + +<p dir='rtl'>ابتدا دو عدد از ورودی خوانده می شوند. سپس حلقه ی بیرونی بر روی خانه شماره یک شروع میشود.</p> +<p dir='rtl'>و درون آن حلقه ی دیگری بر روی خانه ی دوم شروع میشود که خانه ی 3 را زیاد میکند.</p> +<p dir='rtl'>ولی مشکلی که در اینجا به وجود می آید اینست که در پایان حلقه ی دوم مقدار خانه ی 2 صفر شده</p> +<p dir='rtl'>و مقدار اولیه ی آن از دست رفته است. برای حل این مشکل خانه ی شماره چهار هم زیاد میشود</p> +<p dir='rtl'>و در پایان حلقه مقدار آن به خانه 2 کپی میشود.</p> +<p dir='rtl'>در پایان خانه ی شماره 2 حاوی حاصلضرب خواهد بود.</p> + +<hr> + +<p dir='rtl'>و این همه ی برین فاک بود! خیلی ساده برای یادگیری ولی سنگین برای به کار بردن.</p> +<p dir='rtl'>حال می توانید برای تفریح مشغول نوشتن برنامه ی های مختلف با آن شوید.</p> +<p dir='rtl'>و یا یک اجرا کننده برین فاک را با یک زبان دیگر پیاده سازی کنید.</p> +<p dir='rtl'>و یا اگر خیلی دوست داشتید یک اجرا کننده ی برین فاک با برین فاک بنویسید!!</p> diff --git a/java.html.markdown b/java.html.markdown index 3d0cb1d7..b4624d5e 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -26,7 +26,8 @@ import java.util.ArrayList; // Import all classes inside of java.security package import java.security.*; -// Each .java file contains one public class, with the same name as the file. +// Each .java file contains one outer-level public class, with the same name as +// the file. public class LearnJava { // A program must have a main method as an entry point @@ -84,7 +85,7 @@ public class LearnJava { // Char - A single 16-bit Unicode character char fooChar = 'A'; - // Use final to make a variable immutable + // final variables can't be reassigned to another object final int HOURS_I_WORK_PER_WEEK = 9001; // Strings @@ -99,7 +100,7 @@ public class LearnJava { System.out.println(bazString); // Arrays - //The array size must be decided upon declaration + //The array size must be decided upon instantiation //The format for declaring an array is follows: //<datatype> [] <var name> = new <datatype>[<array size>]; int [] intArray = new int[10]; @@ -161,10 +162,13 @@ public class LearnJava { // Incrementations int i = 0; System.out.println("\n->Inc/Dec-rementation"); - System.out.println(i++); //i = 1. Post-Incrementation - System.out.println(++i); //i = 2. Pre-Incrementation - System.out.println(i--); //i = 1. Post-Decrementation - System.out.println(--i); //i = 0. Pre-Decrementation + // The ++ and -- operators increment and decrement by 1 respectively. + // If they are placed before the variable, they increment then return; + // after the variable they return then increment. + System.out.println(i++); //i = 1, prints 0 (post-increment) + System.out.println(++i); //i = 2, prints 2 (pre-increment) + System.out.println(i--); //i = 1, prints 2 (post-decrement) + System.out.println(--i); //i = 0, prints 0 (pre-decrement) /////////////////////////////////////// // Control Structures @@ -211,19 +215,19 @@ public class LearnJava { //Iterated 10 times, fooFor 0->9 } System.out.println("fooFor Value: " + fooFor); - + // For Each Loop // An automatic iteration through an array or list of objects. int[] fooList = {1,2,3,4,5,6,7,8,9}; //for each loop structure => for(<object> : <array_object>) //reads as: for each object in the array //note: the object type must match the array. - + for( int bar : fooList ){ //System.out.println(bar); //Iterates 9 times and prints 1-9 on new lines } - + // Switch Case // A switch works with the byte, short, char, and int data types. // It also works with enumerated types (discussed in Enum Types), @@ -246,7 +250,7 @@ public class LearnJava { break; } System.out.println("Switch Case Result: " + monthString); - + // Conditional Shorthand // You can use the '?' operator for quick assignments or logic forks. // Reads as "If (statement) is true, use <first value>, otherwise, use <second value>" @@ -294,14 +298,14 @@ public class LearnJava { trek.speedUp(3); // You should always use setter and getter methods trek.setCadence(100); - // toString is a convention to display the value of this Object. + // toString returns this Object's string representation. System.out.println("trek info: " + trek.toString()); } // End main method } // End LearnJava class -// You can include other, non-public classes in a .java file +// You can include other, non-public outer-level classes in a .java file // Class Declaration Syntax: @@ -319,7 +323,7 @@ class Bicycle { String name; // default: Only accessible from within this package // Constructors are a way of creating classes - // This is a default constructor + // This is a constructor public Bicycle() { gear = 1; cadence = 50; @@ -327,7 +331,7 @@ class Bicycle { name = "Bontrager"; } - // This is a specified constructor (it contains arguments) + // This is a constructor that takes arguments public Bicycle(int startCadence, int startSpeed, int startGear, String name) { this.gear = startGear; this.cadence = startCadence; diff --git a/javascript.html.markdown b/javascript.html.markdown index 2ac98105..b6d4c8b7 100644 --- a/javascript.html.markdown +++ b/javascript.html.markdown @@ -107,10 +107,10 @@ false; // There's also null and undefined null; // used to indicate a deliberate non-value -undefined; // used to indicate a value is not currently present (although undefined - // is actually a value itself) +undefined; // used to indicate a value is not currently present (although + // undefined is actually a value itself) -// false, null, undefined, NaN, 0 and "" are falsy, and everything else is truthy. +// false, null, undefined, NaN, 0 and "" are falsy; everything else is truthy. // Note that 0 is falsy and "0" is truthy, even though 0 == "0". /////////////////////////////////// @@ -306,8 +306,8 @@ myObj.myOtherFunc = myOtherFunc; myObj.myOtherFunc(); // = "HELLO WORLD!" // When you call a function with the new keyword, a new object is created, and -// made available to the function via this. Functions designed to be called -// like this are called constructors. +// made available to the function via the this keyword. Functions designed to be +// called like that are called constructors. var MyConstructor = function(){ this.myNumber = 5; @@ -323,7 +323,7 @@ myNewObj.myNumber; // = 5 // property __proto__. While this is useful for explaining prototypes it's not // part of the standard; we'll get to standard ways of using prototypes later. var myObj = { - myString: "Hello world!", + myString: "Hello world!" }; var myPrototype = { meaningOfLife: 42, @@ -331,6 +331,7 @@ var myPrototype = { return this.myString.toLowerCase() } }; + myObj.__proto__ = myPrototype; myObj.meaningOfLife; // = 42 diff --git a/julia.html.markdown b/julia.html.markdown index 4ebd50ff..c3d2195b 100644 --- a/julia.html.markdown +++ b/julia.html.markdown @@ -100,7 +100,7 @@ false println("I'm Julia. Nice to meet you!") # You don't declare variables before assigning to them. -some_var = 5 #=> 5 +some_var = 5 #=> 5 some_var #=> 5 # Accessing a previously unassigned variable is an error @@ -201,7 +201,7 @@ b = [1,2,3] append!(a,b) # Now a is [1, 2, 3, 4, 5, 1, 2, 3] # Check for existence in a list with in -in(a,1) #=> true +in(1, a) #=> true # Examine the length with length length(a) #=> 8 @@ -218,7 +218,7 @@ end # Many list functions also work on tuples length(tup) #=> 3 tup[1:2] #=> (1,2) -in(tup,2) #=> true +in(2, tup) #=> true # You can unpack tuples into variables a, b, c = (1, 2, 3) #=> (1,2,3) # a is now 1, b is now 2 and c is now 3 @@ -249,14 +249,14 @@ keys(filled_dict) #=> KeyIterator{Dict{ASCIIString,Int64}}(["three"=>3,"one"=>1,"two"=>2]) # Note - dictionary keys are not sorted or in the order you inserted them. -# Get all values +# Get all values values(filled_dict) #=> ValueIterator{Dict{ASCIIString,Int64}}(["three"=>3,"one"=>1,"two"=>2]) # Note - Same as above regarding key ordering. # Check for existence of keys in a dictionary with in, haskey -in(filled_dict, ("one", 1)) #=> true -in(filled_dict, ("two", 3)) #=> false +in(("one", 1), filled_dict) #=> true +in(("two", 3), filled_dict) #=> false haskey(filled_dict, "one") #=> true haskey(filled_dict, 1) #=> false @@ -281,8 +281,8 @@ filled_set = Set(1,2,2,3,4) #=> Set{Int64}(1,2,3,4) push!(filled_set,5) #=> Set{Int64}(5,4,2,3,1) # Check if the values are in the set -in(filled_set,2) #=> true -in(filled_set,10) #=> false +in(2, filled_set) #=> true +in(10, filled_set) #=> false # There are functions for set intersection, union, and difference. other_set = Set(3, 4, 5, 6) #=> Set{Int64}(6,4,5,3) @@ -396,7 +396,7 @@ varargs(1,2,3) #=> (1,2,3) # The ... is called a splat. # We just used it in a function definition. # It can also be used in a fuction call, -# where it will splat an Array or Tuple's contents into the argument list. +# where it will splat an Array or Tuple's contents into the argument list. Set([1,2,3]) #=> Set{Array{Int64,1}}([1,2,3]) # produces a Set of Arrays Set([1,2,3]...) #=> Set{Int64}(1,2,3) # this is equivalent to Set(1,2,3) @@ -423,7 +423,7 @@ end # You can define functions that take keyword arguments function keyword_args(;k1=4,name2="hello") # note the ; return ["k1"=>k1,"name2"=>name2] -end +end keyword_args(name2="ness") #=> ["name2"=>"ness","k1"=>4] keyword_args(k1="mine") #=> ["k1"=>"mine","name2"=>"hello"] @@ -511,7 +511,7 @@ end # The default constructor's arguments are the properties # of the tyep, in order the order they are listed in the definition tigger = Tiger(3.5,"orange") #=> Tiger(3.5,"orange") - + # The type doubles as the constructor function for values of that type sherekhan = typeof(tigger)(5.6,"fire") #=> Tiger(5.6,"fire") @@ -529,8 +529,8 @@ subtypes(Number) #=> 6-element Array{Any,1}: # Complex{Float32} # Complex{Float64} # Complex{T<:Real} - # ImaginaryUnit - # Real + # ImaginaryUnit + # Real subtypes(Cat) #=> 0-element Array{Any,1} # Every type has a super type; use the `super` function to get it. @@ -565,7 +565,7 @@ end # When possible, you should use outer constructors rather than inner ones. #################################################### -## 6. Multiple-Dispatch +## 6. Multiple-Dispatch #################################################### # In Julia, all named functions are generic functions @@ -641,11 +641,11 @@ end # Also let the cat go first fight(c::Cat,l::Lion) = println("The cat beats the Lion") -#=> Warning: New definition +#=> Warning: New definition # fight(Cat,Lion) at none:1 -# is ambiguous with +# is ambiguous with # fight(Lion,Cat) at none:2. -# Make sure +# Make sure # fight(Lion,Lion) # is defined first. #fight (generic function with 4 methods) diff --git a/ko-kr/brainfuck-kr.html.markdown b/ko-kr/brainfuck-kr.html.markdown index 661fcfea..c2e4341f 100644 --- a/ko-kr/brainfuck-kr.html.markdown +++ b/ko-kr/brainfuck-kr.html.markdown @@ -5,10 +5,11 @@ contributors: - ["Mathias Bynens", "http://mathiasbynens.be/"] translators: - ["JongChan Choi", "http://0xABCDEF.com/"] + - ["Peter Lee", "http://peterjlee.com/"] lang: ko-kr --- -Brainfuck(f는 대문자로 적지 않습니다)은 +Brainfuck(문장을 시작하는 단어가 아닌이상 첫글자는 대문자를 사용하지 않습니다)은 여덟가지 명령어만으로 튜링-완전한 최소주의 프로그래밍 언어입니다. ``` diff --git a/php.html.markdown b/php.html.markdown index 226eefff..c3317d59 100644 --- a/php.html.markdown +++ b/php.html.markdown @@ -11,7 +11,7 @@ This document describes PHP 5+. ```php <?php // PHP code must be enclosed with <?php tags -// If your php file only contains PHP code, it is best practise +// If your php file only contains PHP code, it is best practice // to omit the php closing tag. // Two forward slashes start a one-line comment. diff --git a/pt-br/java-pt.html.markdown b/pt-br/java-pt.html.markdown new file mode 100644 index 00000000..e8d5a538 --- /dev/null +++ b/pt-br/java-pt.html.markdown @@ -0,0 +1,435 @@ +--- + +language: java +contributors: + - ["Jake Prather", "http://github.com/JakeHP"] + - ["Madison Dickson", "http://github.com/mix3d"] +translators: + - ["Victor Kléber Santos L. Melo", "http://victormelo.com.br/blog"] + - ["Renê Douglas N. de Morais", "mailto:rene.douglas.bsi@gmail.com"] +lang: pt-br +filename: LearnJava.java + +--- + +Java é uma linguagem de programação de propósito geral, concorrente, baseada em classes e orientada a objetos. +[Leia mais aqui](http://docs.oracle.com/javase/tutorial/java/index.html) + +```java +// Comentários de uma linha começam com // +/* +Comentários de várias linhas são feitos dessa forma. +*/ +/** +Comentários JavaDoc são feitos assim. São usados para descrever a Classe ou os atributos da Classe. +*/ + +// Importa a classe ArrayList que está dentro do pacote java.util +import java.util.ArrayList; +// Importa todas as classes que estão dentro do pacote java.security +import java.security.*; + +// Cada arquivo .java contém uma classe pública, com o mesmo nome do arquivo. +public class LearnJava { + + // Um programa precisa ter um método main como um ponto de entrada. + public static void main (String[] args) { + + // O System.out.println é usado para imprimir no console + System.out.println("Olá Mundo!"); + System.out.println( + "Integer: " + 10 + + " Double: " + 3.14 + + " Boolean: " + true); + + // Para imprimir sem inserir uma nova lina, use o System.out.print + System.out.print("Olá "); + System.out.print("Mundo"); + + + /////////////////////////////////////// + // Tipos & Variáveis + /////////////////////////////////////// + + // Declara-se variáveis usando <tipo> <nome> [ + // Byte - inteiro de 8 bits com sinal complementado a dois + // (-128 <= byte <= 127) + byte fooByte = 100; + + // Short - inteiro de 16 bits com sinal complementado a dois + // (-32,768 <= short <= 32,767) + short fooShort = 10000; + + // Integer - inteiro de 32 bits com sinal complementado a dois + // (-2,147,483,648 <= int <= 2,147,483,647) + int fooInt = 1; + + // Long - inteiro de 64 bits com sinal complementado a dois + // (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807) + long fooLong = 100000L; + // L é usado para indicar que o valor da variável é do tipo Long; + // sem o L, tudo é tratado como inteiro por padrão. + + // Nota: Java não tem tipos sem sinal + + // Float - Ponto Flutuante 32-bits, de precisão simples no padrão IEEE 754 + float fooFloat = 234.5f; + // f é usado para indicar que o valor da variável é do tipo float; + // caso contrário, ela é tratada como double. + + // Double - Ponto Flutuante 64-bits, de precisão dupla no padrão IEEE 754 + double fooDouble = 123.4; + + // Boolean - true & false + boolean fooBoolean = true; + boolean barBoolean = false; + + // Char - Um caractere Unicode de 16 bits + char fooChar = 'A'; + + // Usa-se o final para fazer com que a variável seja imutável. + final int HORAS_QUE_TRABALHEI_POR_SEMANA = 9001; + + // Strings + String fooString = "Aqui está minha String!"; + + // \n é um caractere de escape que inicia uma nova linha + String barString = "Imprimir em uma nova linha?\nSem problemas!"; + // \t é um caractere de escape que adiciona um caractere de tabulação + String bazString = "Você quer adicionar tabulação?\tSem problemas!"; + System.out.println(fooString); + System.out.println(barString); + System.out.println(bazString); + + // Arrays + //O tamanho do array precisa ser determinado na sua declaração + //O formato para declarar um array é: + //<tipo de dado> [] <nome da variável> = new <tipo de dado>[<tamanho do array>]; + int [] intArray = new int[10]; + String [] stringArray = new String[1]; + boolean [] booleanArray = new boolean[100]; + + // Outra maneira de declarar e inicializar um array + int [] y = {9000, 1000, 1337}; + + // Indexando um array - Acessando um elemento + System.out.println("intArray no índice 0: " + intArray[0]); + + // O primeiro termo de um array é o 0 e eles são mutáveis. + intArray[1] = 1; + System.out.println("intArray no índice 1: " + intArray[1]); // => 1 + + // Outras estruturas que devem ser vistas + // ArrayLists - São parecidos com os arrays, porém oferecem mais funcionalidades + // e o tamanho é mutável. + // LinkedLists + // Maps + // HashMaps + + /////////////////////////////////////// + // Operadores + /////////////////////////////////////// + System.out.println("\n->Operadores"); + + int i1 = 1, i2 = 2; // Forma abreviada de escrever múltiplas declarações. + + // Aritmética é feita da forma convencional + System.out.println("1+2 = " + (i1 + i2)); // => 3 + System.out.println("2-1 = " + (i2 - i1)); // => 1 + System.out.println("2*1 = " + (i2 * i1)); // => 2 + System.out.println("1/2 = " + (i1 / i2)); // => 0 (0.5 arredondado para baixo) + + // Módulo + System.out.println("11%3 = "+(11 % 3)); // => 2 + + // Operadores de comparação + System.out.println("3 == 2? " + (3 == 2)); // => false + System.out.println("3 != 2? " + (3 != 2)); // => true + System.out.println("3 > 2? " + (3 > 2)); // => true + System.out.println("3 < 2? " + (3 < 2)); // => false + System.out.println("2 <= 2? " + (2 <= 2)); // => true + System.out.println("2 >= 2? " + (2 >= 2)); // => true + + // Operadores bit-a-bit! + /* + ~ Complemento de um + << Deslocamento a esquerda com sinal + >> Deslocamento a direita com sinal + >>> Deslocamento a direita sem sinal + & E bit-a-bit + | OU bit-a-bit + ^ OU exclusivo bit-a-bit + */ + + // Incrementações + int i = 0; + System.out.println("\n->Inc/Dec-rementação"); + System.out.println(i++); //i = 1. Pós-Incrementação + System.out.println(++i); //i = 2. Pre-Incrementação + System.out.println(i--); //i = 1. Pós-Decrementação + System.out.println(--i); //i = 0. Pre-Decrementação + + /////////////////////////////////////// + // Estruturas de Controle + /////////////////////////////////////// + System.out.println("\n->Estruturas de Controle"); + + // Os comandos If são parecidos com o da linguagem C + int j = 10; + if (j == 10){ + System.out.println("Eu serei impresso"); + } else if (j > 10) { + System.out.println("Eu não"); + } else { + System.out.println("Eu também não"); + } + + // O Loop While + int fooWhile = 0; + while(fooWhile < 100) + { + //System.out.println(fooWhile); + //Incrementando o contador + //Iteração feita 99 vezes, fooWhile 0->99 + fooWhile++; + } + System.out.println("Valor do fooWhile: " + fooWhile); + + // O Loop Do While + int fooDoWhile = 0; + do + { + //System.out.println(fooDoWhile); + //Incrementando o contador + //Iteração feita 99 vezes, fooDoWhile 0->99 + fooDoWhile++; + }while(fooDoWhile < 100); + System.out.println("Valor do fooDoWhile: " + fooDoWhile); + + // O Loop For + int fooFor; + //estrutura do loop for => for(<operação_de_início>; <condição>; <passo>) + for(fooFor=0; fooFor<10; fooFor++){ + //System.out.println(fooFor); + //Iteração feita 10 vezes, fooFor 0->9 + } + System.out.println("Valor do fooFor: " + fooFor); + + // O Loop For Each + // Itera automaticamente por um array ou lista de objetos. + int[] fooList = {1,2,3,4,5,6,7,8,9}; + //estrutura do loop for each => for(<objeto> : <array_de_objeto>) + //lê-se: para cada objeto no array + //nota: o tipo do objeto deve ser o mesmo do array. + + for( int bar : fooList ){ + //System.out.println(bar); + //Itera 9 vezes e imprime 1-9 em novas linhas + } + + // Switch + // Um switch funciona com os tipos de dados: byte, short, char e int + // Ele também funciona com tipos enumerados (vistos em tipos Enum) + // como também a classe String e algumas outras classes especiais + // tipos primitivos: Character, Byte, Short e Integer + int mes = 3; + String mesString; + switch (mes){ + case 1: + mesString = "Janeiro"; + break; + case 2: + mesString = "Fevereiro"; + break; + case 3: + mesString = "Março"; + break; + default: + mesString = "Algum outro mês"; + break; + } + System.out.println("Resultado do Switch: " + mesString); + + // Condição de forma abreviada. + // Você pode usar o operador '?' para atribuições rápidas ou decisões lógicas. + // Lê-se "Se (declaração) é verdadeira, use <primeiro valor> + // caso contrário, use <segundo valor>". + int foo = 5; + String bar = (foo < 10) ? "A" : "B"; + System.out.println(bar); //Imprime A, pois a condição é verdadeira. + + + /////////////////////////////////////// + // Convertendo tipos de dados e Casting + /////////////////////////////////////// + + //Conversão de Dados + + //Convertendo String para Inteiro. + Integer.parseInt("123");//retorna uma versão inteira de "123". + + //Convertendo Inteiro para String + Integer.toString(123);//retorna uma versão String de 123. + + // Para outras conversões confira as seguintes classes + // Double + // Long + // String + + // Casting + // Você pode também converter objetos java, há vários detalhes e + // lida com alguns conceitos intermediários + // Dê uma olhada no link: + // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html + + + /////////////////////////////////////// + // Classes e Métodos + /////////////////////////////////////// + + System.out.println("\n->Classes e Métodos"); + + // (segue a definição da classe Bicicleta) + + // Use o new para instanciar uma classe + Bicicleta caloi = new Bicicleta(); // Objeto caloi criado. + + // Chame os métodos do objeto + caloi.aumentarVelocidade(3); // Você deve sempre usar métodos para modificar variáveis + caloi.setRitmo(100); + + // toString é uma convenção para mostrar o valor deste objeto. + System.out.println("informações de caloi: " + caloi.toString()); + + } // Fim do método main +} // Fim da classe LearnJava + + +// Você pode incluir outras classes que não são públicas num arquivo .java + + +// Sintaxe de declaração de Classe. +// <public/private/protected> class <nome da classe>{ +// // atributos, construtores e todos os métodos. +// // funções são chamadas de métodos em Java. +// } + +class Bicicleta { + + // Atributos/Variáveis da classe Bicicleta. + public int ritmo; // Public: Pode ser acessada em qualquer lugar. + private int velocidade; // Private: Apenas acessível a classe. + protected int catraca; // Protected: Acessível a classe e suas subclasses. + String nome; // default: Apenas acessível ao pacote. + + // Construtores são uma forma de criação de classes + // Este é o construtor padrão. + public Bicicleta() { + catraca = 1; + ritmo = 50; + velocidade = 5; + nome = "Bontrager"; + } + + // Este é um construtor específico (ele contém argumentos). + public Bicicleta (int ritmoInicial, int velocidadeInicial, int catracaInicial, String nome) { + this.catraca = catracaInicial; + this.ritmo = ritmoInicial; + this.velocidade = velocidadeInicial; + this.nome = nome; + } + + // Sintaxe de um método: + // <public/private/protected> <tipo de retorno> <nome do método>(<args>) // + + // Classes em Java costumam implementar métodos getters e setters para seus campos. + + // Sintaxe de declaração de métodos + // <escopo> <tipo de retorno> <nome do método>(<args>) // + public int getRitmo() { + return ritmo; + } + + // Métodos do tipo void não requerem declaração de retorno. + public void setRitmo(int novoValor) { + ritmo = novoValor; + } + + public void setEquipamento(int novoValor) { + catraca = novoValor; + } + + public void aumentarVelocidade(int incremento) { + velocidade += incremento; + } + + public void diminuirVelocidade(int decremento) { + velocidade -= decremento; + } + + public void setNome(String novoNome) { + nome = novoNome; + } + + public String getNome() { + return nome; // retorna um dado do tipo String. + } + + //Método para mostrar os valores dos atributos deste objeto. + @Override + public String toString() { + return "catraca: " + catraca + + " ritmo: " + ritmo + + " velocidade: " + velocidade + + " nome: " + nome; + } +} // fim classe Bicicleta + +// Velocipede é uma subclasse de bicicleta. +class Velocipede extends Bicicleta { + // (Velocípedes são bicicletas com rodas dianteiras grandes + // Elas não possuem catraca.) + + public Velocipede(int ritmoInicial, int velocidadeInicial){ + // Chame o construtor do pai (construtor de Bicicleta) com o comando super. + super(ritmoInicial, velocidadeInicial, 0, "PennyFarthing"); + } + + // Você pode marcar um método que você está substituindo com uma @annotation + // Para aprender mais sobre o que são as annotations e sua finalidade + // dê uma olhada em: http://docs.oracle.com/javase/tutorial/java/annotations/ + @Override + public void setEquipamento(int catraca) { + catraca = 0; + } + +} + +``` + +## Leitura Recomendada + +Os links fornecidos aqui abaixo são apenas para ter uma compreensão do tema, use o Google e encontre exemplos específicos. + +Outros tópicos para pesquisar: + +* [Tutorial Java para Sun Trail / Oracle](http://docs.oracle.com/javase/tutorial/index.html) + +* [Modificadores de acesso do Java](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html) + +* [Coceitos de Programação Orientada à Objetos](http://docs.oracle.com/javase/tutorial/java/concepts/index.html): + * [Herança](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html) + * [Polimorfismo](http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html) + * [Abstração](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html) + +* [Exceções](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html) + +* [Interfaces](http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html) + +* [Tipos Genéricos](http://docs.oracle.com/javase/tutorial/java/generics/index.html) + +* [Conversões de código Java](http://www.oracle.com/technetwork/java/codeconv-138413.html) + +Livros: + +* [Use a cabeça, Java] (http://www.headfirstlabs.com/books/hfjava/) diff --git a/python.html.markdown b/python.html.markdown index 08e68407..22d236ac 100644 --- a/python.html.markdown +++ b/python.html.markdown @@ -2,6 +2,7 @@ language: python contributors: - ["Louie Dinh", "http://ldinh.ca"] + - ["Amin Bandali", "http://aminbandali.com"] filename: learnpython.py --- @@ -159,6 +160,8 @@ li[1:3] #=> [2, 4] li[2:] #=> [4, 3] # Omit the end li[:3] #=> [1, 2, 4] +# Revert the list +li[::-1] #=> [3, 4, 2, 1] # Remove arbitrary elements from a list with "del" del li[2] # li is now [1, 2, 3] @@ -481,6 +484,7 @@ dir(math) * [The Official Docs](http://docs.python.org/2.6/) * [Hitchhiker's Guide to Python](http://docs.python-guide.org/en/latest/) * [Python Module of the Week](http://pymotw.com/2/) +* [A Crash Course in Python for Scientists](http://nbviewer.ipython.org/5920182) ### Dead Tree diff --git a/ruby.html.markdown b/ruby.html.markdown index 8723e18f..bf4cb229 100644 --- a/ruby.html.markdown +++ b/ruby.html.markdown @@ -139,8 +139,8 @@ array.[] 12 #=> nil # From the end array[-1] #=> 5 -# With a start and end index -array[2, 4] #=> [3, 4, 5] +# With a start index and length +array[2, 3] #=> [3, 4, 5] # Or with a range array[1..3] #=> [2, 3, 4] diff --git a/zh-cn/bash-cn.html.markdown b/zh-cn/bash-cn.html.markdown new file mode 100644 index 00000000..e3eed3a6 --- /dev/null +++ b/zh-cn/bash-cn.html.markdown @@ -0,0 +1,148 @@ +--- +category: tool +tool: bash +contributors: + - ["Max Yankov", "https://github.com/golergka"] + - ["Darren Lin", "https://github.com/CogBear"] + - ["Alexandre Medeiros", "http://alemedeiros.sdf.org"] +translators: + - ["Chunyang Xu", "https://github.com/XuChunyang"] +filename: LearnBash-cn.sh +lang: zh-cn +--- + +Bash 是一个为 GNU 计划编写的 Unix shell,是 Linux 和 Mac OS X 下的默认 shell。 +以下大多数例子可以作为脚本的一部分运行也可直接在 shell 下交互执行。 + +[更多信息](http://www.gnu.org/software/bash/manual/bashref.html) + +```bash +#!/bin/sh +# 脚本的第一行叫 shebang,用来告知系统如何执行该脚本: +# 参见: http://en.wikipedia.org/wiki/Shebang_(Unix) +# 如你所见,注释以 # 开头,shebang 也是注释。 + +# 显示 “Hello world!” +echo Hello, world! + +# 每一句指令以换行或分号隔开: +echo 'This is the first line'; echo 'This is the second line' + +# 声明一个变量: +VARIABLE="Some string" + +# 下面是错误的做法: +VARIABLE = "Some string" +# Bash 会把 VARIABLE 当做一个指令,由于找不到该指令,因此这里会报错。 + + +# 使用变量: +echo $VARIABLE +echo "$VARIABLE" +echo '$VARIABLE' +# 当你分配 (assign) 、导出 (export),或者以其他方式使用变量时,变量名前不加 $。 +# 如果要使用变量的值, 则要加 $。 +# 注意: ' (单引号) 不会展开变量(即会屏蔽掉变量)。 + + +# 在变量内部进行字符串代换 +echo ${VARIABLE/Some/A} +# 会把 VARIABLE 中首次出现的 "some" 替换成 “A”。 + +# 内置变量: +# 下面的内置变量很有用 +echo "Last program return value: $?" +echo "Script's PID: $$" +echo "Number of arguments: $#" +echo "Scripts arguments: $@" +echo "Scripts arguments separeted in different variables: $1 $2..." + +# 读取输入: +echo "What's your name?" +read NAME # 这里不需要声明新变量 +echo Hello, $NAME! + +# 通常的 if 结构看起来像这样: +# 'man test' 可查看更多的信息 +if [ $NAME -ne $USER ] +then + echo "Your name is you username" +else + echo "Your name isn't you username" +fi + +# 根据上一个指令执行结果决定是否执行下一个指令 +echo "Always executed" || echo "Only executed if first command fail" +echo "Always executed" && echo "Only executed if first command does NOT fail" + +# 表达式的格式如下: +echo $(( 10 + 5 )) + +# 与其他编程语言不同的是,bash 运行时依赖上下文。比如,使用 ls 时,列出当前目录。 +ls + +# 指令可以带有选项: +ls -l # 列出文件和目录的详细信息 + +# 前一个指令的输出可以当作后一个指令的输入。grep 用来匹配字符串。 +# 用下面的指令列出当前目录下所有的 txt 文件: +ls -l | grep "\.txt" + +# 重定向可以到输出,输入和错误输出。 +python2 hello.py < "input.in" +python2 hello.py > "output.out" +python2 hello.py 2> "error.err" +# > 会覆盖已存在的文件, >> 会以累加的方式输出文件中。 + +# 一个指令可用 $( ) 嵌套在另一个指令内部: +# 以下的指令会打印当前目录下的目录和文件总数 +echo "There are $(ls | wc -l) items here." + +# Bash 的 case 语句与 Java 和 C++ 中的 switch 语句类似: +case "$VARIABLE" in + # 列出需要匹配的字符串 + 0) echo "There is a zero.";; + 1) echo "There is a one.";; + *) echo "It is not null.";; +esac + +# 循环遍历给定的参数序列: +# 变量$VARIABLE 的值会被打印 3 次。 +# 注意 ` ` 和 $( ) 等价。seq 返回长度为 3 的数组。 +for VARIABLE in `seq 3` +do + echo "$VARIABLE" +done + +# 你也可以使用函数 +# 定义函数: +function foo () +{ + echo "Arguments work just like script arguments: $@" + echo "And: $1 $2..." + echo "This is a function" + return 0 +} + +# 更简单的方法 +bar () +{ + echo "Another way to declare functions!" + return 0 +} + +# 调用函数 +foo "My name is" $NAME + +# 有很多有用的指令需要学习: +tail -n 10 file.txt +# 打印 file.txt 的最后 10 行 +head -n 10 file.txt +# 打印 file.txt 的前 10 行 +sort file.txt +# 将 file.txt 按行排序 +uniq -d file.txt +# 报告或忽略重复的行,用选项 -d 打印重复的行 +cut -d ',' -f 1 file.txt +# 打印每行中 ',' 之前内容 +``` diff --git a/zh-cn/brainfuck-cn.html.markdown b/zh-cn/brainfuck-cn.html.markdown new file mode 100644 index 00000000..a6f3fa09 --- /dev/null +++ b/zh-cn/brainfuck-cn.html.markdown @@ -0,0 +1,70 @@ +--- +language: brainfuck +lang: zh-cn +contributors: + - ["Prajit Ramachandran", "http://prajitr.github.io/"] + - ["Mathias Bynens", "http://mathiasbynens.be/"] +translators: + - ["lyuehh", "https://github.com/lyuehh"] +--- + +Brainfuck 是一个极小的只有8个指令的图灵完全的编程语言。 + +``` +除"><+-.,[]"之外的的任何字符都会被忽略 (不包含双引号)。 + +Brainfuck 包含一个有30,000个单元为0的数组,和 +一个数据指针指向当前的单元。 + +8个指令如下: ++ : 指针指向的单元的值加1 +- : 指针指向的单元的值减1 +> : 将指针移动到下一个单元(右边的元素) +< : 将指针移动到上一个单元(左边的元素) +. : 打印当前单元的内容的ASCII值 (比如 65 = 'A'). +, : 读取一个字符到当前的单元 +[ : 如果当前单元的值是0,则向后调转到对应的]处 +] : 如果当前单元的值不是0,则向前跳转到对应的[处 + +[ 和 ] 组成了一个while循环。很明显,它们必须配对。 + +让我们看一些基本的brainfuck 程序。 + +++++++ [ > ++++++++++ < - ] > +++++ . + +这个程序打印字母'A'。首先,它把 #1 增加到6,使用它来作为循环条件, +然后,进入循环,将指针移动到 #2 ,将 #2 的值增加到10,然后 +移动回 #1,将单元 #1 的值减1,然后继续。循环共进行了6次。 + +这时,我们在 #1,它的值为0,#2 的值为60,我们移动到 +#2,将 #2 的内容加上5,然后将 #2 的内容打印出来,65在 +ASCII中表示'A', 所以'A'就会被打印出来。 + + +, [ > + < - ] > . + +这个程序从用户的输入中读取一个字符,然后把它复制到 #1。 +然后我们开始一个循环,移动到 #2,将 #2 的值加1,再移动回 #1,将 #1 +的值减1,直到 #1的值为0,这样 #2 里就保存了 #1 的旧值,循环结束时我们 +在 #1,这时我们移动到 #2,然后把字符以ASCII打印出来。 + +而且要记住的一点就是,空格在这里只是为了可读性,你可以将他们写成这样: + +,[>+<-]>. + +试着思考一下这段程序是干什么的: + +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> + +这段程序从输入接收2个参数,然后将他们相乘。 + +先读取2个输入,然后开始外层循环,以 #1 作为终止条件,然后将指针移动到 +#2,然后开始 #2 的内层循环,将 #3 加1。但是这里有一个小问题,在内层 +循环结束的时候,#2 的值是0了,那么下次执行外层循环的时候,就有问题了。 +为了解决这个问题,我们可以增加 #4 的值,然后把 #4 的值复制到 #2, +最后结果就保存在 #3 中了。 +``` +好了这就是brainfuck了。也没那么难,是吧?为了好玩,你可以写你自己的 +brainfuck程序,或者用其他语言写一个brainfuck的解释器,解释器非常容易 +实现,但是如果你是一个自虐狂的话,你可以尝试用brainfuck写一个brainfuk的 +解释器。 |