From c72cae80fb05aab74eb96aeb0847f96e4615299f Mon Sep 17 00:00:00 2001 From: Austin Appleby Date: Sun, 21 Apr 2024 05:37:44 -0700 Subject: [PATCH] checkpoint --- build.hancho | 13 +- config/rules.hancho | 32 +- data/input-text.txt | 8122 ++++++++++++++--------------- examples/c_lexer/c_lexer.hancho | 10 +- examples/c_parser/c_parser.hancho | 12 +- examples/ini/ini.hancho | 6 - examples/json/json.hancho | 14 +- examples/regex/regex.hancho | 12 +- examples/toml/toml.hancho | 6 +- examples/tutorial/tutorial.hancho | 18 +- tests/tests.hancho | 6 +- 11 files changed, 4126 insertions(+), 4125 deletions(-) delete mode 100644 examples/ini/ini.hancho diff --git a/build.hancho b/build.hancho index bf7daaa..992e942 100644 --- a/build.hancho +++ b/build.hancho @@ -1,16 +1,15 @@ # matcheroni/build.hancho -print("Building Matcheroni with Hancho") - hancho.build_tag = "debug" -c_lexer = hancho.load("examples/c_lexer/c_lexer.hancho") -c_parser = hancho.load("examples/c_parser/c_parser.hancho", - c_lexer_lib = c_lexer.c_lexer_lib) +hancho.rules = hancho.load("config/rules.hancho") +hancho.c_lexer = hancho.load("examples/c_lexer/c_lexer.hancho") +hancho.c_parser = hancho.load("examples/c_parser/c_parser.hancho") + +hancho.rules.c_library("examples/ini/ini_parser.cpp", "examples/ini/ini_parser.a") -hancho.load("examples/ini/ini.hancho") hancho.load("examples/json/json.hancho") hancho.load("examples/regex/regex.hancho") hancho.load("examples/toml/toml.hancho") hancho.load("tests/tests.hancho") -hancho.load("examples/tutorial/tutorial.hancho", c_lexer_lib=c_lexer.c_lexer_lib, c_parser_lib = c_parser.c_parser_lib) +hancho.load("examples/tutorial/tutorial.hancho") diff --git a/config/rules.hancho b/config/rules.hancho index 60d67da..32389a2 100644 --- a/config/rules.hancho +++ b/config/rules.hancho @@ -37,16 +37,32 @@ run_c_test = hancho.command( #------------------------------------------------------------------------------- -def compile_srcs(source_files, **kwargs): - return [compile_cpp(f, **kwargs) for f in hancho.flatten(source_files)] +def compile_srcs(config, source_files): + objs = [] + for file in hancho.flatten(source_files): + if isinstance(file, hancho.Task): + objs.append(file) + else: + objs.append(compile_cpp.task(config, source_files = file)) + return objs -def c_binary(source_files, build_files, **kwargs): - return link_c_bin(compile_srcs(source_files, **kwargs), build_files, **kwargs) +def c_binary(config): + source_files = config.pop("source_files") + build_files = config.pop("build_files") + objs = compile_srcs(config, source_files) + return link_c_bin.task(config, source_files = objs, build_files = build_files) -def c_library(source_files, build_files, **kwargs): - return link_c_lib(compile_srcs(source_files, **kwargs), build_files, **kwargs) +def c_library(config): + source_files = config.pop("source_files") + build_files = config.pop("build_files") + objs = compile_srcs(config, source_files) + return link_c_lib.task(config, source_files = objs, build_files = build_files) -def c_test(source_files, build_files, **kwargs): - return run_c_test(c_binary(source_files, build_files, **kwargs), **kwargs) +def c_test(config): + return run_c_test.task(config, source_files = c_binary(config)) #------------------------------------------------------------------------------- + +hancho.c_binary = hancho.callback(c_binary) +hancho.c_library = hancho.callback(c_library) +hancho.c_test = hancho.callback(c_test) diff --git a/data/input-text.txt b/data/input-text.txt index 595dd6f..20756bc 100644 --- a/data/input-text.txt +++ b/data/input-text.txt @@ -526,7 +526,7 @@ angular.module('myApp', []).controller('namesCtrl', function($scope) {

Total = {{ (quantity * price) | currency }}

- + //A filter can be added to a directive with a pipe character (|) and a filter. //The orderBy filter orders an array by an expression: @@ -540,7 +540,7 @@ angular.module('myApp', []).controller('namesCtrl', function($scope) {
-//An input filter can be added to a directive with a pipe character (|) +//An input filter can be added to a directive with a pipe character (|) //and filter followed by a colon and a model name. //The filter selects a subset of an array: @@ -567,7 +567,7 @@ angular.module('myApp', []).controller('namesCtrl', function($scope) { // AngularJS $http is a core service for reading data from web servers. // $http.get(url) is the function to use for reading server data. -
+
  • @@ -608,7 +608,7 @@ header("Access-Control-Allow-Origin: *"); // AngularJS Tables // Displaying tables with angular is very simple: -
    +
    @@ -627,7 +627,7 @@ app.controller('customersCtrl', function($scope, $http) { }); -// To sort the table, add an orderBy filter: +// To sort the table, add an orderBy filter:
    @@ -635,7 +635,7 @@ app.controller('customersCtrl', function($scope, $http) {
    {{ x.Name }}
    -// To display the table index, add a with $index: +// To display the table index, add a with $index: @@ -677,12 +677,12 @@ app.controller('customersCtrl', function($scope, $http) { // The ng-disabled directive binds the application data mySwitch to the HTML button's disabled attribute. // The ng-model directive binds the value of the HTML checkbox element to the value of mySwitch. -// If the value of mySwitch evaluates to true, the button will be disabled: +// If the value of mySwitch evaluates to true, the button will be disabled:

    -// If the value of mySwitch evaluates to false, the button will not be disabled: +// If the value of mySwitch evaluates to false, the button will not be disabled:

    @@ -755,7 +755,7 @@ app.controller('personCtrl', function($scope) { // The first part of the personController is the same as in the chapter about controllers. // The application has a default property (a variable): $scope.myVar = false; -// The ng-hide directive sets the visibility, of a

    element with two input fields, +// The ng-hide directive sets the visibility, of a

    element with two input fields, // according to the value (true or false) of myVar. // The function toggle() toggles myVar between true and false. // The value ng-hide="true" makes the element invisible. @@ -839,7 +839,7 @@ app.controller("myCtrl", function($scope) { //myApp.js -var app = angular.module("myApp", []); +var app = angular.module("myApp", []); // The [] parameter in the module definition can be used to define dependent modules. @@ -849,12 +849,12 @@ app.controller("myCtrl", function($scope) { $scope.lastName= "Doe"; }); -// Global functions should be avoided in JavaScript. They can easily be overwritten +// Global functions should be avoided in JavaScript. They can easily be overwritten // or destroyed by other scripts. // AngularJS modules reduces this problem, by keeping all functions local to the module. -// While it is common in HTML applications to place scripts at the end of the +// While it is common in HTML applications to place scripts at the end of the // element, it is recommended that you load the AngularJS library either // in the or at the start of the . @@ -932,13 +932,13 @@ translators: - ["Ader", "https://github.com/y1n0"] --- -HTML اختصار ل HyperText Markup Language، أي "لغة ترميز النص التشعبي". -هي لغة تمكننا من كتابة صفحات موجهة لشبكة الويب العالمي. -هي لغة توصيف للنص، تسمح بكتابة صفحات ويب عن طريق تحديد كيفية عرض النصوص والمعلومات. -في الحقيقة، ملفات html هي ملفات تحتوي على نصوص بسيطة. -ما هو توصيف النص هذا؟ هو طريقة لتنظيم معلومات النص عن طريق إحاطته بوُسوم فتح ووسوم غلق. -هذه الوسوم تعطي معاني محددة للنص الذي تحيطه. -كباقي لغات الحاسوب، هناك الكثير من إصدارات HTML. سنتحدث هنا عن HTLM5. +HTML اختصار ل HyperText Markup Language، أي "لغة ترميز النص التشعبي". +هي لغة تمكننا من كتابة صفحات موجهة لشبكة الويب العالمي. +هي لغة توصيف للنص، تسمح بكتابة صفحات ويب عن طريق تحديد كيفية عرض النصوص والمعلومات. +في الحقيقة، ملفات html هي ملفات تحتوي على نصوص بسيطة. +ما هو توصيف النص هذا؟ هو طريقة لتنظيم معلومات النص عن طريق إحاطته بوُسوم فتح ووسوم غلق. +هذه الوسوم تعطي معاني محددة للنص الذي تحيطه. +كباقي لغات الحاسوب، هناك الكثير من إصدارات HTML. سنتحدث هنا عن HTLM5. **ملاحظة:** يمكنك تجريب مختلف الوسوم والعناصر بينما تقرأ الدرس عبر موقع كـ [codepen](http://codepen.io/pen/) حتى ترى تأثيرها وتعرف كيف تعمل وتتعود على استعمالها. هذه المادة تُعنى أساسا بتركيب HTML .وبعض النصائح المفيدة @@ -948,7 +948,7 @@ HTML اختصار ل HyperText Markup Language، أي "لغة ترميز الن - + @@ -1038,7 +1038,7 @@ HTML اختصار ل HyperText Markup Language، أي "لغة ترميز الن HTML يُكتب في ملفات تنتهي بـ `.html`. -## لمعرفة المزيد +## لمعرفة المزيد * [wikipedia](https://en.wikipedia.org/wiki/HTML) * [HTML tutorial](https://developer.mozilla.org/en-US/docs/Web/HTML) @@ -1177,44 +1177,44 @@ contributors: ## What are they? -Asymptotic Notations are languages that allow us to analyze an algorithm's -running time by identifying its behavior as the input size for the algorithm -increases. This is also known as an algorithm's growth rate. Does the -algorithm suddenly become incredibly slow when the input size grows? Does it -mostly maintain its quick run time as the input size increases? Asymptotic +Asymptotic Notations are languages that allow us to analyze an algorithm's +running time by identifying its behavior as the input size for the algorithm +increases. This is also known as an algorithm's growth rate. Does the +algorithm suddenly become incredibly slow when the input size grows? Does it +mostly maintain its quick run time as the input size increases? Asymptotic Notation gives us the ability to answer these questions. ## Are there alternatives to answering these questions? -One way would be to count the number of primitive operations at different -input sizes. Though this is a valid solution, the amount of work this takes +One way would be to count the number of primitive operations at different +input sizes. Though this is a valid solution, the amount of work this takes for even simple algorithms does not justify its use. -Another way is to physically measure the amount of time an algorithm takes to -complete given different input sizes. However, the accuracy and relativity -(times obtained would only be relative to the machine they were computed on) -of this method is bound to environmental variables such as computer hardware +Another way is to physically measure the amount of time an algorithm takes to +complete given different input sizes. However, the accuracy and relativity +(times obtained would only be relative to the machine they were computed on) +of this method is bound to environmental variables such as computer hardware specifications, processing power, etc. ## Types of Asymptotic Notation -In the first section of this doc we described how an Asymptotic Notation -identifies the behavior of an algorithm as the input size changes. Let us -imagine an algorithm as a function f, n as the input size, and f(n) being -the running time. So for a given algorithm f, with input size n you get -some resultant run time f(n). This results in a graph where the Y axis is the -runtime, X axis is the input size, and plot points are the resultants of the +In the first section of this doc we described how an Asymptotic Notation +identifies the behavior of an algorithm as the input size changes. Let us +imagine an algorithm as a function f, n as the input size, and f(n) being +the running time. So for a given algorithm f, with input size n you get +some resultant run time f(n). This results in a graph where the Y axis is the +runtime, X axis is the input size, and plot points are the resultants of the amount of time for a given input size. -You can label a function, or algorithm, with an Asymptotic Notation in many -different ways. Some examples are, you can describe an algorithm by its best -case, worse case, or equivalent case. The most common is to analyze an -algorithm by its worst case. You typically don't evaluate by best case because -those conditions aren't what you're planning for. A very good example of this -is sorting algorithms; specifically, adding elements to a tree structure. Best -case for most algorithms could be as low as a single operation. However, in -most cases, the element you're adding will need to be sorted appropriately -through the tree, which could mean examining an entire branch. This is the +You can label a function, or algorithm, with an Asymptotic Notation in many +different ways. Some examples are, you can describe an algorithm by its best +case, worse case, or equivalent case. The most common is to analyze an +algorithm by its worst case. You typically don't evaluate by best case because +those conditions aren't what you're planning for. A very good example of this +is sorting algorithms; specifically, adding elements to a tree structure. Best +case for most algorithms could be as low as a single operation. However, in +most cases, the element you're adding will need to be sorted appropriately +through the tree, which could mean examining an entire branch. This is the worst case, and this is what we plan for. ### Types of functions, limits, and simplification @@ -1223,24 +1223,24 @@ worst case, and this is what we plan for. Logarithmic Function - log n Linear Function - an + b Quadratic Function - an^2 + bn + c -Polynomial Function - an^z + . . . + an^2 + a*n^1 + a*n^0, where z is some +Polynomial Function - an^z + . . . + an^2 + a*n^1 + a*n^0, where z is some constant Exponential Function - a^n, where a is some constant ``` -These are some basic function growth classifications used in various -notations. The list starts at the slowest growing function (logarithmic, -fastest execution time) and goes on to the fastest growing (exponential, -slowest execution time). Notice that as 'n', or the input, increases in each -of those functions, the result clearly increases much quicker in quadratic, +These are some basic function growth classifications used in various +notations. The list starts at the slowest growing function (logarithmic, +fastest execution time) and goes on to the fastest growing (exponential, +slowest execution time). Notice that as 'n', or the input, increases in each +of those functions, the result clearly increases much quicker in quadratic, polynomial, and exponential, compared to logarithmic and linear. -One extremely important note is that for the notations about to be discussed -you should do your best to use simplest terms. This means to disregard -constants, and lower order terms, because as the input size (or n in our f(n) -example) increases to infinity (mathematical limits), the lower order terms -and constants are of little to no importance. That being said, if you have -constants that are 2^9001, or some other ridiculous, unimaginable amount, +One extremely important note is that for the notations about to be discussed +you should do your best to use simplest terms. This means to disregard +constants, and lower order terms, because as the input size (or n in our f(n) +example) increases to infinity (mathematical limits), the lower order terms +and constants are of little to no importance. That being said, if you have +constants that are 2^9001, or some other ridiculous, unimaginable amount, realize that simplifying will skew your notation accuracy. Since we want simplest form, lets modify our table a bit... @@ -1254,12 +1254,12 @@ Exponential - a^n, where a is some constant ``` ### Big-O -Big-O, commonly written as **O**, is an Asymptotic Notation for the worst -case, or ceiling of growth for a given function. It provides us with an +Big-O, commonly written as **O**, is an Asymptotic Notation for the worst +case, or ceiling of growth for a given function. It provides us with an _**asymptotic upper bound**_ for the growth rate of runtime of an algorithm. -Say `f(n)` is your algorithm runtime, and `g(n)` is an arbitrary time -complexity you are trying to relate to your algorithm. `f(n)` is O(g(n)), if -for some real constants c (c > 0) and n0, `f(n)` <= `c g(n)` for every input size +Say `f(n)` is your algorithm runtime, and `g(n)` is an arbitrary time +complexity you are trying to relate to your algorithm. `f(n)` is O(g(n)), if +for some real constants c (c > 0) and n0, `f(n)` <= `c g(n)` for every input size n (n > n0). *Example 1* @@ -1304,61 +1304,61 @@ Is there some pair of constants c, n0 that satisfies this for all n > No, there isn't. `f(n)` is NOT O(g(n)). ### Big-Omega -Big-Omega, commonly written as **Ω**, is an Asymptotic Notation for the best -case, or a floor growth rate for a given function. It provides us with an +Big-Omega, commonly written as **Ω**, is an Asymptotic Notation for the best +case, or a floor growth rate for a given function. It provides us with an _**asymptotic lower bound**_ for the growth rate of runtime of an algorithm. -`f(n)` is Ω(g(n)), if for some real constants c (c > 0) and n0 (n0 > 0), `f(n)` is >= `c g(n)` +`f(n)` is Ω(g(n)), if for some real constants c (c > 0) and n0 (n0 > 0), `f(n)` is >= `c g(n)` for every input size n (n > n0). ### Note -The asymptotic growth rates provided by big-O and big-omega notation may or -may not be asymptotically tight. Thus we use small-o and small-omega notation -to denote bounds that are not asymptotically tight. +The asymptotic growth rates provided by big-O and big-omega notation may or +may not be asymptotically tight. Thus we use small-o and small-omega notation +to denote bounds that are not asymptotically tight. ### Small-o -Small-o, commonly written as **o**, is an Asymptotic Notation to denote the -upper bound (that is not asymptotically tight) on the growth rate of runtime +Small-o, commonly written as **o**, is an Asymptotic Notation to denote the +upper bound (that is not asymptotically tight) on the growth rate of runtime of an algorithm. -`f(n)` is o(g(n)), if for some real constants c (c > 0) and n0 (n0 > 0), `f(n)` is < `c g(n)` +`f(n)` is o(g(n)), if for some real constants c (c > 0) and n0 (n0 > 0), `f(n)` is < `c g(n)` for every input size n (n > n0). -The definitions of O-notation and o-notation are similar. The main difference -is that in f(n) = O(g(n)), the bound f(n) <= g(n) holds for _**some**_ -constant c > 0, but in f(n) = o(g(n)), the bound f(n) < c g(n) holds for +The definitions of O-notation and o-notation are similar. The main difference +is that in f(n) = O(g(n)), the bound f(n) <= g(n) holds for _**some**_ +constant c > 0, but in f(n) = o(g(n)), the bound f(n) < c g(n) holds for _**all**_ constants c > 0. ### Small-omega -Small-omega, commonly written as **ω**, is an Asymptotic Notation to denote -the lower bound (that is not asymptotically tight) on the growth rate of +Small-omega, commonly written as **ω**, is an Asymptotic Notation to denote +the lower bound (that is not asymptotically tight) on the growth rate of runtime of an algorithm. -`f(n)` is ω(g(n)), if for some real constants c (c > 0) and n0 (n0 > 0), `f(n)` is > `c g(n)` +`f(n)` is ω(g(n)), if for some real constants c (c > 0) and n0 (n0 > 0), `f(n)` is > `c g(n)` for every input size n (n > n0). -The definitions of Ω-notation and ω-notation are similar. The main difference -is that in f(n) = Ω(g(n)), the bound f(n) >= g(n) holds for _**some**_ -constant c > 0, but in f(n) = ω(g(n)), the bound f(n) > c g(n) holds for +The definitions of Ω-notation and ω-notation are similar. The main difference +is that in f(n) = Ω(g(n)), the bound f(n) >= g(n) holds for _**some**_ +constant c > 0, but in f(n) = ω(g(n)), the bound f(n) > c g(n) holds for _**all**_ constants c > 0. ### Theta -Theta, commonly written as **Θ**, is an Asymptotic Notation to denote the -_**asymptotically tight bound**_ on the growth rate of runtime of an algorithm. +Theta, commonly written as **Θ**, is an Asymptotic Notation to denote the +_**asymptotically tight bound**_ on the growth rate of runtime of an algorithm. -`f(n)` is Θ(g(n)), if for some real constants c1, c2 and n0 (c1 > 0, c2 > 0, n0 > 0), +`f(n)` is Θ(g(n)), if for some real constants c1, c2 and n0 (c1 > 0, c2 > 0, n0 > 0), `c1 g(n)` is < `f(n)` is < `c2 g(n)` for every input size n (n > n0). ∴ `f(n)` is Θ(g(n)) implies `f(n)` is O(g(n)) as well as `f(n)` is Ω(g(n)). -Feel free to head over to additional resources for examples on this. Big-O +Feel free to head over to additional resources for examples on this. Big-O is the primary notation use for general algorithm time complexity. ### Ending Notes -It's hard to keep this kind of topic short, and you should definitely go -through the books and online resources listed. They go into much greater depth -with definitions and examples. More where x='Algorithms & Data Structures' is +It's hard to keep this kind of topic short, and you should definitely go +through the books and online resources listed. They go into much greater depth +with definitions and examples. More where x='Algorithms & Data Structures' is on its way; we'll have a doc up on analyzing actual code examples soon. ## Books @@ -1622,10 +1622,10 @@ function io_functions( localvar) { # When you pass arguments to AWK, they are treated as file names to process. # It will process them all, in order. Think of it like an implicit for loop, # iterating over the lines in these files. these patterns and actions are like -# switch statements inside the loop. +# switch statements inside the loop. /^fo+bar$/ { - + # This action will execute for every line that matches the regular # expression, /^fo+bar$/, and will be skipped for any line that fails to # match it. Let's just print the line: @@ -1743,7 +1743,7 @@ contributors: - ["Rahil Momin", "https://github.com/iamrahil"] - ["Gregrory Kielian", "https://github.com/gskielian"] - ["Etan Reisner", "https://github.com/deryni"] - - ["Jonathan Wang", "https://github.com/Jonathansw"] + - ["Jonathan Wang", "https://github.com/Jonathansw"] - ["Leo Rudberg", "https://github.com/LOZORD"] - ["Betsy Lorton", "https://github.com/schbetsy"] - ["John Detter", "https://github.com/jdetter"] @@ -1919,7 +1919,7 @@ cp -r srcDirectory/ dst/ # recursively copy # `mv` is also useful for renaming files! mv s0urc3.txt dst.txt # sorry, l33t hackers... -# Since bash works in the context of a current directory, you might want to +# Since bash works in the context of a current directory, you might want to # run your command in some other directory. We have cd for changing location: cd ~ # change to home directory cd .. # go up one directory @@ -2477,7 +2477,7 @@ sub increment { 1; -# Методите могат да се извикват на клас или на обект като се използва оператора +# Методите могат да се извикват на клас или на обект като се използва оператора # стрелка (->). use MyCounter; @@ -5341,7 +5341,7 @@ language: kotlin contributors: - ["S Webber", "https://github.com/s-webber"] translators: - - ["Xavier Sala", "https://github.com/utrescu"] + - ["Xavier Sala", "https://github.com/utrescu"] lang: ca-es filename: LearnKotlin-ca.kt --- @@ -5393,7 +5393,7 @@ fun main(args: Array) { println(bazString) /* - Es poden definir strings literals envoltant-los amb les triples cometes + Es poden definir strings literals envoltant-los amb les triples cometes ("""). Dins hi poden haver tant salts de línies com d'altres caràcters. */ @@ -5827,7 +5827,7 @@ writeln(varCmdLineArg, ", ", constCmdLineArg, ", ", paramCmdLineArg); // be made to alias a variable other than the variable it is initialized with. // Here, refToActual refers to actual. var actual = 10; -ref refToActual = actual; +ref refToActual = actual; writeln(actual, " == ", refToActual); // prints the same value actual = -123; // modify actual (which refToActual refers to) writeln(actual, " == ", refToActual); // prints the same value @@ -6171,7 +6171,7 @@ arrayFromLoop = [value in arrayFromLoop] value + 1; // Procedures -// Chapel procedures have similar syntax functions in other languages. +// Chapel procedures have similar syntax functions in other languages. proc fibonacci(n : int) : int { if n <= 1 then return n; return fibonacci(n-1) + fibonacci(n-2); @@ -6948,25 +6948,25 @@ supports RSR5 and RSR7 (work in progress) standards and many extensions. |# ;; S-expression comments are used to comment out expressions -#; (display "nothing") ; discard this expression +#; (display "nothing") ; discard this expression ;; CHICKEN has two fundamental pieces of syntax: Atoms and S-expressions ;; an atom is something that evaluates to itself ;; all builtin data types viz. numbers, chars, booleans, strings etc. are atoms ;; Furthermore an atom can be a symbol, an identifier, a keyword, a procedure ;; or the empty list (also called null) -'athing ;; => athing -'+ ;; => + +'athing ;; => athing +'+ ;; => + + ;; => ;; S-expressions (short for symbolic expressions) consists of one or more atoms (quote +) ;; => + ; another way of writing '+ (+ 1 2 3) ;; => 6 ; this S-expression evaluates to a function call -'(+ 1 2 3) ;; => (+ 1 2 3) ; evaluates to a list +'(+ 1 2 3) ;; => (+ 1 2 3) ; evaluates to a list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; 1. Primitive Datatypes and Operators +; 1. Primitive Datatypes and Operators ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Numbers @@ -6993,7 +6993,7 @@ supports RSR5 and RSR7 (work in progress) standards and many extensions. (printf "Hello, ~a.\n" "World") ;; => Hello, World. ;; print commandline arguments -(map print (command-line-arguments)) +(map print (command-line-arguments)) (list 'foo 'bar 'baz) ;; => (foo bar baz) (string-append "pine" "apple") ;; => "pineapple" @@ -7054,7 +7054,7 @@ s ;; => Error: unbound variable: s (print me) ;; => Error: unbound variable: me ;; Assign a new value to previously defined variable -(set! myvar 10) +(set! myvar 10) myvar ;; => 10 @@ -7063,7 +7063,7 @@ myvar ;; => 10 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Pairs -;; 'cons' constructs pairs, +;; 'cons' constructs pairs, ;; 'car' extracts the first element, 'cdr' extracts the rest of the elements (cons 'subject 'verb) ;; => '(subject . verb) (car (cons 'subject 'verb)) ;; => subject @@ -7095,7 +7095,7 @@ days ;; => (SUN TUE FRI) ;; A Vector typically occupies less space than a list of the same length ;; Random access of an element in a vector is faster than in a list #(1 2 3) ;; => #(1 2 3) ;; literal syntax -(vector 'a 'b 'c) ;; => #(a b c) +(vector 'a 'b 'c) ;; => #(a b c) (vector? #(1 2 3)) ;; => #t (vector-length #(1 (2) "a")) ;; => 3 (vector-ref #(1 (2) (3 3)) 2);; => (3 3) @@ -7115,9 +7115,9 @@ vec ;; => #(1 2 4) ;; Use 'lambda' to create functions. ;; A function always returns the value of its last expression -(lambda () "Hello World") ;; => # +(lambda () "Hello World") ;; => # -;; Use extra parens around function definition to execute +;; Use extra parens around function definition to execute ((lambda () "Hello World")) ;; => Hello World ;; argument list is empty ;; A function with an argument @@ -7167,7 +7167,7 @@ sqr ;; => # (eqv? 'yes 'yes) ;; => #t ;; 'equal?' recursively compares the contents of pairs, vectors, and strings, -;; applying eqv? on other objects such as numbers and symbols. +;; applying eqv? on other objects such as numbers and symbols. ;; A rule of thumb is that objects are generally equal? if they print the same. (equal? '(1 2 3) '(1 2 3)) ;; => #t @@ -7231,7 +7231,7 @@ sqr ;; => # (and #t #f (= 2 2.0)) ;; => #f (and (< 2 5) (> 2 0) "0 < 2 < 5") ;; => "0 < 2 < 5" -;; 'or' returns the first expression that evaluates to #t +;; 'or' returns the first expression that evaluates to #t ;; otherwise the result of the last expression is returned (or #f #t #f) ;; => #t (or #f #f #f) ;; => #f @@ -7247,7 +7247,7 @@ sqr ;; => # ;; loops can be created with the help of tail-recursions (define (loop count) (unless (= count 0) - (print "hello") + (print "hello") (loop (sub1 count)))) (loop 4) ;; => hello, hello ... @@ -7265,7 +7265,7 @@ sqr ;; => # (print x)) ;; command to execute in each step ;; => 0,1,2,3....9,done -;; Iteration over lists +;; Iteration over lists (for-each (lambda (a) (print (* a a))) '(3 5 7)) ;; => 9, 25, 49 @@ -7287,7 +7287,7 @@ sqr ;; => # ;; Supports fractions without falling back to inexact flonums 1/3 ;; => 1/3 ;; provides support for large integers through bignums -(expt 9 20) ;; => 12157665459056928801 +(expt 9 20) ;; => 12157665459056928801 ;; And other 'extended' functions (log 10 (exp 1)) ;; => 2.30258509299405 (numerator 2/3) ;; => 2 @@ -7303,7 +7303,7 @@ sqr ;; => # ;; Open a file to append, open "write only" and create file if it does not exist (define outfn (file-open "chicken-hen.txt" (+ open/append open/wronly open/creat))) ;; write some text to the file -(file-write outfn "Did chicken came before hen?") +(file-write outfn "Did chicken came before hen?") ;; close the file (file-close outfn) ;; Open the file "read only" @@ -7355,8 +7355,8 @@ sqr ;; => # (let ((str "PENCHANT") (i 0)) (while (< i (string-length str)) ;; while (condition) - (print (string-ref str i)) ;; body - (set! i (add1 i)))) + (print (string-ref str i)) ;; body + (set! i (add1 i)))) ;; => P, E, N, C, H, A, N, T ;; Advanced Syntax-Rules Primer -> http://petrofsky.org/src/primer.txt @@ -7374,7 +7374,7 @@ sqr ;; => # (define-syntax greet (syntax-rules () - ((_ whom) + ((_ whom) (begin (display "Hello, ") (display whom) @@ -7400,15 +7400,15 @@ sqr ;; => # ;; Following functor requires another module named 'M' that provides a function called 'multiply' ;; The functor itself exports a generic function 'square' (functor (squaring-functor (M (multiply))) (square) - (import scheme M) + (import scheme M) (define (square x) (multiply x x))) ;; Module 'nums' can be passed as a parameter to 'squaring-functor' -(module nums (multiply) +(module nums (multiply) (import scheme) ;; predefined modules - (define (multiply x y) (* x y))) + (define (multiply x y) (* x y))) ;; the final module can be imported and used in our program -(module number-squarer = (squaring-functor nums)) +(module number-squarer = (squaring-functor nums)) (import number-squarer) (square 3) ;; => 9 @@ -7859,8 +7859,8 @@ keymap ; => {:a 1, :b 2, :c 3} ; The "Thread-first" macro (->) inserts into each form the result of ; the previous, as the first argument (second item) -(-> - {:a 1 :b 2} +(-> + {:a 1 :b 2} (assoc :c 3) ;=> (assoc {:a 1 :b 2} :c 3) (dissoc :b)) ;=> (dissoc (assoc {:a 1 :b 2} :c 3) :b) @@ -7879,7 +7879,7 @@ keymap ; => {:a 1, :b 2, :c 3} ; Result: [1 3 5 7 9] ; When you are in a situation where you want more freedom as where to -; put the result of previous data transformations in an +; put the result of previous data transformations in an ; expression, you can use the as-> macro. With it, you can assign a ; specific name to transformations' output and use it as a ; placeholder in your chained expressions: @@ -8022,7 +8022,7 @@ command) and the ease-of-use on linking 3rd party libraries. CMake is an extensible, open-source system that manages the build process in an operating system and compiler-independent manner. Unlike many cross-platform systems, CMake is designed to be used in conjunction with the -native build environment. Simple configuration files placed in each source +native build environment. Simple configuration files placed in each source directory (called CMakeLists.txt files) are used to generate standard build files (e.g., makefiles on Unix and projects/workspaces in Windows MSVC) which are used in the usual way. @@ -8034,7 +8034,7 @@ are used in the usual way. # - mkdir build && cd build # - cmake .. # - make -# +# # With those steps, we will follow the best practice to compile into a subdir # and the second line will request to CMake to generate a new OS-dependent # Makefile. Finally, run the native Make command. @@ -8111,7 +8111,7 @@ endif( CONDITION ) # Loops foreach(loop_var arg1 arg2 ...) COMMAND1(ARGS ...) - COMMAND2(ARGS ...) + command(ARGS ...) ... endforeach(loop_var) @@ -8123,7 +8123,7 @@ foreach(loop_var IN [LISTS [list1 [...]]] while(condition) COMMAND1(ARGS ...) - COMMAND2(ARGS ...) + command(ARGS ...) ... endwhile(condition) @@ -8145,7 +8145,7 @@ ${variable_name} # Lists # Setup the list of source files -set( LEARN_CMAKE_SOURCES +set( LEARN_CMAKE_SOURCES src/main.c src/imagem.c src/pather.c @@ -8153,7 +8153,7 @@ set( LEARN_CMAKE_SOURCES # Calls the compiler # -# ${PROJECT_NAME} refers to Learn_CMake +# ${PROJECT_NAME} refers to Learn_CMake add_executable( ${PROJECT_NAME} ${LEARN_CMAKE_SOURCES} ) # Link the libraries @@ -8297,7 +8297,7 @@ ColdFusion is a scripting language for web development. [Read more here.](http://www.adobe.com/products/coldfusion-family.html) ### CFML -_**C**old**F**usion **M**arkup **L**anguage_ +_**C**old**F**usion **M**arkup **L**anguage_ ColdFusion started as a tag-based language. Almost all functionality is available using tags. ```cfm @@ -8432,8 +8432,8 @@ ColdFusion started as a tag-based language. Almost all functionality is availabl

    #i# is not 5, 15, 45, or 99.

    - - + +
    @@ -8445,7 +8445,7 @@ ColdFusion started as a tag-based language. Almost all functionality is availabl border: 1px solid #000000; padding: 2px; } - + table.table th { background-color: #CCCCCC; } @@ -8528,27 +8528,27 @@ ColdFusion started as a tag-based language. Almost all functionality is availabl - + - + - + - + - + - + - + - + @@ -8563,17 +8563,17 @@ ColdFusion started as a tag-based language. Almost all functionality is availabl - + - + - + - + @@ -8605,7 +8605,7 @@ ColdFusion started as a tag-based language. Almost all functionality is availabl ``` ### CFScript -_**C**old**F**usion **S**cript_ +_**C**old**F**usion **S**cript_ In recent years, the ColdFusion language has added script syntax to mirror tag functionality. When using an up-to-date CF server, almost all functionality is available using scrypt syntax. ## Further Reading @@ -9582,7 +9582,7 @@ Other fields: - **filename**: The filename for this article's code. It will be fetched, mashed together, and made downloadable. - + For non-English articles, *filename* should have a language-specific + + For non-English articles, *filename* should have a language-specific suffix. - **lang**: For translations, the human language this article is in. For categorization, mostly. @@ -10163,7 +10163,7 @@ filename: learnbrainfuck-cz.bf lang: cs-cz --- -Brainfuck (psaný bez kapitálek s vyjímkou začátku věty) je extrémně minimální +Brainfuck (psaný bez kapitálek s vyjímkou začátku věty) je extrémně minimální Turingovsky kompletní (ekvivalentní) programovací jazyk a má pouze 8 příkazů. Můžete si ho vyzkoušet přímo v prohlížeči s [brainfuck-visualizer](http://fatiherikli.github.io/brainfuck-visualizer/). @@ -10171,7 +10171,7 @@ Můžete si ho vyzkoušet přímo v prohlížeči s [brainfuck-visualizer](http: ``` Jakýkoliv znak mimo "><+-.,[]" (bez uvozovek) je ignorován. -Brainfuck je reprezentován jako pole, které má 30.000 buněk s počátkem v nule +Brainfuck je reprezentován jako pole, které má 30.000 buněk s počátkem v nule a datovým ukazatelem na aktuální buňce. Můžeme využít těchto osm příkazů: @@ -10192,16 +10192,16 @@ Pojďme se mrknout na některé brainfuck programy. ++++++ [ > ++++++++++ < - ] > +++++ . -Tento program vypíše písmeno 'A' (v ASCII je to číslo 65). Nejdříve navýší -buňku #1 na hodnotu 6. Buňka #1 bude použita pro smyčku. Potom program vstoupí -do smyčky ([) a sníží hodnotu buňky #1 o jedničku. Ve smyčce zvýší hodnotu +Tento program vypíše písmeno 'A' (v ASCII je to číslo 65). Nejdříve navýší +buňku #1 na hodnotu 6. Buňka #1 bude použita pro smyčku. Potom program vstoupí +do smyčky ([) a sníží hodnotu buňky #1 o jedničku. Ve smyčce zvýší hodnotu buňky #2 desetkrát, vrátí ze zpět na buňku #1 a sníží její hodnotu o jedničku. -Toto se stane šestkrát (je potřeba šestkrát snížit hodnotu buňky #1, aby byla +Toto se stane šestkrát (je potřeba šestkrát snížit hodnotu buňky #1, aby byla nulová a program přeskočil na konec cyklu označený znakem ]. -Na konci smyčky, kdy jsme na buňce #1 (která má hodnotu 0), tak má buňka #2 -hodnotu 60. Přesuneme se na buňku #2 a pětkrát zvýšíme její hodnotu o jedničku -na hodnotu 65. Na konci vypíšeme hodnotu buňky #2 - 65, což je v ASCII znak 'A' +Na konci smyčky, kdy jsme na buňce #1 (která má hodnotu 0), tak má buňka #2 +hodnotu 60. Přesuneme se na buňku #2 a pětkrát zvýšíme její hodnotu o jedničku +na hodnotu 65. Na konci vypíšeme hodnotu buňky #2 - 65, což je v ASCII znak 'A' na terminálu. @@ -10210,28 +10210,28 @@ na terminálu. Tento program přečte znak z uživatelského vstupu a zkopíruje ho do buňky #1. Poté začne smyčka - přesun na buňku #2, zvýšení hodnoty buňky #2 o jedničku, přesun zpět na buňku #1 a snížení její hodnoty o jedničku. Takto smyčka pokračuje -do té doby, než je buňka #1 nulová a buňka #2 nabyde původní hodnotu buňky #1. -Protože jsme na buňce #1, přesuneme se na buňku #2 a vytiskneme její hodnotu +do té doby, než je buňka #1 nulová a buňka #2 nabyde původní hodnotu buňky #1. +Protože jsme na buňce #1, přesuneme se na buňku #2 a vytiskneme její hodnotu v ASCII. -Je dobré vědět, že mezery jsou v programu uvedené pouze z důvodu čitelnosti. +Je dobré vědět, že mezery jsou v programu uvedené pouze z důvodu čitelnosti. Program je možné klidně zapsat i takto: ,[>+<-]>. -Nyní se podívejte na tento program a zkuste zjistit co dělá: +Nyní se podívejte na tento program a zkuste zjistit co dělá: ,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> Tento program vezme dvě čísla ze vstupu a vynásobí je. Program nejdříve načte dvě vstupní hodnoty. Poté začíná smyčka řízená hodnotou -v buňce #1 - přesun na buňku #2 a start druhé vnořené smyčky, která je řízená -hodnotou v buňce #2 a zvyšuje hodnotu v buňce #3. Nicméně je zde problém -kdy na konci vnitřní smyčky je v buňce #2 nula a smyčka by tak znovu -napokračovala. Vyřešíme to tak, že zvyšujeme o jedničku i buňku #4 a její -hodnotu poté překopírujeme do buňky #2. Na konci programu je v buňce #3 +v buňce #1 - přesun na buňku #2 a start druhé vnořené smyčky, která je řízená +hodnotou v buňce #2 a zvyšuje hodnotu v buňce #3. Nicméně je zde problém +kdy na konci vnitřní smyčky je v buňce #2 nula a smyčka by tak znovu +napokračovala. Vyřešíme to tak, že zvyšujeme o jedničku i buňku #4 a její +hodnotu poté překopírujeme do buňky #2. Na konci programu je v buňce #3 výsledek. ``` @@ -10883,7 +10883,7 @@ translators: - ["Ondra Linek", "https://github.com/defectus/"] --- -Jazyk Go byl vytvořen, jelikož bylo potřeba dokončit práci. Není to poslední +Jazyk Go byl vytvořen, jelikož bylo potřeba dokončit práci. Není to poslední trend ve světě počítačové vědy, ale je to nejrychlejší a nejnovější způsob, jak řešit realné problémy. @@ -10929,7 +10929,7 @@ func main() { func svetPoHello() { var x int // Deklarace proměnné. Proměnné musí být před použitím deklarované x = 3 // Přiřazení hodnoty do proměnné - // Existuje "krátká" deklarace := kde se typ proměnné odvodí, + // Existuje "krátká" deklarace := kde se typ proměnné odvodí, // proměnná vytvoří a přiřadí se jí hodnota y := 4 sum, prod := naucSeNasobit(x, y) // Funkce mohou vracet více hodnot @@ -11306,12 +11306,12 @@ translators: lang: cs-cz --- -Hack je nadmnožinou PHP a běží v rámci virtuálního stroje zvaného HHVM. Hack -dokáže skoro plně spolupracovat s existujícím PHP a přidává několik vylepšení, +Hack je nadmnožinou PHP a běží v rámci virtuálního stroje zvaného HHVM. Hack +dokáže skoro plně spolupracovat s existujícím PHP a přidává několik vylepšení, které známe ze staticky typovaných jazyků. Níže jsou popsané pouze vlastnosti jazyka Hack. Detaily ohledně jazyka PHP a jeho -syntaxe pak najdete na těchto stránkách v samostatném +syntaxe pak najdete na těchto stránkách v samostatném [článku o PHP](http://learnxinyminutes.com/docs/php/). ```php @@ -11351,7 +11351,7 @@ function identity(?string $stringOrNull) : ?string class TypeHintedProperties { public ?string $name; - + protected int $id; private float $score = 100.0; @@ -11391,7 +11391,7 @@ function openBox(Box $box) : int // Tvary -// +// // Hack zavádí koncept tvaru pro definování strukturovaných polí s garantovanou // typovou kontrolou pro klíče. type Point2D = shape('x' => int, 'y' => int); @@ -11408,7 +11408,7 @@ distance( // Type aliasing -// +// // Hack přidává několik vylepšení pro lepší čitelnost komplexních typů newtype VectorArray = array>; @@ -11442,9 +11442,9 @@ function getRoadType() : RoadType // Automatické nastavení proměnných třídy -// +// // Aby se nemuseli definovat proměnné třídy a její konstruktor, -// který pouze nastavuje třídní proměnné, můžeme v Hacku vše +// který pouze nastavuje třídní proměnné, můžeme v Hacku vše // definovat najednou. class ArgumentPromotion { @@ -11472,12 +11472,12 @@ class WithoutArugmentPromotion // Ko-operativní multi-tasking -// +// // Nová klíčová slova "async" and "await" mohou být použité pro spuštění mutli-taskingu // Tato vlastnost ovšem zahrnuje vícevláknové zpracování, pouze povolí řízení přenosu async function cooperativePrint(int $start, int $end) : Awaitable { - for ($i = $start; $i <= $end; $i++) { + for ($i = $start; $i <= $end; $i++) { echo "$i "; // Dává ostatním úlohám šanci něco udělat @@ -11494,8 +11494,8 @@ AwaitAllWaitHandle::fromArray([ // Atributy -// -// Atributy jsou určitou formou metadat pro funkce. Hack přidává některé vestavěné +// +// Atributy jsou určitou formou metadat pro funkce. Hack přidává některé vestavěné // atributy které aktivnují uživatečné chování funkcí. // Speciální atribut __Memoize způsobí, že výsledek funkce je uložen do cache @@ -11549,7 +11549,7 @@ class ConsistentBar extends ConsistentFoo class InvalidFooSubclass extends ConsistentFoo { // Nedodržení zápisu dle rodičovského konstruktoru způsobí syntaktickou chybu: - // + // // "Tento objekt je typu ConsistentBaz a není kompatibilní v tímto objektem, // který je typu ConsistentFoo protože některé jeho metody nejsou kompatibilní." // @@ -11559,7 +11559,7 @@ class InvalidFooSubclass extends ConsistentFoo } // Použitím anotace __Override na nepřetíženou metodu způsobí chybu typové kontroly: - // + // // "InvalidFooSubclass::otherMethod() je označená jako přetížená, ale nebyla nalezena // taková rodičovská metoda, nebo rodič kterého přetěžujete není zapsán v tag? Můžete napsat na konec odstavce dvě nebo více mezer a potom začít nový odstavec. --> -Tento odstavec končí dvěma mezerami. +Tento odstavec končí dvěma mezerami. Nad tímto odstavcem je
    ! @@ -13265,7 +13265,7 @@ div { /*Funkce -==============================*/ +==============================*/ @@ -13273,7 +13273,7 @@ div { /* Funkce se spouštějí pomocí jejich jména, které následuje seznam argumentů uzavřený v kulatých závorkách. */ body { - width: round(10.25px); + width: round(10.25px); } .footer { @@ -13288,7 +13288,7 @@ body { .footer { background-color: rgba(0, 0, 0, 0.75); -} +} /* Můžete také definovat vlastní funkce. Funkce jsou velmi podobné mixinům. Když se snažíte vybrat mezi funkcí a mixinem, mějte na paměti, že mixiny @@ -13420,7 +13420,7 @@ ul li a { /*Částečné soubory a importy -==============================*/ +==============================*/ @@ -13454,7 +13454,7 @@ body { html, body, ul, ol { margin: 0; padding: 0; -} +} body { font-size: 16px; @@ -13464,7 +13464,7 @@ body { /*Zástupné selektory -==============================*/ +==============================*/ @@ -13501,7 +13501,7 @@ body { /*Matematické operace -==============================*/ +==============================*/ @@ -14249,10 +14249,10 @@ on a new line! ""Wow!"", the masses cried"; int _speed; // Everything is private by default: Only accessible from within this class. // can also use keyword private public string Name { get; set; } - + // Properties also have a special syntax for when you want a readonly property // that simply returns the result of an expression - public string LongName => Name + " " + _speed + " speed"; + public string LongName => Name + " " + _speed + " speed"; // Enum is a value type that consists of a set of named constants // It is really just mapping a name to a value (an int, unless specified otherwise). @@ -14609,7 +14609,7 @@ on a new line! ""Wow!"", the masses cried"; // Spell failed return false; } - // Other exceptions, or MagicServiceException where Code is not 42 + // Other exceptions, or MagicServiceException where Code is not 42 catch(Exception ex) when (LogException(ex)) { // Execution never reaches this block @@ -14898,7 +14898,7 @@ selector { border-style:solid; border-color:red; /* similar to how background-color is set */ border: 5px solid red; /* this is a short hand approach for the same */ - border-radius:20px; /* this is a CSS3 property */ + border-radius:20px; /* this is a CSS3 property */ /* Images as backgrounds of elements */ background-image: url(/img-path/img.jpg); /* quotes inside url() optional */ @@ -15129,7 +15129,7 @@ A chain can also be directed. This path describes that **a** is the boss of **b* Patterns often used (from Neo4j doc) : ``` -// Friend-of-a-friend +// Friend-of-a-friend (user)-[:KNOWS]-(friend)-[:KNOWS]-(foaf) // Shortest path @@ -15138,7 +15138,7 @@ path = shortestPath( (user)-[:KNOWS*..5]-(other) ) // Collaborative filtering (user)-[:PURCHASED]->(product)<-[:PURCHASED]-()-[:PURCHASED]->(otherProduct) -// Tree navigation +// Tree navigation (root)<-[:PARENT*]-(leaf:Category)-[:ITEM]->(data:Product) ``` @@ -16205,7 +16205,7 @@ Beinahe alle der folgenden Beispiele können als Teile eines Shell-Skripts oder ```bash #!/bin/bash -# Die erste Zeile des Scripts nennt sich Shebang, dies gibt dem System an, +# Die erste Zeile des Scripts nennt sich Shebang, dies gibt dem System an, # wie das Script ausgeführt werden soll: http://de.wikipedia.org/wiki/Shebang # Du hast es bestimmt schon mitgekriegt, Kommentare fangen mit # an. Das Shebang ist auch ein Kommentar @@ -16220,12 +16220,12 @@ Variable="irgendein String" # Aber nicht so: Variable = "irgendein String" -# Bash wird 'Variable' für einen Befehl halten, den es ausführen soll. Es wird einen Fehler ausgeben, -# weil es den Befehl nicht findet. +# Bash wird 'Variable' für einen Befehl halten, den es ausführen soll. Es wird einen Fehler ausgeben, +# weil es den Befehl nicht findet. # Und so auch nicht: Variable= 'Some string' -# Bash wird 'Variable' wieder für einen Befehl halten, den es ausführen soll. Es wird einen Fehler ausgeben, +# Bash wird 'Variable' wieder für einen Befehl halten, den es ausführen soll. Es wird einen Fehler ausgeben, # Hier wird der Teil 'Variable=' als nur für diesen einen Befehl gültige Zuweisung an die Variable gesehen. # Eine Variable wird so benutzt: @@ -16234,7 +16234,7 @@ echo "$Variable" echo ${Variable} # aber echo '$Variable' -# Wenn du eine Variable selbst benutzt – ihr Werte zuweist, sie exportierst oder irgendetwas anderes –, +# Wenn du eine Variable selbst benutzt – ihr Werte zuweist, sie exportierst oder irgendetwas anderes –, # dann über ihren Namen ohne $. Aber wenn du ihren zugewiesenen Wert willst, dann musst du $ voranstellen. # Beachte: ' (Hochkomma) verhindert das Interpretieren der Variablen @@ -16326,7 +16326,7 @@ 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 -# Die Fehlerausgabe würde die Datei "error.err" überschreiben (falls sie existiert) +# Die Fehlerausgabe würde die Datei "error.err" überschreiben (falls sie existiert) # verwende ">>" um stattdessen anzuhängen: python hello.py >> "output.out" 2>> "error.err" @@ -17697,7 +17697,7 @@ selector { font-family: Arial; font-family: "Courier New"; /* wenn der Name ein Leerzeichen beinhält, kommt er in Anführungszeichen */ - font-family: "Courier New", Trebuchet, Arial; /* wird die erste Schriftart + font-family: "Courier New", Trebuchet, Arial; /* wird die erste Schriftart nicht gefunden, wird die zweite benutzt, usw. */ } @@ -17785,8 +17785,8 @@ vom Projekt unterstützten Browser zu überprüfen. * [Z-Index - The stacking context](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context) --- -language: D -filename: learnd-de.d +language: D +filename: learnd-de.d contributors: - ["Nick Papanastasiou", "www.nickpapanastasiou.github.io"] translators: @@ -17825,7 +17825,7 @@ void main() { } auto n = 1; // auto um den typ vom Compiler bestimmen zu lassen - + // Zahlenliterale können _ verwenden für lesbarkeit while(n < 10_000) { n += n; @@ -17867,7 +17867,7 @@ struct LinkedList(T) { class BinTree(T) { T data = null; - + // Wenn es nur einen T parameter gibt können die Klammern um ihn weggelassen werden BinTree!T left; BinTree!T right; @@ -17933,13 +17933,13 @@ class MyClass(T, U) { class MyClass(T, U) { T _data; U _other; - + // Konstruktoren heißen immer `this` this(T t, U u) { data = t; other = u; } - + // getters @property T data() { return _data; @@ -17949,7 +17949,7 @@ class MyClass(T, U) { return _other; } - // setters + // setters // @property kann genauso gut am ende der Methodensignatur stehen void data(T t) @property { _data = t; @@ -17966,7 +17966,7 @@ void main() { mc.data = 7; mc.other = "seven"; - + writeln(mc.data); writeln(mc.other); } @@ -17995,7 +17995,7 @@ import std.range : iota; // builds an end-exclusive range void main() { // Wir wollen die summe aller quadratzahlen zwischen // 1 und 100 ausgeben. Nichts leichter als das! - + // Einfach eine lambda funktion als template parameter übergeben // Es ist genau so gut möglich eine normale funktion hier zu übergeben // Lambdas bieten sich hier aber an. @@ -18012,7 +18012,7 @@ um num zu berechnen? Das war möglich durch die Uniform Function Call Syntax. Mit UFCS können wir auswählen ob wir eine Funktion als Methode oder als freie Funktion aufrufen. Walters artikel dazu findet ihr -[hier.](http://www.drdobbs.com/cpp/uniform-function-call-syntax/232700394) +[hier.](http://www.drdobbs.com/cpp/uniform-function-call-syntax/232700394) Kurzgesagt kann man Funktionen deren erster parameter vom typ A ist, als Methode auf A anwenden. @@ -18046,16 +18046,16 @@ filename: learnelixir-de.ex lang: de-de --- -Elixir ist eine moderne, funktionale Sprache für die Erlang VM. Sie ist voll -kompatibel mit Erlang, verfügt aber über eine freundlichere Syntax und bringt -viele Features mit. +Elixir ist eine moderne, funktionale Sprache für die Erlang VM. Sie ist voll +kompatibel mit Erlang, verfügt aber über eine freundlichere Syntax und bringt +viele Features mit. ```ruby # Einzeilige Kommentare werden mit der Raute gesetzt. # Es gibt keine mehrzeiligen Kommentare; -# es ist aber problemlos möglich mehrere einzeilige Kommentare hintereinander +# es ist aber problemlos möglich mehrere einzeilige Kommentare hintereinander # zu setzen (so wie hier). # Mit 'iex' ruft man die Elixir-Shell auf. @@ -18073,7 +18073,7 @@ viele Features mit. 0x1F # Integer 3.0 # Float -# Atome, das sind Literale, sind Konstanten mit Namen. Sie starten mit einem +# Atome, das sind Literale, sind Konstanten mit Namen. Sie starten mit einem # ':'. :hello # Atom @@ -18098,13 +18098,13 @@ rest # => [2, 3] # Auf diese Weise kann im Beispiel oben auf Kopf und Rest der Liste zugegriffen # werden. -# Ein Musterabgleich wird einen Fehler werfen, wenn die beiden Seiten nicht -# zusammenpassen. +# Ein Musterabgleich wird einen Fehler werfen, wenn die beiden Seiten nicht +# zusammenpassen. # Im folgenden Beispiel haben die Tupel eine unterschiedliche Anzahl an # Elementen: {a, b, c} = {1, 2} #=> ** (MatchError) no match of right hand side value: {1,2} -# Es gibt außerdem 'binaries', +# Es gibt außerdem 'binaries', <<1,2,3>> # binary. # Strings und 'char lists' @@ -18113,7 +18113,7 @@ rest # => [2, 3] # ... und mehrzeilige Strings """ -Ich bin ein +Ich bin ein mehrzeiliger String. """ #=> "Ich bin ein\nmehrzeiliger String.\n" @@ -18155,12 +18155,12 @@ div(10, 2) #=> 5 rem(10, 3) #=> 1 # Natürlich gibt es auch Operatoren für Booleans: 'or', 'and' und 'not'. Diese -# Operatoren erwarten einen Boolean als erstes Argument. +# Operatoren erwarten einen Boolean als erstes Argument. true and true #=> true false or true #=> true # 1 and true #=> ** (ArgumentError) argument error -# Elixir bietet auch '||', '&&' und '!', die Argumente jedweden Typs +# Elixir bietet auch '||', '&&' und '!', die Argumente jedweden Typs # akzeptieren. Alle Werte außer 'false' und 'nil' werden zu wahr evaluiert. 1 || true #=> 1 false && 1 #=> false @@ -18169,7 +18169,7 @@ nil && 20 #=> nil !true #=> false # Für Vergleiche gibt es die Operatoren `==`, `!=`, `===`, `!==`, `<=`, `>=`, -# `<` und `>` +# `<` und `>` 1 == 1 #=> true 1 != 1 #=> false 1 < 2 #=> true @@ -18185,7 +18185,7 @@ nil && 20 #=> nil # number < atom < reference < functions < port < pid < tuple < list < bitstring # Um Joe Armstrong zu zitieren: "The actual order is not important, but that a -# total ordering is well defined is important." +# total ordering is well defined is important." ## --------------------------- ## -- Kontrollstrukturen @@ -18239,7 +18239,7 @@ cond do "Aber ich!" end -# Es ist üblich eine letzte Bedingung einzufügen, die immer zu wahr evaluiert. +# Es ist üblich eine letzte Bedingung einzufügen, die immer zu wahr evaluiert. cond do 1 + 1 == 3 -> "Ich werde nie aufgerufen." @@ -18382,7 +18382,7 @@ joe_info.name #=> "Joe" joe_info = joe_info.age(31) #=> Person[name: "Joe", age: 31, height: 180] # Der 'try'-Block wird zusammen mit dem 'rescue'-Schlüsselwort dazu verwendet, -# um Ausnahmen beziehungsweise Fehler zu behandeln. +# um Ausnahmen beziehungsweise Fehler zu behandeln. try do raise "Irgendein Fehler." rescue @@ -18404,7 +18404,7 @@ end # Elixir beruht auf dem Aktoren-Model zur Behandlung der Nebenläufigkeit. Alles # was man braucht um in Elixir nebenläufige Programme zu schreiben sind drei -# Primitive: Prozesse erzeugen, Nachrichten senden und Nachrichten empfangen. +# Primitive: Prozesse erzeugen, Nachrichten senden und Nachrichten empfangen. # Um einen neuen Prozess zu erzeugen nutzen wir die 'spawn'-Funktion, die # wiederum eine Funktion als Argument entgegen nimmt. @@ -18412,9 +18412,9 @@ f = fn -> 2 * 2 end #=> #Function spawn(f) #=> #PID<0.40.0> # 'spawn' gibt eine pid (einen Identifikator des Prozesses) zurück. Diese kann -# nun verwendet werden, um Nachrichten an den Prozess zu senden. Um +# nun verwendet werden, um Nachrichten an den Prozess zu senden. Um # zu senden nutzen wir den '<-' Operator. Damit das alles Sinn macht müssen wir -# in der Lage sein Nachrichten zu empfangen. Dies wird mit dem +# in der Lage sein Nachrichten zu empfangen. Dies wird mit dem # 'receive'-Mechanismus sichergestellt: defmodule Geometry do def area_loop do @@ -18465,7 +18465,7 @@ translators: lang: de-de --- -Git ist eine verteilte Versions- und Quellcodeverwaltung. +Git ist eine verteilte Versions- und Quellcodeverwaltung. Es nimmt Schnappschüsse der Projekte, um mit diesen Schnappschüssen verschiedene Versionen unterscheiden und den Quellcode verwalten zu können. @@ -18527,7 +18527,7 @@ Ein Branch, ein Ast oder Zweig, ist im Kern ein Pointer auf den letzten Commit, ### HEAD und head (Teil des .git-Verzeichnisses) -HEAD ist ein Pointer auf den aktuellen Branch. Ein Repository hat nur einen *aktiven* HEAD. +HEAD ist ein Pointer auf den aktuellen Branch. Ein Repository hat nur einen *aktiven* HEAD. Ein *head* ist ein Pointer, der auf einen beliebigen Commit zeigt. Ein Repository kann eine beliebige Zahl von *heads* enthalten. @@ -18702,7 +18702,7 @@ $ git config --global alias.g "grep --break --heading --line-number" $ git grep 'variableName' -- '*.java' # Suche nach eine Zeile, die "arrayListName" und "add" oder "remove" enthält -$ git grep -e 'arrayListName' --and \( -e add -e remove \) +$ git grep -e 'arrayListName' --and \( -e add -e remove \) ``` Google ist dein Freund; für mehr Beispiele: @@ -18737,7 +18737,7 @@ $ git merge --no-ff branchName ### mv -Eine Datei umbenennen oder verschieben. +Eine Datei umbenennen oder verschieben. ```bash # Umbenennen @@ -18779,7 +18779,7 @@ Führe einen Push, ein Hochladen, und einen Merge von Änderungen eines remote-B $ git push origin master ``` -### rebase (mit Vorsicht einsetzen) +### rebase (mit Vorsicht einsetzen) Nimm alle Änderungen, die in einem Branch durch Commits vorgenommen wurden, und übertrage sie auf einen anderen Branch. Achtung: Führe keinen Rebase von Commits durch, die auf ein öffentliches Repo gepusht wurden. @@ -19545,11 +19545,11 @@ $ haml input_file.haml output_file.html %h1 Headline copy / Mehrzeilige Inhalte müssen stattdessen eingerückt werden: -%p +%p This is a lot of content that we could probably split onto two separate lines. -/ +/ HTML kann mit &= escaped werden. So werden HTML-sensitive Zeichen enkodiert. Zum Beispiel: @@ -20621,7 +20621,7 @@ class Hochrad extends Fahrrad { public interface Essbar { public void essen(); // Jede Klasse, die dieses Interface implementiert // muss auch diese Methode implementieren. -} +} public interface Verdaulich { @@ -20714,19 +20714,19 @@ Dabei ist JavaScript inzwischen nicht mehr auf Browser beschränkt: Node.js, ein Feedback ist herzlich Willkommen! Der ursprüngliche Autor ist unter [@adambrenecki](https://twitter.com/adambrenecki) oder [adam@brenecki.id.au](mailto:adam@brenecki.id.au) zu erreichen. Der Übersetzer unter [gregorbg@web.de](mailto:gregorbg@web.de). ```js -// Kommentare werden wie in C gesetzt: Einzeilige Kommentare starten mit zwei +// Kommentare werden wie in C gesetzt: Einzeilige Kommentare starten mit zwei // Slashes -/* während mehrzeilige Kommentare mit einem +/* während mehrzeilige Kommentare mit einem Slash und einem Stern anfangen und enden */ // Statements können mit einem Semikolon beendet werden machWas(); -// ...müssen sie aber nicht, weil Semikola automatisch eingefügt werden, wenn +// ...müssen sie aber nicht, weil Semikola automatisch eingefügt werden, wenn // eine neue Zeile beginnt, abgesehen von einigen Ausnahmen. machWas() -// Obwohl wir uns für den Anfang nicht um diese Ausnahmen kümmern müssen ist +// Obwohl wir uns für den Anfang nicht um diese Ausnahmen kümmern müssen ist // es besser die Semikola immer zu setzen. /////////////////////////////////// @@ -20745,8 +20745,8 @@ machWas() // Division funktioniert auch mit einem Ergebnis nach dem Komma. 5 / 2; // = 2.5 -// Bit-weise Operationen sind auch möglich; wenn eine Bit-weise Operation -// ausgeführt wird, wird die Fließkomma-Zahl in einen 32-bit Integer (mit +// Bit-weise Operationen sind auch möglich; wenn eine Bit-weise Operation +// ausgeführt wird, wird die Fließkomma-Zahl in einen 32-bit Integer (mit // Vorzeichen) umgewandelt. 1 << 2; // = 4 @@ -20784,7 +20784,7 @@ false; 2 <= 2; // = true 2 >= 2; // = true -// Strings können mit + verbunden +// Strings können mit + verbunden "Hello " + "world!"; // = "Hello world!" // und mit < und > verglichen werden. @@ -20796,7 +20796,7 @@ false; // ...solange man nicht === verwendet. "5" === 5; // = false -// Auf einzelne Buchstaben innerhalb eines Strings kann mit der Methode +// Auf einzelne Buchstaben innerhalb eines Strings kann mit der Methode // 'charAt' zugegriffen werden "This is a string".charAt(0); // = "T" @@ -20808,17 +20808,17 @@ false; // Es gibt außerdem die Werte 'null' und 'undefined' null; // wird verwendet um einen vorsätzlich gewählten 'Nicht'-Wert anzuzeigen -undefined; // wird verwendet um anzuzeigen, dass der Wert (aktuell) nicht - // verfügbar ist (obwohl genau genommen undefined selbst einen Wert +undefined; // wird verwendet um anzuzeigen, dass der Wert (aktuell) nicht + // verfügbar ist (obwohl genau genommen undefined selbst einen Wert // darstellt) -// false, null, undefined, NaN, 0 und "" sind 'falsy', d. h. alles andere ist +// false, null, undefined, NaN, 0 und "" sind 'falsy', d. h. alles andere ist // wahr. Man beachte, dass 0 falsch und "0" wahr ist, obwohl 0 == "0". /////////////////////////////////// // 2. Variablen, Arrays und Objekte -// Variablen werden mit dem Schlüsselwort 'var' und einem frei wählbaren +// Variablen werden mit dem Schlüsselwort 'var' und einem frei wählbaren // Bezeichner deklariert. JavaScript ist dynamisch typisiert, so dass man einer // Variable keinen Typ zuweisen muss. Die Zuweisung verwendet ein einfaches =. var einWert = 5; @@ -20833,12 +20833,12 @@ einAndererWert = 10; // Wert 'undefined'. var einDritterWert; // = undefined -// Es existiert eine Kurzform, um mathematische Operationen mit Variablen +// Es existiert eine Kurzform, um mathematische Operationen mit Variablen // auszuführen: einWert += 5; // äquivalent zu einWert = einWert + 5; einWert ist nun also 10 einWert *= 10; // einWert ist nach dieser Operation 100 -// Und es existiert eine weitere, sogar noch kürzere Form, um 1 zu addieren +// Und es existiert eine weitere, sogar noch kürzere Form, um 1 zu addieren // oder zu subtrahieren einWert++; // nun ist einWert 101 einWert--; // wieder 100 @@ -20847,7 +20847,7 @@ einWert--; // wieder 100 var myArray = ["Hello", 45, true]; // Auf einzelne Elemente eines Arrays kann zugegriffen werden, in dem der Index -// in eckigen Klammern hinter das Array geschrieben werden. Die Indexierung +// in eckigen Klammern hinter das Array geschrieben werden. Die Indexierung // beginnt bei 0. myArray[1]; // = 45 @@ -20858,11 +20858,11 @@ myArray.length; // = 4 // und sind veränderlich myArray[3] = "Hello"; -// Die Objekte in JavaScript entsprechen 'dictionaries' oder 'maps' in anderen +// Die Objekte in JavaScript entsprechen 'dictionaries' oder 'maps' in anderen // Sprachen: es handelt sich um ungeordnete Schlüssel-Wert-Paare. var myObj = { key1: "Hello", key2: "World" }; -// Schlüssel sind Strings, aber es werden keine Anführungszeichen benötigt, +// Schlüssel sind Strings, aber es werden keine Anführungszeichen benötigt, // sofern es sich um reguläre JavaScript-Bezeichner handelt. Werte können von // jedem Typ sein. var myObj = { myKey: "myValue", "my other key": 4 }; @@ -20871,15 +20871,15 @@ var myObj = { myKey: "myValue", "my other key": 4 }; // werden, myObj["my other key"]; // = 4 -// ... oder in dem man die Punkt-Notation verwendet, vorausgesetzt es handelt +// ... oder in dem man die Punkt-Notation verwendet, vorausgesetzt es handelt // sich bei dem Schlüssel um einen validen Bezeichner. myObj.myKey; // = "myValue" -// Objekte sind veränderlich, Werte können verändert und neue Schlüssel +// Objekte sind veränderlich, Werte können verändert und neue Schlüssel // hinzugefügt werden. myObj.myThirdKey = true; -// Der Zugriff auf einen noch nicht definierten Schlüssel, liefert ein +// Der Zugriff auf einen noch nicht definierten Schlüssel, liefert ein // undefined. myObj.myFourthKey; // = undefined @@ -20901,7 +20901,7 @@ while (true) { // Eine unendliche Schleife! } -// Do-while-Scheifen arbeiten wie while-Schleifen, abgesehen davon, dass sie +// Do-while-Scheifen arbeiten wie while-Schleifen, abgesehen davon, dass sie // immer mindestens einmal ausgeführt werden. var input; do { @@ -20909,7 +20909,7 @@ do { } while ( !isValid( input ) ) // Die for-Schleife arbeitet genau wie in C und Java: -// Initialisierung; Bedingung, unter der die Ausführung fortgesetzt wird; +// Initialisierung; Bedingung, unter der die Ausführung fortgesetzt wird; // Iteration. for ( var i = 0; i < 5; i++ ) { // wird 5-mal ausgeführt @@ -20925,7 +20925,7 @@ if (colour == "red" || colour == "blue"){ } // Die Auswertung von '&&' und '||' erfolgt so, dass abgebrochen wird, wenn die -// Bedingung erfüllt ist (bei oder) oder nicht-erfüllt ist (bei und). Das ist +// Bedingung erfüllt ist (bei oder) oder nicht-erfüllt ist (bei und). Das ist // nützlich, um einen Default-Wert zu setzen. var name = otherName || "default"; @@ -20970,8 +20970,8 @@ function myFunction() } myFunction(); // = undefined -// In JavaScript sind Funktionen 'Bürger erster Klasse', also können sie wie -// Variablen verwendet und als Parameter anderen Funktionen übergeben werden +// In JavaScript sind Funktionen 'Bürger erster Klasse', also können sie wie +// Variablen verwendet und als Parameter anderen Funktionen übergeben werden // - zum Beispiel, um einen 'event handler' zu 'beliefern'. function myFunction() { // wird ausgeführt, nachdem 5 Sekunden vergangen sind @@ -20979,36 +20979,36 @@ function myFunction() { setTimeout(myFunction, 5000); // Funktionen können auch deklariert werden, ohne ihnen einen Namen zuzuweisen. -// Es ist möglich diese anonymen Funktionen direkt als (oder im) Argument +// Es ist möglich diese anonymen Funktionen direkt als (oder im) Argument // einer anderen Funktion zu definieren. setTimeout(function(){ // wird ausgeführt, nachdem 5 Sekunden vergangen sind }, 5000); -// JavaScript hat einen Geltungsbereich, der sich auf Funktionen erstreckt: +// JavaScript hat einen Geltungsbereich, der sich auf Funktionen erstreckt: // Funktionen haben ihren eigenen Geltungsbereich, andere Blöcke nicht. if(true) { var i = 5; } -i; // = 5 - nicht undefined, wie man es von einer Sprache erwarten würde, die +i; // = 5 - nicht undefined, wie man es von einer Sprache erwarten würde, die // ihren Geltungsbereich nach Blöcken richtet -// Daraus ergibt sich ein bestimmtes Muster für sofort-ausführbare, anonyme +// Daraus ergibt sich ein bestimmtes Muster für sofort-ausführbare, anonyme // Funktionen, die es vermeiden, dass der globale Geltungsbereich von Variablen // 'verschmutzt' wird. (function(){ var temporary = 5; - // Auf eine Variable im globalen Geltungsbereich kann zugegriffen werden, - // sofern sie im globalen Objekt definiert ist (in einem Webbrowser ist - // dies immer das 'window'-Objekt, in anderen Umgebungen, bspw. Node.js, - // kann das anders aussehen). + // Auf eine Variable im globalen Geltungsbereich kann zugegriffen werden, + // sofern sie im globalen Objekt definiert ist (in einem Webbrowser ist + // dies immer das 'window'-Objekt, in anderen Umgebungen, bspw. Node.js, + // kann das anders aussehen). window.permanent = 10; })(); temporary; // wirft einen ReferenceError permanent; // = 10 -// Eines der mächtigsten Charakteristika von JavaScript sind Closures. Wird -// eine Funktion innerhalb einer anderen Funktion definiert, dann hat die +// Eines der mächtigsten Charakteristika von JavaScript sind Closures. Wird +// eine Funktion innerhalb einer anderen Funktion definiert, dann hat die // innere Funktion Zugriff auf alle Variablen der äußeren Funktion, sogar dann, // wenn die äußere Funktion beendet wurde. function sayHelloInFiveSeconds(name){ @@ -21017,13 +21017,13 @@ function sayHelloInFiveSeconds(name){ alert(prompt); } setTimeout(inner, 5000); - // setTimeout wird asynchron ausgeführt. Also wird sayHelloInFiveSeconds - // sofort verlassen und setTimeout wird die innere Funktion 'im nachhinein' - // aufrufen. Dennoch: Weil sayHelloInFiveSeconds eine Hülle um die innere - // Funktion bildet, hat die innere Funktion immer noch Zugriff auf die + // setTimeout wird asynchron ausgeführt. Also wird sayHelloInFiveSeconds + // sofort verlassen und setTimeout wird die innere Funktion 'im nachhinein' + // aufrufen. Dennoch: Weil sayHelloInFiveSeconds eine Hülle um die innere + // Funktion bildet, hat die innere Funktion immer noch Zugriff auf die // Variable prompt. } -sayHelloInFiveSeconds("Adam"); // wird nach 5 Sekunden ein Popup mit der +sayHelloInFiveSeconds("Adam"); // wird nach 5 Sekunden ein Popup mit der // Nachricht "Hello, Adam!" öffnen. /////////////////////////////////// @@ -21037,7 +21037,7 @@ var myObj = { }; myObj.myFunc(); // = "Hello world!" -// Wenn Funktionen aufgerufen werden, die zu einem Objekt gehören, können sie +// Wenn Funktionen aufgerufen werden, die zu einem Objekt gehören, können sie // auf das eigene Objekt mit dem Schlüsselwort 'this' zugreifen. myObj = { myString: "Hello world!", @@ -21047,14 +21047,14 @@ myObj = { }; myObj.myFunc(); // = "Hello world!" -// Worauf 'this' gesetzt wird, ist davon abhängig, wie die Funktion aufgerufen -// wird, nicht wo sie definiert wurde. Unsere Funktion wird daher nicht -// funktionieren, sofern sie außerhalb des Kontextes des Objekts aufgerufen +// Worauf 'this' gesetzt wird, ist davon abhängig, wie die Funktion aufgerufen +// wird, nicht wo sie definiert wurde. Unsere Funktion wird daher nicht +// funktionieren, sofern sie außerhalb des Kontextes des Objekts aufgerufen // wird. var myFunc = myObj.myFunc; myFunc(); // = undefined -// Umgekehrt ist es möglich eine Funktion einem Objekt zuzuweisen und dadurch +// Umgekehrt ist es möglich eine Funktion einem Objekt zuzuweisen und dadurch // Zugriff auf den this-Kontext zu erhalten, sogar dann, wenn die Funktion dem // Objekt nach dessen Definition zugewiesen wird. var myOtherFunc = function(){ @@ -21094,8 +21094,8 @@ var product = function(a, b){ return a * b; } var doubler = product.bind(this, 2); doubler(8); // = 16 -// Wenn eine Funktion mit dem Schlüsselwort 'new' aufgerufen wird, dann wird -// ein neues Objekt erzeugt. Funktionen, die darauf ausgelegt sind in dieser +// Wenn eine Funktion mit dem Schlüsselwort 'new' aufgerufen wird, dann wird +// ein neues Objekt erzeugt. Funktionen, die darauf ausgelegt sind in dieser // Art aufgerufen zu werden, werden Konstruktoren genannt. var MyConstructor = function(){ this.myNumber = 5; @@ -21103,14 +21103,14 @@ var MyConstructor = function(){ myNewObj = new MyConstructor(); // = {myNumber: 5} myNewObj.myNumber; // = 5 -// Jedes JavaScript-Objekt hat einen Prototyp. Wenn man versucht auf eine +// Jedes JavaScript-Objekt hat einen Prototyp. Wenn man versucht auf eine // Eigenschaft des Objekts zuzugreifen, das nicht im Objekt selbst existiert, // schaut der Interpreter in dessen Prototyp nach. -// Einige JavaScript-Implementierungen erlauben den direkten Zugriff auf den +// Einige JavaScript-Implementierungen erlauben den direkten Zugriff auf den // Prototyp eines Objekts durch die magische Eigenschaft __proto__. Obwohl das // nützlich ist, um Prototypen im Allgemeinen zu erklären, ist das nicht Teil -// des Standards; zum Standard-Weg der Nutzung von Prototypen kommen wir +// des Standards; zum Standard-Weg der Nutzung von Prototypen kommen wir // später. var myObj = { myString: "Hello world!", @@ -21135,26 +21135,26 @@ myPrototype.__proto__ = { myObj.myBoolean; // = true // Dafür wird nichts hin und her kopiert; jedes Objekt speichert eine Referenz -// auf seinen Prototypen. Das heißt wenn der Prototyp geändert wird, dann +// auf seinen Prototypen. Das heißt wenn der Prototyp geändert wird, dann // werden die Änderungen überall sichtbar. myPrototype.meaningOfLife = 43; myObj.meaningOfLife; // = 43 -// Es wurde bereits erwähnt, dass __proto__ nicht zum Standard gehört und es +// Es wurde bereits erwähnt, dass __proto__ nicht zum Standard gehört und es // gibt ebenso keinen Standard-Weg, um den Prototyp eines existierenden Objekts -// zu ändern. Es gibt dennoch zwei Wege, wie man ein neues Objekt mit einem +// zu ändern. Es gibt dennoch zwei Wege, wie man ein neues Objekt mit einem // gegebenen Prototypen erzeugt. // Der erste Weg ist die Methode Object.create, die eine jüngere Ergänzung des -// JavaScript-Standards ist und daher noch nicht in allen Implementierungen +// JavaScript-Standards ist und daher noch nicht in allen Implementierungen // verfügbar. var myObj = Object.create(myPrototype); myObj.meaningOfLife; // = 43 -// Der zweite Weg, der immer funktioniert, hat mit den Konstruktoren zu tun. +// Der zweite Weg, der immer funktioniert, hat mit den Konstruktoren zu tun. // Konstruktoren haben eine Eigenschaft, die Prototyp heißt. Dabei handelt es // sich *nicht* um den Prototypen der Konstruktor-Funktion; stattdessen handelt -// es sich um den Prototypen, der einem neuen Objekt mitgegeben wird, wenn es +// es sich um den Prototypen, der einem neuen Objekt mitgegeben wird, wenn es // mit dem Konstruktor und dem Schlüsselwort 'new' erzeugt wird. MyConstructor.prototype = { getMyNumber: function(){ @@ -21164,8 +21164,8 @@ MyConstructor.prototype = { var myNewObj2 = new MyConstructor(); myNewObj2.getMyNumber(); // = 5 -// Alle primitiven Typen, also strings und numbers, haben auch Konstruktoren, -// die zu dem Typ äquivalente Wrapper-Objekte erzeugen. +// Alle primitiven Typen, also strings und numbers, haben auch Konstruktoren, +// die zu dem Typ äquivalente Wrapper-Objekte erzeugen. var myNumber = 12; var myNumberObj = new Number(12); myNumber == myNumberObj; // = true @@ -21178,8 +21178,8 @@ if (0){ // Dieser Teil wird nicht ausgeführt, weil 0 'falsy' ist. } -// Das Wrapper-Objekt und die regulären, eingebauten Typen, teilen sich einen -// Prototyp; so ist es möglich zum Beispiel einem String weitere Funktionen +// Das Wrapper-Objekt und die regulären, eingebauten Typen, teilen sich einen +// Prototyp; so ist es möglich zum Beispiel einem String weitere Funktionen // hinzuzufügen. String.prototype.firstCharacter = function(){ return this.charAt(0); @@ -21187,11 +21187,11 @@ String.prototype.firstCharacter = function(){ "abc".firstCharacter(); // = "a" // Diese Tatsache wird häufig bei einer Methode mit dem Namen 'polyfilling' -// verwendet: Dabei wird ein neues Feature von JavaScript in einer älteren -// Untermenge der Sprache integriert, so dass bestimmte Funktionen auch in +// verwendet: Dabei wird ein neues Feature von JavaScript in einer älteren +// Untermenge der Sprache integriert, so dass bestimmte Funktionen auch in // älteren Umgebungen und Browsern verwendet werden können. -// Ein Beispiel: Es wurde erwähnt, dass die Methode Object.create nicht in +// Ein Beispiel: Es wurde erwähnt, dass die Methode Object.create nicht in // allen Umgebungen verfügbar ist - wir können sie dennoch verwenden, mit einem // 'polyfill': if (Object.create === undefined){ // überschreib nichts, was eventuell bereits @@ -21201,7 +21201,7 @@ if (Object.create === undefined){ // überschreib nichts, was eventuell bereits // Prototypen var Constructor = function(){}; Constructor.prototype = proto; - // verwende es dann, um ein neues Objekt mit einem passenden + // verwende es dann, um ein neues Objekt mit einem passenden // Prototypen zurückzugeben return new Constructor(); } @@ -21212,7 +21212,7 @@ if (Object.create === undefined){ // überschreib nichts, was eventuell bereits Das [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript) bietet eine ausgezeichnete Dokumentation für die Verwendung von JavaScript im Browser. Es ist außerdem ein Wiki und ermöglicht es damit anderen zu helfen, wenn man selbst ein wenig Wissen angesammelt hat. -MDN's [A re-introduction to JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript) führt sehr viele der hier vorgestellten Konzepte im Detail aus. +MDN's [A re-introduction to JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript) führt sehr viele der hier vorgestellten Konzepte im Detail aus. Dieses Tutorial hat nur die Sprache JavaScript vorgestellt; um mehr über den Einsatz in Websites zu lernen, ist es ein guter Start etwas über das [Document Object Model](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core) zu lernen. @@ -21244,7 +21244,7 @@ selbsterklärend. ```json { "schlüssel": "wert", - + "alle schlüssel": "müssen durch doppelte Anführungszeichen begrenzt werden", "zahlen": 0, "zeichenketten": "Alle Unicode-Zeichen (inklusive \"escaping\") sind erlaubt.", @@ -21274,12 +21274,12 @@ selbsterklärend. [0, 0, 0, 1] ] ], - + "alternative formatierung": { "kommentar": "..." , "die position": "des Kommas ist nicht relevant - so lange es vor dem Wert steht." , "weiterer kommentar": "wie schön" - , "übrigens": "Auch die Einrückung ist nicht relevant." + , "übrigens": "Auch die Einrückung ist nicht relevant." , "jede": "beliebige Anzahl von Leerzeichen / Tabs ist erlaubt.", "wirklich?":true }, @@ -21475,7 +21475,7 @@ Wir können Tabellen genauso wie Grafiken einfügen. \begin{table}[H] \caption{Überschrift der Tabelle.} % Die {} Argumente geben an, wie eine Zeile der Tabelle dargestellt werden soll. - % Auch hier muss ich jedes Mal nachschauen. Jedes. einzelne. Mal. + % Auch hier muss ich jedes Mal nachschauen. Jedes. einzelne. Mal. \begin{tabular}{c|cc} Nummer & Nachname & Vorname \\ % Spalten werden durch & getrennt \hline % Eine horizontale Linie @@ -21555,7 +21555,7 @@ lang: de-de num = 42 -- Alle Nummern sind vom Typ: Double. -- Werd nicht nervös, 64-Bit Double haben 52 Bits zum Speichern von exakten --- Ganzzahlen; Maschinen-Genauigkeit ist kein Problem für Ganzzahlen kleiner als +-- Ganzzahlen; Maschinen-Genauigkeit ist kein Problem für Ganzzahlen kleiner als -- 52 Bit. s = 'walternate' -- Zeichenketten sind unveränderlich, wie bei Python. @@ -22018,7 +22018,7 @@ file2.txt file3.txt: file0.txt file1.txt touch file3.txt # Make wird sich beschweren wenn es mehrere Rezepte für die gleiche Regel gibt. -# Leere Rezepte zählen nicht und können dazu verwendet werden weitere +# Leere Rezepte zählen nicht und können dazu verwendet werden weitere # Voraussetzungen hinzuzufügen. #----------------------------------------------------------------------- @@ -22295,7 +22295,7 @@ Jetzt ist das dann Nummer drei! -Ich höre mit zwei Leerzeichen auf (markiere mich, und du siehst es). +Ich höre mit zwei Leerzeichen auf (markiere mich, und du siehst es). Über mir ist wohl ein
    ! @@ -22661,7 +22661,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. """ @@ -22927,7 +22927,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: @@ -23102,7 +23102,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 @@ -24408,126 +24408,126 @@ filename: ruby-ecosystem-de.txt lang: de-de --- -Hier gibt es einen Überblick über die gängigsten Tools zur Verwaltung -von verschiedenen Ruby Versionen, Gems und Dependencies. +Hier gibt es einen Überblick über die gängigsten Tools zur Verwaltung +von verschiedenen Ruby Versionen, Gems und Dependencies. ## Ruby Managers -Einige Betriebssysteme haben bereits eine Ruby Version vorinstalliert -oder bieten sie als Package zum Download an. Die meisten Rubyisten -benutzen diese aber eher nicht und wenn, dann um damit einen Ruby -Manager zu installieren. Damit kann man komfortabel zwischen den -verschiedenen Versionen hin und herspringen. +Einige Betriebssysteme haben bereits eine Ruby Version vorinstalliert +oder bieten sie als Package zum Download an. Die meisten Rubyisten +benutzen diese aber eher nicht und wenn, dann um damit einen Ruby +Manager zu installieren. Damit kann man komfortabel zwischen den +verschiedenen Versionen hin und herspringen. Dies sind die beliebtesten: * [RVM](https://rvm.io/) - Installiert und wechselt zwischen rubies - RVM kennt verschiedene Ruby Versionen und hat das Konzept der gemsets, - um gem Abhängigkeiten pro Projekt zu managen. -* [ruby-build](https://github.com/sstephenson/ruby-build) + RVM kennt verschiedene Ruby Versionen und hat das Konzept der gemsets, + um gem Abhängigkeiten pro Projekt zu managen. +* [ruby-build](https://github.com/sstephenson/ruby-build) Installiert nur rubies, kann diese aber sehr gut verwalten * [rbenv](https://github.com/sstephenson/rbenv) - Wechselt Ruby Versionen. - Wird zusammen mit ruby-build benutzt. Hiermit kann man kontrollieren, + Wird zusammen mit ruby-build benutzt. Hiermit kann man kontrollieren, wie rubies laden. * [chruby](https://github.com/postmodern/chruby) - Wechselt Ruby Versionen. Ähnlich rbenv. ## Ruby Versionen -Ruby wurde von Yukihiro "Matz" Matsumoto vor gut 20 Jahren veröffentlicht. -Matz ist nach wie vor in die Entwicklung involviert. Daher kommt auch der -Name der Referenzimplementierung: MRI (Matz' Reference Implementation). +Ruby wurde von Yukihiro "Matz" Matsumoto vor gut 20 Jahren veröffentlicht. +Matz ist nach wie vor in die Entwicklung involviert. Daher kommt auch der +Name der Referenzimplementierung: MRI (Matz' Reference Implementation). -Die aktuellste Version ist **2.2.3** und wurde im August 2015 veröffentlicht! +Die aktuellste Version ist **2.2.3** und wurde im August 2015 veröffentlicht! Hier eine kurze Versionshistorie: * 2.0.0 - Release im Februar 2013 -- Release zum 20. Geburtstag der Sprache [Rubies are forever](http://www.heise.de/developer/artikel/Ruby-2-0-als-Geschenk-zum-20-Geburtstag-1808109.html) -* 1.9.3 - Release im Oktober 2011 +* 1.9.3 - Release im Oktober 2011 [End of Life](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/) -* 1.8.7 - Release im Juni 2006 +* 1.8.7 - Release im Juni 2006 [End of Life](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/). -Die Veränderung zwischen 1.8.7 und 1.9.x war sehr groß und eine Migration -nicht so einfach möglich. Der Versionssprung auf 2.0.0 war verglichen dazu -weit weniger dramatisch. -Beispielsweise hat 1.9. Encodings und eine Bytecode VM eingeführt. -Es gibt immer noch Projekte die auf der stabilen Version 1.8.7 laufen, -aber diese sind mittlerweile in der Minderheit. Die meisten Projekte +Die Veränderung zwischen 1.8.7 und 1.9.x war sehr groß und eine Migration +nicht so einfach möglich. Der Versionssprung auf 2.0.0 war verglichen dazu +weit weniger dramatisch. +Beispielsweise hat 1.9. Encodings und eine Bytecode VM eingeführt. +Es gibt immer noch Projekte die auf der stabilen Version 1.8.7 laufen, +aber diese sind mittlerweile in der Minderheit. Die meisten Projekte laufen auf 1.9.x oder auf 2.x. ## Ruby Implementierungen -Das Ruby Ecosystem beinhaltet viele verschiedene Implementierungen von Ruby, -jedes mit seinen eigenen Vorteilen und verschiedenen Graden von -Kompatibilität. Auch wenn alle diese Implementierungen in verschiedenen -Sprachen geschrieben sind, sind sie doch **alle Ruby**. -Jede Implementierung bietet neben ihren speziellen Features immer auch +Das Ruby Ecosystem beinhaltet viele verschiedene Implementierungen von Ruby, +jedes mit seinen eigenen Vorteilen und verschiedenen Graden von +Kompatibilität. Auch wenn alle diese Implementierungen in verschiedenen +Sprachen geschrieben sind, sind sie doch **alle Ruby**. +Jede Implementierung bietet neben ihren speziellen Features immer auch die Möglichkeit normale ruby Dateien auszuführen. Am ausgereiftesten und stabilsten: * [MRI](https://github.com/ruby/ruby) - Geschrieben in C, das ist die Referenz Implementierung. - Sie ist 100% kompatibel (mit sich selbst ;-). Alle anderen rubies + Sie ist 100% kompatibel (mit sich selbst ;-). Alle anderen rubies bleiben kompatibel mit MRI (siehe [RubySpec](#rubyspec) weiter unten). * [JRuby](http://jruby.org/) - Geschrieben in Java and Ruby, Robust und ziemlich schnell. - Der größte Vorteil von JRuby ist die Interoperabilität mit JVM/Java und damit die + Der größte Vorteil von JRuby ist die Interoperabilität mit JVM/Java und damit die Benutzung von Ruby im Java Ecosystem. -* [Rubinius](http://rubini.us/) - Geschrieben in Ruby mit C++ bytecode VM. - Auch sehr ausgereift und schnell. +* [Rubinius](http://rubini.us/) - Geschrieben in Ruby mit C++ bytecode VM. + Auch sehr ausgereift und schnell. Mittel ausgereift / kompatibel: * [Maglev](http://maglev.github.io/) - Baut auf Gemstone, ein Smalltalk VM. - Dieses Projekt versucht das großartige Smalltalk Tooling in die Ruby Welt + Dieses Projekt versucht das großartige Smalltalk Tooling in die Ruby Welt zu bringen. * [RubyMotion](http://www.rubymotion.com/) - Ruby in der iOS Entwicklung. Weniger ausgereift/kompatibel: * [Topaz](http://topazruby.com/) - Geschrieben in RPython (via PyPy) - Topaz ist noch ziemlich jung und versucht die schnellste Implementierung + Topaz ist noch ziemlich jung und versucht die schnellste Implementierung zu werden. -* [IronRuby](http://ironruby.net/) - Geschrieben in C# für die .NET Plaftform - Das letzte Release von IronRuby ist mittlerweile 5 Jahre her. +* [IronRuby](http://ironruby.net/) - Geschrieben in C# für die .NET Plaftform + Das letzte Release von IronRuby ist mittlerweile 5 Jahre her. -Die Ruby Implementierungen haben ihre eigenen Versionsnummern, sind aber -trotzdem immer zu einer MRI Version kompatibel. +Die Ruby Implementierungen haben ihre eigenen Versionsnummern, sind aber +trotzdem immer zu einer MRI Version kompatibel. Viele können sogar zwischen verschiedenen Modi wechseln (1.8 mode -> 1.9 mode) ## RubySpec -Die meisten Ruby Implementierungen vertrauen der [RubySpec](http://rubyspec.org/). -sehr stark. Da Ruby keine offizielle Spezifikation hat, hat die -Community ausführbare Specs (in Ruby) geschrieben, um so die Kompatibilität +Die meisten Ruby Implementierungen vertrauen der [RubySpec](http://rubyspec.org/). +sehr stark. Da Ruby keine offizielle Spezifikation hat, hat die +Community ausführbare Specs (in Ruby) geschrieben, um so die Kompatibilität zur MRI testen zu können. ## RubyGems -[RubyGems](http://rubygems.org/) ist der Community Paket Manager von Ruby. -RubyGems kommt mit Ruby zusammen, so dass kein extra Tool nötig ist. - -Ruby Pakete werden "gems" genannt und könnten auf RubyGems.org -veröffentlicht werden. Jedes Gem enthält den Source Code und Meta Daten, +[RubyGems](http://rubygems.org/) ist der Community Paket Manager von Ruby. +RubyGems kommt mit Ruby zusammen, so dass kein extra Tool nötig ist. + +Ruby Pakete werden "gems" genannt und könnten auf RubyGems.org +veröffentlicht werden. Jedes Gem enthält den Source Code und Meta Daten, wie die Versionsnummer, weitere Abhängigkeiten, Autoren und Lizenzen. ## Bundler -[Bundler](http://bundler.io/) ist ein Tool um Abhängigkeiten zwischen -Gems aufzulösen und zu managen. Dazu werden diese in einem gemfile -zusammengefasst und Bundler kümmert sich darum die Abhängigkeiten -untereinander rekursiv aufzulösen. Entweder es klappt und alle gems -konnten runtergeladen werden, oder es wird abgebrochen und -der Konflikt gemeldet. -Zum Beispiel: -Wenn Gem A die Version 3 oder höher von Gem Z braucht, aber Gem B -von Gem Z die Version 2, dann ist das ein Konflikt. +[Bundler](http://bundler.io/) ist ein Tool um Abhängigkeiten zwischen +Gems aufzulösen und zu managen. Dazu werden diese in einem gemfile +zusammengefasst und Bundler kümmert sich darum die Abhängigkeiten +untereinander rekursiv aufzulösen. Entweder es klappt und alle gems +konnten runtergeladen werden, oder es wird abgebrochen und +der Konflikt gemeldet. +Zum Beispiel: +Wenn Gem A die Version 3 oder höher von Gem Z braucht, aber Gem B +von Gem Z die Version 2, dann ist das ein Konflikt. # Testing -Test-Driven Development ist ein essentieller Teil der Ruby Kultur. -Ruby bringt sein eigenes Unit-Test framework mit, minitest. Darüberhinaus +Test-Driven Development ist ein essentieller Teil der Ruby Kultur. +Ruby bringt sein eigenes Unit-Test framework mit, minitest. Darüberhinaus gibt es noch viele weitere Testframeworks mit unterschiedlichsten Zielen: * [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Eingebaut in Ruby 1.8 @@ -24538,8 +24538,8 @@ gibt es noch viele weitere Testframeworks mit unterschiedlichsten Zielen: * [Cucumber](http://cukes.info/) - Ein BDD Testframework welches Gherkin tests parsen kann ## Be Nice -Die Ruby Community ist stolz darauf eine offene, vielfältige und einladende -Community zu sein. Es gibt viele aktive Ruby User Gruppen und diverse +Die Ruby Community ist stolz darauf eine offene, vielfältige und einladende +Community zu sein. Es gibt viele aktive Ruby User Gruppen und diverse Ruby Konferenzen. Matz selbst ist so oft es geht dabei. * [Euruko](http://www.euruko2015.org) @@ -24555,30 +24555,30 @@ lang: de-de filename: lernerust-de.rs --- -Rust ist eine Programmiersprache von Mozilla Research. -Rust vereint Sicherheit, Nebenläufigkeit und eine hohe Praxistauglichkeit. - -Sicherheit bedeuted, dass Programmierfehler ausgeschlossen werden, die zu -Speicherzugriffsfehlern führen könnten. Das funktioniert u.a. dadurch, dass -es keinen Garbage Collector gibt, sondern ein besonderes Typsystem. - -Das erste Release von Rust, 0.1, wurde im Januar 2012 veröffentlicht. -In den nächsten drei Jahren wurde die Sprache so schnell und aktiv weiter- -entwickelt, dass es einfach keine stabile gab und geraten wurde den -nightly build zu nutzen. - -Am 15. Mai 2015 wurde Rust 1.0 freigegeben, und zwar mit der Garantie einer -Abwärtskompatabilität. Verbesserungen der Kompilierzeit und andere Compiler -verbesserungen finden im Moment im nightly build statt. Von Rust gibt es im -Moment ungefähr alle sechs Wochen ein Release. Rust 1.1 beta wurde zusammen -mit dem 1.0 Release zur Verfügung gestellt. - -Obwohl Rust eine ziemlich low-level Sprache ist, vereint sie Ansätze aus -der Welt der funktionalen, der objektorientierten und der nebenläufigen -Programmierung. Dadurch kann in Rust nicht nur schnell, sondern auch sehr -effizient entwickelt werden. - - +Rust ist eine Programmiersprache von Mozilla Research. +Rust vereint Sicherheit, Nebenläufigkeit und eine hohe Praxistauglichkeit. + +Sicherheit bedeuted, dass Programmierfehler ausgeschlossen werden, die zu +Speicherzugriffsfehlern führen könnten. Das funktioniert u.a. dadurch, dass +es keinen Garbage Collector gibt, sondern ein besonderes Typsystem. + +Das erste Release von Rust, 0.1, wurde im Januar 2012 veröffentlicht. +In den nächsten drei Jahren wurde die Sprache so schnell und aktiv weiter- +entwickelt, dass es einfach keine stabile gab und geraten wurde den +nightly build zu nutzen. + +Am 15. Mai 2015 wurde Rust 1.0 freigegeben, und zwar mit der Garantie einer +Abwärtskompatabilität. Verbesserungen der Kompilierzeit und andere Compiler +verbesserungen finden im Moment im nightly build statt. Von Rust gibt es im +Moment ungefähr alle sechs Wochen ein Release. Rust 1.1 beta wurde zusammen +mit dem 1.0 Release zur Verfügung gestellt. + +Obwohl Rust eine ziemlich low-level Sprache ist, vereint sie Ansätze aus +der Welt der funktionalen, der objektorientierten und der nebenläufigen +Programmierung. Dadurch kann in Rust nicht nur schnell, sondern auch sehr +effizient entwickelt werden. + + ```rust // Dies ist ein Kommentar. Ein einzeiliger... /* ...und multi-zeilen Kommentare sehe so aus */ @@ -24588,23 +24588,23 @@ effizient entwickelt werden. ///////////////////// // Stabile binaries gibt es unter https://www.rust-lang.org/downloads.html -// Programme werden in .rs Dateien geschrieben also zum Beispiel -// "main.rs" und dann kompiliert "rustc main.rs" -// Herauskommt eine ausführbare Datei "main" -// Für dieses Tutorial reicht das vollkommen aus. Für größere Projekte -// sollte das unten beschriebene Cargo angeschaut werden. - -// Cargo -// Ein gängiges Tool um Rust Projekte zu verwalten ist Cargo. Es macht im -// wesentlichen drei Dinge: Code bauen, Dependencies laden und -// Dependencies bauen. -// Um ein vorhandenes Projekt zu cargo-ifyen müssen drei Dinge gemacht werden -// * Erstelle eine Cargo.toml Konfigurationsdatei -// * Verschiebe Source Code in ein src Verzeichnis -// * Lösche das alte Executable +// Programme werden in .rs Dateien geschrieben also zum Beispiel +// "main.rs" und dann kompiliert "rustc main.rs" +// Herauskommt eine ausführbare Datei "main" +// Für dieses Tutorial reicht das vollkommen aus. Für größere Projekte +// sollte das unten beschriebene Cargo angeschaut werden. + +// Cargo +// Ein gängiges Tool um Rust Projekte zu verwalten ist Cargo. Es macht im +// wesentlichen drei Dinge: Code bauen, Dependencies laden und +// Dependencies bauen. +// Um ein vorhandenes Projekt zu cargo-ifyen müssen drei Dinge gemacht werden +// * Erstelle eine Cargo.toml Konfigurationsdatei +// * Verschiebe Source Code in ein src Verzeichnis +// * Lösche das alte Executable // -// 'cargo build' baut den Code -// 'cargo run' baut und führt das Programm aus +// 'cargo build' baut den Code +// 'cargo run' baut und führt das Programm aus /////////////// // 1. Basics // @@ -24846,8 +24846,8 @@ fn main() { // wird es automatisch im Speicher de-allokiert. let mut mine: Box = Box::new(3); // Jetzt wird die Box dereferenziert - *mine = 5; - // Jetzt geht `mine` in den Besitz von `now_its_mine` über. + *mine = 5; + // Jetzt geht `mine` in den Besitz von `now_its_mine` über. // `mine` wird verschoben. let mut now_its_mine = mine; *now_its_mine += 2; @@ -24855,7 +24855,7 @@ fn main() { println!("{}", now_its_mine); // ergibt 7 // Das würde nicht kompilieren, da `now_its_mine` jetzt den Pointer besitzt - // println!("{}", mine); + // println!("{}", mine); // Reference – ein unveränderlicher Pointer der fremde Daten referenziert // Wenn eine Referenz auf einen Wert gesetzt wird, heisst das, dass man den @@ -24884,16 +24884,16 @@ fn main() { ## Weitere Informationen -Es gibt eine ganze Reihe mehr über Rust zu sagen. Dieser Text gibt nur einen -Einblick in die wichtigsten Sprachmerkmale. +Es gibt eine ganze Reihe mehr über Rust zu sagen. Dieser Text gibt nur einen +Einblick in die wichtigsten Sprachmerkmale. Um mehr über Rust zu erfahren, sollte man mit den folgenden Stellen starten: -1. Englisch: +1. Englisch: * [Die offizielle Rust Webseite](http://rust-lang.org) * [The Rust Programming Language](https://doc.rust-lang.org/stable/book/README.html) * [/r/rust](http://reddit.com/r/rust) - * the #rust channel on irc.mozilla.org - + * the #rust channel on irc.mozilla.org + 2. Deutsch * [Rust Wikipedia](https://de.wikipedia.org/wiki/Rust_(Programmiersprache)) * [Artikel im LinuxMagazin](http://www.linux-magazin.de/Ausgaben/2015/08/Rust) @@ -24905,7 +24905,7 @@ contributors: - ["Sean Corrales", "https://github.com/droidenator"] - ["Kyle Mendes", "https://github.com/pink401k"] translators: - - ["Philipp Bochmann", "https://github.com/phbo85"] + - ["Philipp Bochmann", "https://github.com/phbo85"] lang: de-de --- Sass ist eine CSS-erweiternde Sprache, welche Features wie Variablen, Verschachtelung, Mixins und mehr hinzufügt. @@ -25361,12 +25361,12 @@ filename: learnscala-de.scala lang: de-de --- -Scala ist eine funktionale und objektorientierte Programmiersprache -für die Java Virtual Machine (JVM), um allgemeine Programmieraufgaben -zu erledigen. Scala hat einen akademischen Hintergrund und wurde an +Scala ist eine funktionale und objektorientierte Programmiersprache +für die Java Virtual Machine (JVM), um allgemeine Programmieraufgaben +zu erledigen. Scala hat einen akademischen Hintergrund und wurde an der EPFL (Lausanne / Schweiz) unter der Leitung von Martin Odersky entwickelt. -```scala +```scala /* Scala Umgebung einrichten: @@ -25377,9 +25377,9 @@ Scala Umgebung einrichten: scala> -Die REPL (Read-Eval-Print Loop) ist der interaktive Scala Interpreter. -Hier kann man jeden Scala Ausdruck verwenden und das Ergebnis wird direkt -ausgegeben. +Die REPL (Read-Eval-Print Loop) ist der interaktive Scala Interpreter. +Hier kann man jeden Scala Ausdruck verwenden und das Ergebnis wird direkt +ausgegeben. Als nächstes beschäftigen wir uns mit ein paar Scala Basics. */ @@ -25391,25 +25391,25 @@ Als nächstes beschäftigen wir uns mit ein paar Scala Basics. // Einzeilige Kommentare beginnen mit zwei Slashes /* - Mehrzeilige Kommentare, starten + Mehrzeilige Kommentare, starten mit einem Slash-Stern und enden mit einem Stern-Slash */ -// Einen Wert, und eine zusätzliche neue Zeile ausgeben +// Einen Wert, und eine zusätzliche neue Zeile ausgeben println("Hello world!") println(10) -// Einen Wert, ohne eine zusätzliche neue Zeile ausgeben +// Einen Wert, ohne eine zusätzliche neue Zeile ausgeben print("Hello world") /* - Variablen werden entweder mit var oder val deklariert. - Deklarationen mit val sind immutable, also unveränderlich - Deklarationen mit var sind mutable, also veränderlich - Immutability ist gut. + Variablen werden entweder mit var oder val deklariert. + Deklarationen mit val sind immutable, also unveränderlich + Deklarationen mit var sind mutable, also veränderlich + Immutability ist gut. */ val x = 10 // x ist 10 x = 20 // error: reassignment to val @@ -25417,29 +25417,29 @@ var y = 10 y = 20 // y ist jetzt 20 /* -Scala ist eine statisch getypte Sprache, auch wenn wir in dem o.g. Beispiel -keine Typen an x und y geschrieben haben. -In Scala ist etwas eingebaut, was sich Type Inference nennt. Das heißt das der -Scala Compiler in den meisten Fällen erraten kann, von welchen Typ eine Variable ist, -so dass der Typ nicht jedes mal angegeben werden muss. -Einen Typ gibt man bei einer Variablendeklaration wie folgt an: +Scala ist eine statisch getypte Sprache, auch wenn wir in dem o.g. Beispiel +keine Typen an x und y geschrieben haben. +In Scala ist etwas eingebaut, was sich Type Inference nennt. Das heißt das der +Scala Compiler in den meisten Fällen erraten kann, von welchen Typ eine Variable ist, +so dass der Typ nicht jedes mal angegeben werden muss. +Einen Typ gibt man bei einer Variablendeklaration wie folgt an: */ val z: Int = 10 val a: Double = 1.0 -// Bei automatischer Umwandlung von Int auf Double wird aus 10 eine 10.0 +// Bei automatischer Umwandlung von Int auf Double wird aus 10 eine 10.0 val b: Double = 10 -// Boolean Werte +// Boolean Werte true false -// Boolean Operationen +// Boolean Operationen !true // false !false // true @@ -25447,7 +25447,7 @@ true == false // false 10 > 5 // true -// Mathematische Operationen sind wie gewohnt +// Mathematische Operationen sind wie gewohnt 1 + 1 // 2 2 - 1 // 1 @@ -25457,44 +25457,44 @@ true == false // false 6.0 / 4 // 1.5 -// Die Auswertung eines Ausdrucks in der REPL gibt den Typ -// und das Ergebnis zurück. +// Die Auswertung eines Ausdrucks in der REPL gibt den Typ +// und das Ergebnis zurück. scala> 1 + 7 res29: Int = 8 /* -Das bedeutet, dass das Resultat der Auswertung von 1 + 7 ein Objekt -von Typ Int ist und einen Wert 0 hat. -"res29" ist ein sequentiell generierter name, um das Ergebnis des -Ausdrucks zu speichern. Dieser Wert kann bei Dir anders sein... +Das bedeutet, dass das Resultat der Auswertung von 1 + 7 ein Objekt +von Typ Int ist und einen Wert 0 hat. +"res29" ist ein sequentiell generierter name, um das Ergebnis des +Ausdrucks zu speichern. Dieser Wert kann bei Dir anders sein... */ -"Scala strings werden in doppelten Anführungszeichen eingeschlossen" -'a' // A Scala Char -// 'Einzeln ge-quotete strings gibt es nicht!' <= This causes an error - -// Für Strings gibt es die üblichen Java Methoden +"Scala strings werden in doppelten Anführungszeichen eingeschlossen" +'a' // A Scala Char +// 'Einzeln ge-quotete strings gibt es nicht!' <= This causes an error + +// Für Strings gibt es die üblichen Java Methoden "hello world".length "hello world".substring(2, 6) "hello world".replace("C", "3") -// Zusätzlich gibt es noch extra Scala Methoden -// siehe: scala.collection.immutable.StringOps +// Zusätzlich gibt es noch extra Scala Methoden +// siehe: scala.collection.immutable.StringOps "hello world".take(5) "hello world".drop(5) -// String interpolation: prefix "s" +// String interpolation: prefix "s" val n = 45 s"We have $n apples" // => "We have 45 apples" -// Ausdrücke im Innern von interpolierten Strings gibt es auch +// Ausdrücke im Innern von interpolierten Strings gibt es auch val a = Array(11, 9, 6) val n = 100 @@ -25503,42 +25503,42 @@ s"We have double the amount of ${n / 2.0} in apples." // => "We have double the s"Power of 2: ${math.pow(2, 2)}" // => "Power of 2: 4" -// Formatierung der interpolierten Strings mit dem prefix "f" +// Formatierung der interpolierten Strings mit dem prefix "f" f"Power of 5: ${math.pow(5, 2)}%1.0f" // "Power of 5: 25" f"Square root of 122: ${math.sqrt(122)}%1.4f" // "Square root of 122: 11.0454" -// Raw Strings, ignorieren Sonderzeichen. +// Raw Strings, ignorieren Sonderzeichen. raw"New line feed: \n. Carriage return: \r." // => "New line feed: \n. Carriage return: \r." -// Manche Zeichen müssen "escaped" werden, z.B. -// ein doppeltes Anführungszeichen in innern eines Strings. +// Manche Zeichen müssen "escaped" werden, z.B. +// ein doppeltes Anführungszeichen in innern eines Strings. "They stood outside the \"Rose and Crown\"" // => "They stood outside the "Rose and Crown"" -// Dreifache Anführungszeichen erlauben es, dass ein String über mehrere Zeilen geht -// und Anführungszeichen enthalten kann. +// Dreifache Anführungszeichen erlauben es, dass ein String über mehrere Zeilen geht +// und Anführungszeichen enthalten kann. val html = """

    Press belo', Joe

    """ - + ///////////////////////////////////////////////// // 2. Funktionen ///////////////////////////////////////////////// -// Funktionen werden so definiert -// -// def functionName(args...): ReturnType = { body... } -// -// Beachte: Es gibt kein return Schlüsselwort. In Scala ist der letzte Ausdruck -// in einer Funktion der Rückgabewert. +// Funktionen werden so definiert +// +// def functionName(args...): ReturnType = { body... } +// +// Beachte: Es gibt kein return Schlüsselwort. In Scala ist der letzte Ausdruck +// in einer Funktion der Rückgabewert. def sumOfSquares(x: Int, y: Int): Int = { val x2 = x * x @@ -25547,75 +25547,75 @@ def sumOfSquares(x: Int, y: Int): Int = { } -// Die geschweiften Klammern können weggelassen werden, wenn -// die Funktion nur aus einem einzigen Ausdruck besteht: +// Die geschweiften Klammern können weggelassen werden, wenn +// die Funktion nur aus einem einzigen Ausdruck besteht: def sumOfSquaresShort(x: Int, y: Int): Int = x * x + y * y -// Syntax für Funktionsaufrufe: +// Syntax für Funktionsaufrufe: sumOfSquares(3, 4) // => 25 -// In den meisten Fällen (mit Ausnahme von rekursiven Funktionen), können -// Rückgabetypen auch weggelassen werden, da dieselbe Typ Inference, wie bei -// Variablen, auch bei Funktionen greift: +// In den meisten Fällen (mit Ausnahme von rekursiven Funktionen), können +// Rückgabetypen auch weggelassen werden, da dieselbe Typ Inference, wie bei +// Variablen, auch bei Funktionen greift: def sq(x: Int) = x * x // Compiler errät, dass der return type Int ist -// Funktionen können default parameter haben: +// Funktionen können default parameter haben: def addWithDefault(x: Int, y: Int = 5) = x + y addWithDefault(1, 2) // => 3 addWithDefault(1) // => 6 -// Anonyme Funktionen sehen so aus: +// Anonyme Funktionen sehen so aus: (x: Int) => x * x -// Im Gegensatz zu def bei normalen Funktionen, kann bei anonymen Funktionen -// sogar der Eingabetyp weggelassen werden, wenn der Kontext klar ist. -// Beachte den Typ "Int => Int", dies beschreibt eine Funktion, -// welche Int als Parameter erwartet und Int zurückgibt. +// Im Gegensatz zu def bei normalen Funktionen, kann bei anonymen Funktionen +// sogar der Eingabetyp weggelassen werden, wenn der Kontext klar ist. +// Beachte den Typ "Int => Int", dies beschreibt eine Funktion, +// welche Int als Parameter erwartet und Int zurückgibt. val sq: Int => Int = x => x * x -// Anonyme Funktionen benutzt man ganz normal: +// Anonyme Funktionen benutzt man ganz normal: sq(10) // => 100 -// Wenn ein Parameter einer anonymen Funktion nur einmal verwendet wird, -// bietet Scala einen sehr kurzen Weg diesen Parameter zu benutzen, -// indem die Parameter als Unterstrich "_" in der Parameterreihenfolge -// verwendet werden. Diese anonymen Funktionen werden sehr häufig -// verwendet. +// Wenn ein Parameter einer anonymen Funktion nur einmal verwendet wird, +// bietet Scala einen sehr kurzen Weg diesen Parameter zu benutzen, +// indem die Parameter als Unterstrich "_" in der Parameterreihenfolge +// verwendet werden. Diese anonymen Funktionen werden sehr häufig +// verwendet. -val addOne: Int => Int = _ + 1 -val weirdSum: (Int, Int) => Int = (_ * 2 + _ * 3) -addOne(5) // => 6 -weirdSum(2, 4) // => 16 +val addOne: Int => Int = _ + 1 +val weirdSum: (Int, Int) => Int = (_ * 2 + _ * 3) +addOne(5) // => 6 +weirdSum(2, 4) // => 16 -// Es gibt einen keyword return in Scala. Allerdings ist seine Verwendung -// nicht immer ratsam und kann fehlerbehaftet sein. "return" gibt nur aus -// dem innersten def, welches den return Ausdruck umgibt, zurück. -// "return" hat keinen Effekt in anonymen Funktionen: +// Es gibt einen keyword return in Scala. Allerdings ist seine Verwendung +// nicht immer ratsam und kann fehlerbehaftet sein. "return" gibt nur aus +// dem innersten def, welches den return Ausdruck umgibt, zurück. +// "return" hat keinen Effekt in anonymen Funktionen: -def foo(x: Int): Int = { - val anonFunc: Int => Int = { z => - if (z > 5) - return z // Zeile macht z zum return Wert von foo - else - z + 2 // Zeile ist der return Wert von anonFunc - } - anonFunc(x) // Zeile ist der return Wert von foo -} +def foo(x: Int): Int = { + val anonFunc: Int => Int = { z => + if (z > 5) + return z // Zeile macht z zum return Wert von foo + else + z + 2 // Zeile ist der return Wert von anonFunc + } + anonFunc(x) // Zeile ist der return Wert von foo +} ///////////////////////////////////////////////// @@ -25629,25 +25629,25 @@ val r = 1 to 5 r.foreach(println) r foreach println (5 to 1 by -1) foreach (println) - -// Scala ist syntaktisch sehr großzügig, Semikolons am Zeilenende -// sind optional, beim Aufruf von Methoden können die Punkte -// und Klammern entfallen und Operatoren sind im Grunde austauschbare Methoden -// while Schleife +// Scala ist syntaktisch sehr großzügig, Semikolons am Zeilenende +// sind optional, beim Aufruf von Methoden können die Punkte +// und Klammern entfallen und Operatoren sind im Grunde austauschbare Methoden + +// while Schleife var i = 0 while (i < 10) { println("i " + i); i += 1 } i // i ausgeben, res3: Int = 10 -// Beachte: while ist eine Schleife im klassischen Sinne - -// Sie läuft sequentiell ab und verändert die loop-Variable. -// While in Scala läuft schneller ab als in Java und die o.g. -// Kombinatoren und Zusammenlegungen sind einfacher zu verstehen +// Beachte: while ist eine Schleife im klassischen Sinne - +// Sie läuft sequentiell ab und verändert die loop-Variable. +// While in Scala läuft schneller ab als in Java und die o.g. +// Kombinatoren und Zusammenlegungen sind einfacher zu verstehen // und zu parellelisieren. -// Ein do while Schleife +// Ein do while Schleife do { println("x ist immer noch weniger wie 10") @@ -25655,10 +25655,10 @@ do { } while (x < 10) -// Endrekursionen sind ideomatisch um sich wiederholende -// Dinge in Scala zu lösen. Rekursive Funtionen benötigen explizit einen -// return Typ, der Compiler kann ihn nicht erraten. -// Unit, in diesem Beispiel. +// Endrekursionen sind ideomatisch um sich wiederholende +// Dinge in Scala zu lösen. Rekursive Funtionen benötigen explizit einen +// return Typ, der Compiler kann ihn nicht erraten. +// Unit, in diesem Beispiel. def showNumbersInRange(a: Int, b: Int): Unit = { print(a) @@ -25709,7 +25709,7 @@ val s = Set(1,1,3,3,7) s: scala.collection.immutable.Set[Int] = Set(1, 3, 7) // Tuple - Speichert beliebige Daten und "verbindet" sie miteinander -// Ein Tuple ist keine Collection. +// Ein Tuple ist keine Collection. (1, 2) (4, 3, 2) @@ -25717,15 +25717,15 @@ s: scala.collection.immutable.Set[Int] = Set(1, 3, 7) (a, 2, "three") -// Hier ist der Rückgabewert der Funktion ein Tuple -// Die Funktion gibt das Ergebnis, so wie den Rest zurück. +// Hier ist der Rückgabewert der Funktion ein Tuple +// Die Funktion gibt das Ergebnis, so wie den Rest zurück. val divideInts = (x: Int, y: Int) => (x / y, x % y) divideInts(10, 3) -// Um die Elemente eines Tuples anzusprechen, benutzt man diese -// Notation: _._n wobei n der index des Elements ist (Index startet bei 1) +// Um die Elemente eines Tuples anzusprechen, benutzt man diese +// Notation: _._n wobei n der index des Elements ist (Index startet bei 1) val d = divideInts(10, 3) d._1 @@ -25737,32 +25737,32 @@ d._2 ///////////////////////////////////////////////// /* - Bislang waren alle gezeigten Sprachelemente einfache Ausdrücke, welche zwar - zum Ausprobieren und Lernen in der REPL gut geeignet sind, jedoch in - einem Scala file selten alleine zu finden sind. - Die einzigen Top-Level Konstrukte in Scala sind nämlich: + Bislang waren alle gezeigten Sprachelemente einfache Ausdrücke, welche zwar + zum Ausprobieren und Lernen in der REPL gut geeignet sind, jedoch in + einem Scala file selten alleine zu finden sind. + Die einzigen Top-Level Konstrukte in Scala sind nämlich: - Klassen (classes) - Objekte (objects) - case classes - traits - Diesen Sprachelemente wenden wir uns jetzt zu. + Diesen Sprachelemente wenden wir uns jetzt zu. */ // Klassen -// Zum Erstellen von Objekten benötigt man eine Klasse, wie in vielen -// anderen Sprachen auch. +// Zum Erstellen von Objekten benötigt man eine Klasse, wie in vielen +// anderen Sprachen auch. -// erzeugt Klasse mit default Konstruktor +// erzeugt Klasse mit default Konstruktor class Hund scala> val t = new Hund t: Hund = Hund@7103745 -// Der Konstruktor wird direkt hinter dem Klassennamen deklariert. +// Der Konstruktor wird direkt hinter dem Klassennamen deklariert. class Hund(sorte: String) scala> val t = new Hund("Dackel") @@ -25770,8 +25770,8 @@ t: Hund = Hund@14be750c scala> t.sorte //error: value sorte is not a member of Hund -// Per val wird aus dem Attribut ein unveränderliches Feld der Klasse -// Per var wird aus dem Attribut ein veränderliches Feld der Klasse +// Per val wird aus dem Attribut ein unveränderliches Feld der Klasse +// Per var wird aus dem Attribut ein veränderliches Feld der Klasse class Hund(val sorte: String) scala> val t = new Hund("Dackel") @@ -25780,14 +25780,14 @@ scala> t.sorte res18: String = Dackel -// Methoden werden mit def geschrieben +// Methoden werden mit def geschrieben def bark = "Woof, woof!" -// Felder und Methoden können public, protected und private sein -// default ist public -// private ist nur innerhalb des deklarierten Bereichs sichtbar +// Felder und Methoden können public, protected und private sein +// default ist public +// private ist nur innerhalb des deklarierten Bereichs sichtbar class Hund { private def x = ... @@ -25795,8 +25795,8 @@ class Hund { } -// protected ist nur innerhalb des deklarierten und aller -// erbenden Bereiche sichtbar +// protected ist nur innerhalb des deklarierten und aller +// erbenden Bereiche sichtbar class Hund { protected def x = ... @@ -25806,12 +25806,12 @@ class Dackel extends Hund { } // Object -// Wird ein Objekt ohne das Schlüsselwort "new" instanziert, wird das sog. -// "companion object" aufgerufen. Mit dem "object" Schlüsselwort wird so -// ein Objekt (Typ UND Singleton) erstellt. Damit kann man dann eine Klasse -// benutzen ohne ein Objekt instanziieren zu müssen. -// Ein gültiges companion Objekt einer Klasse ist es aber erst dann, wenn -// es genauso heisst und in derselben Datei wie die Klasse definiert wurde. +// Wird ein Objekt ohne das Schlüsselwort "new" instanziert, wird das sog. +// "companion object" aufgerufen. Mit dem "object" Schlüsselwort wird so +// ein Objekt (Typ UND Singleton) erstellt. Damit kann man dann eine Klasse +// benutzen ohne ein Objekt instanziieren zu müssen. +// Ein gültiges companion Objekt einer Klasse ist es aber erst dann, wenn +// es genauso heisst und in derselben Datei wie die Klasse definiert wurde. object Hund { def alleSorten = List("Pitbull", "Dackel", "Retriever") @@ -25819,50 +25819,50 @@ object Hund { } // Case classes -// Fallklassen bzw. Case classes sind Klassen die normale Klassen um extra -// Funktionalität erweitern. Mit Case Klassen bekommt man ein paar -// Dinge einfach dazu, ohne sich darum kümmern zu müssen. Z.B. -// ein companion object mit den entsprechenden Methoden, -// Hilfsmethoden wie toString(), equals() und hashCode() und auch noch -// Getter für unsere Attribute (das Angeben von val entfällt dadurch) +// Fallklassen bzw. Case classes sind Klassen die normale Klassen um extra +// Funktionalität erweitern. Mit Case Klassen bekommt man ein paar +// Dinge einfach dazu, ohne sich darum kümmern zu müssen. Z.B. +// ein companion object mit den entsprechenden Methoden, +// Hilfsmethoden wie toString(), equals() und hashCode() und auch noch +// Getter für unsere Attribute (das Angeben von val entfällt dadurch) class Person(val name: String) class Hund(val sorte: String, val farbe: String, val halter: Person) -// Es genügt das Schlüsselwort case vor die Klasse zu schreiben. +// Es genügt das Schlüsselwort case vor die Klasse zu schreiben. case class Person(name: String) case class Hund(sorte: String, farbe: String, halter: Person) -// Für neue Instanzen brauch man kein "new" +// Für neue Instanzen brauch man kein "new" val dackel = Hund("dackel", "grau", Person("peter")) val dogge = Hund("dogge", "grau", Person("peter")) - -// getter + +// getter dackel.halter // => Person = Person(peter) - -// equals + +// equals dogge == dackel // => false - -// copy -// otherGeorge == Person("george", "9876") + +// copy +// otherGeorge == Person("george", "9876") val otherGeorge = george.copy(phoneNumber = "9876") // Traits -// Ähnlich wie Java interfaces, definiert man mit traits einen Objekttyp -// und Methodensignaturen. Scala erlaubt allerdings das teilweise -// implementieren dieser Methoden. Konstruktorparameter sind nicht erlaubt. -// Traits können von anderen Traits oder Klassen erben, aber nur von -// parameterlosen. +// Ähnlich wie Java interfaces, definiert man mit traits einen Objekttyp +// und Methodensignaturen. Scala erlaubt allerdings das teilweise +// implementieren dieser Methoden. Konstruktorparameter sind nicht erlaubt. +// Traits können von anderen Traits oder Klassen erben, aber nur von +// parameterlosen. trait Hund { def sorte: String @@ -25876,16 +25876,16 @@ class Bernhardiner extends Hund{ def beissen = false } - -scala> b -res0: Bernhardiner = Bernhardiner@3e57cd70 -scala> b.sorte -res1: String = Bernhardiner -scala> b.bellen -res2: Boolean = true -scala> b.beissen -res3: Boolean = false + +scala> b +res0: Bernhardiner = Bernhardiner@3e57cd70 +scala> b.sorte +res1: String = Bernhardiner +scala> b.bellen +res2: Boolean = true +scala> b.beissen +res3: Boolean = false // Ein Trait kann auch als Mixin eingebunden werden. Die Klasse erbt vom // ersten Trait mit dem Schlüsselwort "extends", während weitere Traits @@ -25911,11 +25911,11 @@ res0: String = Woof // 6. Pattern Matching ///////////////////////////////////////////////// -// Pattern matching in Scala ist ein sehr nützliches und wesentlich -// mächtigeres Feature als Vergleichsfunktionen in Java. In Scala -// benötigt ein case Statement kein "break", ein fall-through gibt es nicht. -// Mehrere Überprüfungen können mit einem Statement gemacht werden. -// Pattern matching wird mit dem Schlüsselwort "match" gemacht. +// Pattern matching in Scala ist ein sehr nützliches und wesentlich +// mächtigeres Feature als Vergleichsfunktionen in Java. In Scala +// benötigt ein case Statement kein "break", ein fall-through gibt es nicht. +// Mehrere Überprüfungen können mit einem Statement gemacht werden. +// Pattern matching wird mit dem Schlüsselwort "match" gemacht. val x = ... x match { @@ -25925,7 +25925,7 @@ x match { } -// Pattern Matching kann auf beliebige Typen prüfen +// Pattern Matching kann auf beliebige Typen prüfen val any: Any = ... val gleicht = any match { @@ -25937,7 +25937,7 @@ val gleicht = any match { } -// und auf Objektgleichheit +// und auf Objektgleichheit def matchPerson(person: Person): String = person match { case Person("George", nummer) => "George! Die Nummer ist " + number @@ -25946,7 +25946,7 @@ def matchPerson(person: Person): String = person match { } -// Und viele mehr... +// Und viele mehr... val email = "(.*)@(.*)".r // regex def matchEverything(obj: Any): String = obj match { @@ -25969,8 +25969,8 @@ def matchEverything(obj: Any): String = obj match { } -// Jedes Objekt mit einer "unapply" Methode kann per Pattern geprüft werden -// Ganze Funktionen können Patterns sein +// Jedes Objekt mit einer "unapply" Methode kann per Pattern geprüft werden +// Ganze Funktionen können Patterns sein val patternFunc: Person => String = { case Person("George", number) => s"George's number: $number" @@ -25982,13 +25982,13 @@ val patternFunc: Person => String = { // 37. Higher-order functions ///////////////////////////////////////////////// -Scala erlaubt, das Methoden und Funktion wiederum Funtionen und Methoden -als Aufrufparameter oder Return Wert verwenden. Diese Methoden heissen -higher-order functions -Es gibt zahlreiche higher-order functions nicht nur für Listen, auch für -die meisten anderen Collection Typen, sowie andere Klassen in Scala -Nennenswerte sind: -"filter", "map", "reduce", "foldLeft"/"foldRight", "exists", "forall" +Scala erlaubt, das Methoden und Funktion wiederum Funtionen und Methoden +als Aufrufparameter oder Return Wert verwenden. Diese Methoden heissen +higher-order functions +Es gibt zahlreiche higher-order functions nicht nur für Listen, auch für +die meisten anderen Collection Typen, sowie andere Klassen in Scala +Nennenswerte sind: +"filter", "map", "reduce", "foldLeft"/"foldRight", "exists", "forall" ## List @@ -25998,39 +25998,39 @@ val resultExists4 = list.exists(isEqualToFour) ## map -// map nimmt eine Funktion und führt sie auf jedem Element aus und erzeugt -// eine neue Liste - -// Funktion erwartet ein Int und returned ein Int +// map nimmt eine Funktion und führt sie auf jedem Element aus und erzeugt +// eine neue Liste -val add10: Int => Int = _ + 10 +// Funktion erwartet ein Int und returned ein Int + +val add10: Int => Int = _ + 10 -// add10 wird auf jedes Element angewendet +// add10 wird auf jedes Element angewendet List(1, 2, 3) map add10 // => List(11, 12, 13) -// Anonyme Funktionen können anstatt definierter Funktionen verwendet werden +// Anonyme Funktionen können anstatt definierter Funktionen verwendet werden List(1, 2, 3) map (x => x + 10) -// Der Unterstrich wird anstelle eines Parameters einer anonymen Funktion -// verwendet. Er wird an die Variable gebunden. +// Der Unterstrich wird anstelle eines Parameters einer anonymen Funktion +// verwendet. Er wird an die Variable gebunden. List(1, 2, 3) map (_ + 10) -// Wenn der anonyme Block und die Funtion beide EIN Argument erwarten, -// kann sogar der Unterstrich weggelassen werden. +// Wenn der anonyme Block und die Funtion beide EIN Argument erwarten, +// kann sogar der Unterstrich weggelassen werden. List("Dom", "Bob", "Natalia") foreach println // filter -// filter nimmt ein Prädikat (eine Funktion von A -> Boolean) und findet -// alle Elemente die auf das Prädikat passen +// filter nimmt ein Prädikat (eine Funktion von A -> Boolean) und findet +// alle Elemente die auf das Prädikat passen List(1, 2, 3) filter (_ > 2) // => List(3) case class Person(name: String, age: Int) @@ -26041,19 +26041,19 @@ List( // reduce -// reduce nimmt zwei Elemente und kombiniert sie zu einem Element, -// und zwar solange bis nur noch ein Element da ist. +// reduce nimmt zwei Elemente und kombiniert sie zu einem Element, +// und zwar solange bis nur noch ein Element da ist. // foreach -// foreach gibt es für einige Collections +// foreach gibt es für einige Collections val aListOfNumbers = List(1, 2, 3, 4, 10, 20, 100) aListOfNumbers foreach (x => println(x)) aListOfNumbers foreach println // For comprehensions -// Eine for-comprehension definiert eine Beziehung zwischen zwei Datensets. -// Dies ist keine for-Schleife. +// Eine for-comprehension definiert eine Beziehung zwischen zwei Datensets. +// Dies ist keine for-Schleife. for { n <- s } yield sq(n) val nSquared2 = for { n <- s } yield sq(n) @@ -26065,58 +26065,58 @@ for { n <- s; nSquared = n * n if nSquared < 10} yield nSquared // 8. Implicits ///////////////////////////////////////////////// -// **ACHTUNG:** +// **ACHTUNG:** // Implicits sind ein sehr mächtiges Sprachfeature von Scala. -// Es sehr einfach -// sie falsch zu benutzen und Anfänger sollten sie mit Vorsicht oder am -// besten erst dann benutzen, wenn man versteht wie sie funktionieren. -// Dieses Tutorial enthält Implicits, da sie in Scala an jeder Stelle -// vorkommen und man auch mit einer Lib die Implicits benutzt nichts sinnvolles -// machen kann. -// Hier soll ein Grundverständnis geschaffen werden, wie sie funktionieren. +// Es sehr einfach +// sie falsch zu benutzen und Anfänger sollten sie mit Vorsicht oder am +// besten erst dann benutzen, wenn man versteht wie sie funktionieren. +// Dieses Tutorial enthält Implicits, da sie in Scala an jeder Stelle +// vorkommen und man auch mit einer Lib die Implicits benutzt nichts sinnvolles +// machen kann. +// Hier soll ein Grundverständnis geschaffen werden, wie sie funktionieren. -// Mit dem Schlüsselwort implicit können Methoden, Werte, Funktion, Objekte -// zu "implicit Methods" werden. +// Mit dem Schlüsselwort implicit können Methoden, Werte, Funktion, Objekte +// zu "implicit Methods" werden. implicit val myImplicitInt = 100 implicit def myImplicitFunction(sorte: String) = new Hund("Golden " + sorte) -// implicit ändert nicht das Verhalten eines Wertes oder einer Funktion +// implicit ändert nicht das Verhalten eines Wertes oder einer Funktion myImplicitInt + 2 // => 102 myImplicitFunction("Pitbull").sorte // => "Golden Pitbull" -// Der Unterschied ist, dass diese Werte ausgewählt werden können, wenn ein -// anderer Codeteil einen implicit Wert benötigt, zum Beispiel innerhalb von -// implicit Funktionsparametern - -// Diese Funktion hat zwei Parameter: einen normalen und einen implicit +// Der Unterschied ist, dass diese Werte ausgewählt werden können, wenn ein +// anderer Codeteil einen implicit Wert benötigt, zum Beispiel innerhalb von +// implicit Funktionsparametern + +// Diese Funktion hat zwei Parameter: einen normalen und einen implicit def sendGreetings(toWhom: String)(implicit howMany: Int) = s"Hello $toWhom, $howMany blessings to you and yours!" -// Werden beide Parameter gefüllt, verhält sich die Funktion wie erwartet +// Werden beide Parameter gefüllt, verhält sich die Funktion wie erwartet sendGreetings("John")(1000) // => "Hello John, 1000 blessings to you and yours!" -// Wird der implicit Parameter jedoch weggelassen, wird ein anderer -// implicit Wert vom gleichen Typ genommen. Der Compiler sucht im -// lexikalischen Scope und im companion object nach einem implicit Wert, -// der vom Typ passt, oder nach einer implicit Methode mit der er in den -// geforderten Typ konvertieren kann. - -// Hier also: "myImplicitInt", da ein Int gesucht wird +// Wird der implicit Parameter jedoch weggelassen, wird ein anderer +// implicit Wert vom gleichen Typ genommen. Der Compiler sucht im +// lexikalischen Scope und im companion object nach einem implicit Wert, +// der vom Typ passt, oder nach einer implicit Methode mit der er in den +// geforderten Typ konvertieren kann. + +// Hier also: "myImplicitInt", da ein Int gesucht wird sendGreetings("Jane") // => "Hello Jane, 100 blessings to you and yours!" -// bzw. "myImplicitFunction" -// Der String wird erst mit Hilfe der Funktion in Hund konvertiert, und -// dann wird die Methode aufgerufen +// bzw. "myImplicitFunction" +// Der String wird erst mit Hilfe der Funktion in Hund konvertiert, und +// dann wird die Methode aufgerufen "Retriever".sorte // => "Golden Retriever" @@ -26129,27 +26129,27 @@ sendGreetings("Jane") // => "Hello Jane, 100 blessings to you and yours!" import scala.collection.immutable.List -// Importiere alle Unterpackages +// Importiere alle Unterpackages import scala.collection.immutable._ -// Importiere verschiedene Klassen mit einem Statement +// Importiere verschiedene Klassen mit einem Statement import scala.collection.immutable.{List, Map} -// Einen Import kann man mit '=>' umbenennen +// Einen Import kann man mit '=>' umbenennen import scala.collection.immutable.{List => ImmutableList} -// Importiere alle Klasses, mit Ausnahem von.... -// Hier ohne: Map and Set: +// Importiere alle Klasses, mit Ausnahem von.... +// Hier ohne: Map and Set: import scala.collection.immutable.{Map => _, Set => _, _} -// Main +// Main object Application { def main(args: Array[String]): Unit = { @@ -26159,14 +26159,14 @@ object Application { // I/O -// Eine Datei Zeile für Zeile lesen +// Eine Datei Zeile für Zeile lesen import scala.io.Source for(line <- Source.fromFile("myfile.txt").getLines()) println(line) -// Eine Datei schreiben +// Eine Datei schreiben val writer = new PrintWriter("myfile.txt") writer.write("Schreibe Zeile" + util.Properties.lineSeparator) @@ -26175,7 +26175,7 @@ writer.close() ``` -## Weiterführende Hinweise +## Weiterführende Hinweise // DE * [Scala Tutorial](https://scalatutorial.wordpress.com) @@ -26193,7 +26193,7 @@ language: swift contributors: - ["Grant Timmerman", "http://github.com/grant"] - ["Christopher Bess", "http://github.com/cbess"] - - ["Joey Huang", "http://github.com/kamidox"] + - ["Joey Huang", "http://github.com/kamidox"] - ["Anthony Nguyen", "http://github.com/anthonyn60"] translators: - ["Jonas Wippermann", "http://vfuc.co"] @@ -26224,8 +26224,8 @@ import UIKit print("Hello, world!") // println ist jetzt print print("Hello, world!", appendNewLine: false) // printen ohne Zeilenumbruch am Ende -// Variablen (var) können nach der Initialisierung verändert werden -// Konstanten (let) können nach der Initialisierung NICHT verändert werden +// Variablen (var) können nach der Initialisierung verändert werden +// Konstanten (let) können nach der Initialisierung NICHT verändert werden var myVariable = 42 let øπΩ = "value" // Unicode-Variablennamen @@ -26265,7 +26265,7 @@ if someOptionalString != nil { if someOptionalString!.hasPrefix("opt") { print("has the prefix") } - + let empty = someOptionalString?.isEmpty } someOptionalString = nil @@ -26290,7 +26290,7 @@ anyObjectVar = "Changed value to a string, not good practice, but possible." /* Ein Kommentar - + /* Verschachtelte Kommentare sind ebenfalls unterstützt */ @@ -26301,7 +26301,7 @@ anyObjectVar = "Changed value to a string, not good practice, but possible." // /* - Array und Dictionary-Typen sind structs. + Array und Dictionary-Typen sind structs. Deswegen implizieren `let` und `var` bei der Initialisierung auch ob sie änderbar (var) oder unveränderlich (let) sind. */ @@ -26497,7 +26497,7 @@ print(numbers) // [3, 6, 18] // Structures und Klassen haben sehr ähnliche Fähigkeiten struct NamesTable { let names = [String]() - + // Eigendefiniertes subscript subscript(index: Int) -> String { return names[index] @@ -26529,7 +26529,7 @@ public class Shape { internal class Rect: Shape { var sideLength: Int = 1 - + // Eigendefinierte Getter und Setter für die Property private var perimeter: Int { get { @@ -26540,33 +26540,33 @@ internal class Rect: Shape { sideLength = newValue / 4 } } - + // "Lazy" (faules) Laden einer Property, sie bleibt uninitialisiert (nil), // bis sie aufgerufen wird lazy var subShape = Rect(sideLength: 4) - + // Wenn kein eigendefinierter Getter/Setter notwendig ist, // aber trotzdem Code vor und nach dem Setzen eines Variablenwertes laufen soll, // kann "willSet" und "didSet" benutzt werden var identifier: String = "defaultID" { - // der `willSet` Parameter wird der Variablenname für den neuen Wert sein + // der `willSet` Parameter wird der Variablenname für den neuen Wert sein willSet(someIdentifier) { print(someIdentifier) } } - + init(sideLength: Int) { self.sideLength = sideLength // super.init muss immer aufgerufen werden, wenn eigene Properties initialisiert werden super.init() } - + func shrink() { if sideLength > 0 { sideLength -= 1 } } - + override func getArea() -> Int { return sideLength * sideLength } @@ -26587,7 +26587,7 @@ print(mySquare.sideLength) // 4 // Casten der Instanz let aShape = mySquare as Shape -// Vergleiche Instanzen, nicht äquivalent zum == , welches Objekte vergleicht ("equal to") +// Vergleiche Instanzen, nicht äquivalent zum == , welches Objekte vergleicht ("equal to") if mySquare === mySquare { print("Yep, it's mySquare") } @@ -26598,13 +26598,13 @@ class Circle: Shape { override func getArea() -> Int { return 3 * radius * radius } - + // Ein Fragezeichen nach `init` ist eine optionale Initialisierung, // welche nil zurückgeben kann init?(radius: Int) { self.radius = radius super.init() - + if radius <= 0 { return nil } @@ -26660,7 +26660,7 @@ enum Furniture { case Desk(height: Int) // mit String und Int assoziiert case Chair(String, Int) - + func description() -> String { switch self { case .Desk(let height): @@ -26699,7 +26699,7 @@ protocol ShapeGenerator { class MyShape: Rect { var delegate: TransformShape? - + func grow() { sideLength += 2 @@ -26734,7 +26734,7 @@ extension Int { var customProperty: String { return "This is \(self)" } - + func multiplyBy(num: Int) -> Int { return num * self } @@ -26822,7 +26822,7 @@ Wenn Lisp ein Listen-Prozessor ist, dann ist TCl ein Zeichenketten-Prozessor. Alle Werte sind Zeichenketten. Eine Liste ist ein Zeichenketten-Format. Eine Prozedur-Definition ist ein Zeichenketten-Format. Um leistungsfähig zu sein, werden Tcl-intern diese Zeichenketten in Strukutierter-Form gepuffert. Ein -Beispiel: Der "list" Befehl arbeitet mit diesen internen gepufferten +Beispiel: Der "list" Befehl arbeitet mit diesen internen gepufferten Repräsentationen. Tcl kümmert sich selbständig darum die String-Repräsentationen zu aktualisieren, falls dies im Skript benötigt werden sollten. Das Kopieren- beim-Schreiben-Design von Tcl erlaubt es Skript-Authoren mit großen Daten- @@ -26846,12 +26846,12 @@ Tcl steht dir einfach nicht im Weg. #! /bin/env tclsh ################################################################################ -## 1. Richtlinien +## 1. Richtlinien ################################################################################ # Tcl ist nicht Bash oder C! Das muss gesagt werden, denn standard Shell-Quoting # funktioniert fast mit Tcl. Daher glauben viele sie können diese Syntax für -# Tcl übernehmen. Am Beginn funktioniert das meist, führt aber schnell zu +# Tcl übernehmen. Am Beginn funktioniert das meist, führt aber schnell zu # Frustrationen wenn die Skripte komplexer werden. # Eckige-Klammern sind nur Quoting-Mechanismen, keine Code-Block-Konstruktoren @@ -26860,7 +26860,7 @@ Tcl steht dir einfach nicht im Weg. # und in Zeichenketten die als Listen formattiert sind. ################################################################################ -## 2. Syntax +## 2. Syntax ################################################################################ # Jede Zeile ist ein Befehl. Das erste Wort ist der Name des Befehls, jedes @@ -26870,13 +26870,13 @@ Tcl steht dir einfach nicht im Weg. # Selbst wenn Anführungs-Zeichen verwendet werden, denn sie sind ja keine # String-Konstruktoren, sondern nur Escape-Zeichen. -set greeting1 Sal +set greeting1 Sal set greeting2 ut set greeting3 ations # Strichpunkte begrenzen auch Befehle -set greeting1 Sal; set greeting2 ut; set greeting3 ations +set greeting1 Sal; set greeting2 ut; set greeting3 ations # Das Dollar-Zeichen zeigt eine Variablen-Substitution an. @@ -26914,7 +26914,7 @@ puts lots\nof\n\n\n\n\n\nnewlines set somevar { Das ist ein literales $ Zeichen, diese geschweifte Klammer \} wird nicht als Ende interpretiert. -} +} # Bei einem Wort das in doppelten Anführungszeichen steht verlieren Leerzeichen @@ -26967,7 +26967,7 @@ set greeting "Hello $people::person1::name" ```tcl ################################################################################ -## 3. Einige Notizen +## 3. Einige Notizen ################################################################################ # Jede weitere Funktion ist über Befehle implementiert. Von nun an kommt keine @@ -27000,7 +27000,7 @@ set people::person1::name Neo ################################################################################ -## 4. Befehle +## 4. Befehle ################################################################################ # Berechnungen werde mit dem "expr" Befehl durchgeführt. @@ -27025,7 +27025,7 @@ set c [expr {$a + [set b]}] set c [expr {pow($a,$b)}] -# Mathematische Operatoren sind als Befehle auch im Namensraum +# Mathematische Operatoren sind als Befehle auch im Namensraum # ::tcl::mathop verfügbar. ::tcl::mathop::+ 5 3 @@ -27091,13 +27091,13 @@ while {$i < 10} { # Eine Liste ist eine speziell formatierte Zeichenkette. Im einfachsten Fall # genügen Leerzeichen als Trennzeichen zwischen den einzelnen Werten. -set amounts 10\ 33\ 18 +set amounts 10\ 33\ 18 set amount [lindex $amounts 1] # Geschwungene Klammern und Backslashes können verwendet werden um komplexe # Werte in einer Liste zu formatieren. Eine Liste sieht aus wie ein Skript, -# allerdings verlieren verlieren Zeilenumbrüche und Doppelüunkte ihre +# allerdings verlieren verlieren Zeilenumbrüche und Doppelüunkte ihre # besondere Bedeutung. Diese Funktionalität macht Tcl homoikonisch. Die # folgende Liste enhtält drei Elemente. set values { @@ -27156,7 +27156,7 @@ eval $command ;# Hier passiert eine Fehler, denn der "set" Befehl hat nun zu \ # Dieser Fehler kann auch leicht beim "subst" Befehl passieren. set replacement {Archibald Sorbisol} set command {set name $replacement} -set command [subst $command] +set command [subst $command] eval $command ;# The same error as before: too many arguments to "set" in \ {set name Archibald Sorbisol} @@ -27165,7 +27165,7 @@ eval $command ;# The same error as before: too many arguments to "set" in \ # Befehl zu formatieren. set replacement [list {Archibald Sorbisol}] set command {set name $replacement} -set command [subst $command] +set command [subst $command] eval $command @@ -27229,7 +27229,7 @@ proc countdown {} { #send something back to the initial "coroutine" command yield - set count 3 + set count 3 while {$count > 1} { yield [incr count -1] } @@ -27237,12 +27237,12 @@ proc countdown {} { } coroutine countdown1 countdown coroutine countdown2 countdown -puts [countdown 1] ;# -> 2 -puts [countdown 2] ;# -> 2 -puts [countdown 1] ;# -> 1 -puts [countdown 1] ;# -> 0 +puts [countdown 1] ;# -> 2 +puts [countdown 2] ;# -> 2 +puts [countdown 1] ;# -> 1 +puts [countdown 1] ;# -> 0 puts [coundown 1] ;# -> invalid command name "countdown1" -puts [countdown 2] ;# -> 1 +puts [countdown 2] ;# -> 1 ``` @@ -27294,7 +27294,7 @@ literal_block: | Dieser ganze Block an Text ist der Wert vom Schlüssel literal_block, mit Erhaltung der Zeilenumbrüche. - Das Literal fährt solange fort bis dieses unverbeult ist und die vorherschende Einrückung wird + Das Literal fährt solange fort bis dieses unverbeult ist und die vorherschende Einrückung wird gekürzt. Zeilen, die weiter eingerückt sind, behalten den Rest ihrer Einrückung - @@ -27352,7 +27352,7 @@ json_seq: [3, 2, 1, "Start"] # EXTRA YAML EIGENSCHAFTEN # ############################ -# YAML stellt zusätzlich Verankerung zu Verfügung, welche es einfach machen +# YAML stellt zusätzlich Verankerung zu Verfügung, welche es einfach machen # Inhalte im Dokument zu vervielfältigen. Beide Schlüssel werden den selben Wert haben. verankerter_inhalt: &anker_name Dieser String wird als Wert beider Schlüssel erscheinen. anderer_anker: *anker_name @@ -27437,9 +27437,9 @@ for i=0 to n-1 ### Some Famous DP Problems -- Floyd Warshall Algorithm - Tutorial and C Program source code:http://www.thelearningpoint.net/computer-science/algorithms-all-to-all-shortest-paths-in-graphs---floyd-warshall-algorithm-with-c-program-source-code -- Integer Knapsack Problem - Tutorial and C Program source code: http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---the-integer-knapsack-problem -- Longest Common Subsequence - Tutorial and C Program source code : http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---longest-common-subsequence +- Floyd Warshall Algorithm - Tutorial and C Program source code:http://www.thelearningpoint.net/computer-science/algorithms-all-to-all-shortest-paths-in-graphs---floyd-warshall-algorithm-with-c-program-source-code +- Integer Knapsack Problem - Tutorial and C Program source code: http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---the-integer-knapsack-problem +- Longest Common Subsequence - Tutorial and C Program source code : http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---longest-common-subsequence ## Online Resources @@ -27563,8 +27563,8 @@ filename: css-gr.html.markdown lang: el-gr --- -Η αρχική μορφή του Παγκόσμιου Ιστού αποτελείτο απο καθαρό κείμενο, χωρίς οπτικά αντικείμενα. Με το πέρας -του χρόνου και την εξέλιξη των Φυλλομετρητών, οι πλούσιες σελίδες, σε οπτικά και πολυμεσικά αντικείμενα, +Η αρχική μορφή του Παγκόσμιου Ιστού αποτελείτο απο καθαρό κείμενο, χωρίς οπτικά αντικείμενα. Με το πέρας +του χρόνου και την εξέλιξη των Φυλλομετρητών, οι πλούσιες σελίδες, σε οπτικά και πολυμεσικά αντικείμενα, έγιναν καθημερινότητα. Η CSS μας βοηθάει να διαχωρήσουμε το περιεχόμενο της σελίδας μας (HTML) απο την οπτική της περιγραφή. @@ -27572,7 +27572,7 @@ lang: el-gr Με την CSS ορίζουμε οπτικές ιδιότητες (χρώμα, μέγεθος, κλπ) σε HTML αντικείμενα (H1, div, κλπ). ```css -/* Τα σχόλια εμφανίζονται εντός καθέτου-αστερίσκου, όπως εδώ. +/* Τα σχόλια εμφανίζονται εντός καθέτου-αστερίσκου, όπως εδώ. Δεν υπάρχουν σχόλια μια γραμμής και πολλών. */ /* #################### @@ -27619,7 +27619,7 @@ div { } [otherAttr|='en'] { font-size:smaller; } -/* Μπορούμε να προσθέσουμε μεταξύ τους selectors για να δημιουργήσουμε πιο αυστηρούς. +/* Μπορούμε να προσθέσουμε μεταξύ τους selectors για να δημιουργήσουμε πιο αυστηρούς. Δεν βάζουμε κενά ανάμεσα. */ div.some-class[attr$='ue'] { } @@ -27638,7 +27638,7 @@ div.some-parent.class-name { } /* Ή οποιοδήποτε αντικείμενο που προηγείται */ .i-am-any-element-before ~ .this-element { } -/* Με την βοήθεια των ψευδο-κλάσεων μπορούμε να επιλέξουμε αντικείμενα που βρίσκονται σε μια +/* Με την βοήθεια των ψευδο-κλάσεων μπορούμε να επιλέξουμε αντικείμενα που βρίσκονται σε μια ορισμένη κατάασταση. */ /* π.χ. όταν ο κέρσορας είναι πάνω απο ένα αντικείμενο */ @@ -27659,7 +27659,7 @@ selector:first-child {} /* οποιοδήποτε αντικείμενο είναι το πρώτοτελευταίο παιδί των γονέων του */ selector:last-child {} -/* Όπως και με τις ψευδο-κλάσεις, τα ψευδο-αντικείμενα μας επιτρέπουν τα τροποοιήσουμε συγκεκριμένα +/* Όπως και με τις ψευδο-κλάσεις, τα ψευδο-αντικείμενα μας επιτρέπουν τα τροποοιήσουμε συγκεκριμένα κομμάτια της σελίδας */ /* επιλέγει το ψευδο-αντικείμενο ακριβώς πριν απο το αντικείμενο */ @@ -27668,7 +27668,7 @@ selector::before {} /* επιλέγει το ψευδο-αντικείμενο ακριβώς μετά απο τον αντικείμενο */ selector::after {} -/* Σε σωστά σημεία (όχι πολύ ψηλά στην ιεραρχία) ο αστερίσκος μπορείς να χρησιμοποιηθεί για να +/* Σε σωστά σημεία (όχι πολύ ψηλά στην ιεραρχία) ο αστερίσκος μπορείς να χρησιμοποιηθεί για να επιλέξουμε όλα τα αντικείμενα */ * { } /* όλα τα αντικείμενα της σελίδας */ .parent * { } /* όλους τους απόγονους */ @@ -27679,9 +27679,9 @@ selector::after {} #################### */ selector { - + /* Οι μονάδες μπορούν να είναι είτε απόλυτες είτε σχετικές */ - + /* Σχετικές μονάδες */ width: 50%; /* ποσοστό επί του πλάτους του γονέα */ font-size: 2em; /* πολλαπλασιαστής της αρχικής τιμής του αντικειμένου */ @@ -27690,14 +27690,14 @@ selector { font-size: 2vh; /* ή τους ύψους */ font-size: 2vmin; /* οποιοδήποτε απο αυτα τα δύο είναι το μικρότερο */ font-size: 2vmax; /* ή το μεγαλύτερο */ - + /* Απόλυτες μονάδες */ width: 200px; /* pixels */ font-size: 20pt; /* στιγμες */ width: 5cm; /* εκατοστά */ min-width: 50mm; /* χιλιοστά */ max-width: 5in; /* ίντσες */ - + /* Χρώματα */ color: #F6E; /* σύντομη δεκαεξαδική μορφή */ color: #FF66EE; /* δεκαεξαδική μορφή */ @@ -27708,15 +27708,15 @@ selector { color: transparent; /* όπως και το παραπάνω με a = 0 */ color: hsl(0, 100%, 50%); /* τιμή hsl με ποσοστά (CSS 3) */ color: hsla(0, 100%, 50%, 0.3); /* τιμή hsla με ποσοστά και a */ - + /* Εικόνες μπορούν να τοποθετηθούν στον φόντο ενός αντικειμένου */ background-image: url(/img-path/img.jpg); - + /* Γραμματοσειρές */ font-family: Arial; /* εάν η γραμματοσειρα περιέχει κενά */ font-family: "Courier New"; - /* εάν η πρώτη γραμματοσειρα δε βρεθεί εγκατεστημένη στο Λειτουργικό Σύστυμα, αυτόματα + /* εάν η πρώτη γραμματοσειρα δε βρεθεί εγκατεστημένη στο Λειτουργικό Σύστυμα, αυτόματα επιλέγετε η δεύτερη, κ.κ.ε. */ font-family: "Courier New", Trebuchet, Arial, sans-serif; } @@ -27743,8 +27743,8 @@ selector { ## Ειδικότητα των κανόνων (Cascading απο το αγγλικό τίτλο Cascading Style Sheets) -Ένα αντικείμενο μπορεί να στοχευθεί απο πολλούς κανόνες και μπορεί η ίδια ιδιότητα να -περιλαμβάνετε σε πολλούς κανόνες. Σε αυτές της περιπτώσεις υπερισχύει πάντα ο πιο ειδικός +Ένα αντικείμενο μπορεί να στοχευθεί απο πολλούς κανόνες και μπορεί η ίδια ιδιότητα να +περιλαμβάνετε σε πολλούς κανόνες. Σε αυτές της περιπτώσεις υπερισχύει πάντα ο πιο ειδικός κανόνας και απο αυτούς, αυτός που εμφανίζεται τελευταίος. ```css @@ -27779,7 +27779,7 @@ p { property: value !important; } ## Συμβατότητα -Τα περισσότερα απο τα παραπάνω ήδη υποστηρίζονται απο τους γνωστούς φυλλομετρητές. Άλλα θα πρέπει +Τα περισσότερα απο τα παραπάνω ήδη υποστηρίζονται απο τους γνωστούς φυλλομετρητές. Άλλα θα πρέπει πάντα να ελέγχουμε πρωτου τους χρησιμοποιήσουμε. ## Περισσότερα @@ -27813,7 +27813,7 @@ translators: lang: el-gr --- -H Java είναι μία γενικού-σκοπού, συντρέχων (concurrent), βασισμένη σε κλάσεις, +H Java είναι μία γενικού-σκοπού, συντρέχων (concurrent), βασισμένη σε κλάσεις, αντικειμενοστρεφής (object oriented) γλώσσα προγραμματισμού. [Διαβάστε περισσότερα εδώ.](http://docs.oracle.com/javase/tutorial/java/) @@ -27823,7 +27823,7 @@ H Java είναι μία γενικού-σκοπού, συντρέχων (concur Τα σχόλια πολλών γραμμών μοιάζουν κάπως έτσι. */ /** -Τα σχόλια JavaDoc μοιάζουν κάπως έτσι. Χρησιμοποιούνται για να περιγράψουν την +Τα σχόλια JavaDoc μοιάζουν κάπως έτσι. Χρησιμοποιούνται για να περιγράψουν την Κλάση ή διάφορα χαρακτηριστικά της Κλάσης. */ @@ -27832,15 +27832,15 @@ import java.util.ArrayList; // Εισαγωγή όλων των κλάσεων που βρίσκονται εντός του πακέτου java.security import java.security.*; -// Κάθε αρχείο .java περιέχει μία δημόσια(public) κλάση εξωτερικού-επιπέδου +// Κάθε αρχείο .java περιέχει μία δημόσια(public) κλάση εξωτερικού-επιπέδου // (outer-level), η οποία έχει το ίδιο ονομα με το αρχείο. public class LearnJava { - // Για να τρέξει ένα πρόγραμμα java, πρέπει να έχει μία κύρια μέθοδο (main + // Για να τρέξει ένα πρόγραμμα java, πρέπει να έχει μία κύρια μέθοδο (main // method) ως αρχικό σημείο. public static void main (String[] args) { - // Χρησιμοποιούμε τη μέθοδο System.out.println() για να τυπώσουμε + // Χρησιμοποιούμε τη μέθοδο System.out.println() για να τυπώσουμε // γραμμές. System.out.println("Hello World!"); System.out.println( @@ -27848,12 +27848,12 @@ public class LearnJava { " Double: " + 3.14 + " Boolean: " + true); - // Για να τυπώσουμε χωρίς να τυπωθεί αλλαγή γραμμής (newline), + // Για να τυπώσουμε χωρίς να τυπωθεί αλλαγή γραμμής (newline), // χρησιμοποιούμε System.out.print(). System.out.print("Hello "); System.out.print("World"); - // Χρησιμοποιούμε τη μέθοδο System.out.printf() για έυκολη μορφοποίηση + // Χρησιμοποιούμε τη μέθοδο System.out.printf() για έυκολη μορφοποίηση // της εκτύπωσης. System.out.printf("pi = %.5f", Math.PI); // => pi = 3.14159 @@ -27864,10 +27864,10 @@ public class LearnJava { /* * Δήλωση Μεταβλητών */ - // Δηλώνουμε μία μεταβλητή χρησιμοποιώντας τη μορφή + // Δηλώνουμε μία μεταβλητή χρησιμοποιώντας τη μορφή // <Τύπος Μεταβλητής> <Όνομα Μεταβλητής> int fooInt; - // Δηλώνουμε πολλαπλές μεταβλητές ίδιου τύπου χρησιμοποιώντας τη μορφή + // Δηλώνουμε πολλαπλές μεταβλητές ίδιου τύπου χρησιμοποιώντας τη μορφή // <Τύπος> <Όνομα1>, <Όνομα2>, <Όνομα3> int fooInt1, fooInt2, fooInt3; @@ -27875,10 +27875,10 @@ public class LearnJava { * Αρχικοποίηση Μεταβλητών */ - // Αρχικοποιούμε μια μεταβλητή χρησιμοποιώντας τη μορφή + // Αρχικοποιούμε μια μεταβλητή χρησιμοποιώντας τη μορφή // <τύπος> <όνομα> = <τιμή> int fooInt = 1; - // Αρχικοποιούμε πολλαπλές μεταβλητές ιδίου τύπου με την ίδια τιμή + // Αρχικοποιούμε πολλαπλές μεταβλητές ιδίου τύπου με την ίδια τιμή // χρησιμοποιώντας <τύπος> <Όνομα1>, <Όνομα2>, <Όνομα3> = <τιμή> int fooInt1, fooInt2, fooInt3; fooInt1 = fooInt2 = fooInt3 = 1; @@ -27901,17 +27901,17 @@ public class LearnJava { // Long - 64-bit signed two's complement integer // (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807) long fooLong = 100000L; - // Το L χρησιμοποιείται για να δηλώσει ότι η συγκεκριμένη τιμή της + // Το L χρησιμοποιείται για να δηλώσει ότι η συγκεκριμένη τιμή της // μεταβλητής είναι τύπου Long; - // Ό,τιδήποτε χρησιμοποιείται χωρίς αυτό τυχαίνει μεταχείρισης όπως + // Ό,τιδήποτε χρησιμοποιείται χωρίς αυτό τυχαίνει μεταχείρισης όπως // μία τιμή μεταβλητής integer by default. // Σημείωση: Η Java δεν έχει unsigned τύπους. // Float - Single-precision 32-bit IEEE 754 Floating Point - // 2^-149 <= float <= (2-2^-23) * 2^127 + // 2^-149 <= float <= (2-2^-23) * 2^127 float fooFloat = 234.5f; - // f or F χρησιμοποιείται για να δηλώσει ότι η συγκεκριμένη τιμή + // f or F χρησιμοποιείται για να δηλώσει ότι η συγκεκριμένη τιμή // μεταβλητής είναι τύπου float; // αλλιώς τυγχαίνει μεταχείρισης όπως μία τιμή μεταβλητής double. @@ -27926,7 +27926,7 @@ public class LearnJava { // Char - Ένας μόνο χαρακτήρας 16-bit Unicode char fooChar = 'A'; - // Οι μεταβλητές final δεν μπορούν να πάρουν άλλη τιμή + // Οι μεταβλητές final δεν μπορούν να πάρουν άλλη τιμή // μετά την αρχικοποίηση τους, final int HOURS_I_WORK_PER_WEEK = 9001; // αλλά μπορούν να αρχικοποιηθούν αργότερα. @@ -27936,47 +27936,47 @@ public class LearnJava { // BigInteger - Immutable αυθαίρετης-ακρίβειας ακέραιος // - // Ο BigInteger είναι ένας τύπος δεδομένων ο οποίος επιτρέπει στους - // προγραμματιστές να χειρίζονται ακέραιους μεγαλύτερους από 64-bits. - // Οι ακέραιοι αποθηκεύονται ως πίνακας από bytes και τυχαίνουν - // επεξεργασίας χρησιμοποιώντας συναρτήσεις εσωματωμένες στην κλάση + // Ο BigInteger είναι ένας τύπος δεδομένων ο οποίος επιτρέπει στους + // προγραμματιστές να χειρίζονται ακέραιους μεγαλύτερους από 64-bits. + // Οι ακέραιοι αποθηκεύονται ως πίνακας από bytes και τυχαίνουν + // επεξεργασίας χρησιμοποιώντας συναρτήσεις εσωματωμένες στην κλάση // BigInteger - // Ένας BigInteger μπορεί να αρχικοποιηθεί χρησιμοποιώντας ένα πίνακα + // Ένας BigInteger μπορεί να αρχικοποιηθεί χρησιμοποιώντας ένα πίνακα // από bytes ή γραμματοσειρά (string). - + BigInteger fooBigInteger = new BigInteger(fooByteArray); // BigDecimal - Immutable, αυθαίρετης-ακρίβειας, εμπρόσημος (signed) // δεκαδικός αριθμός // - // Ένας BigDecimal παίρνει δύο μέρη: Μία αυθαίρετης ακρίβειας, - // ακέραια, unscaled τιμή και μία κλιμάκωση(scale) ως ένα 32-bit + // Ένας BigDecimal παίρνει δύο μέρη: Μία αυθαίρετης ακρίβειας, + // ακέραια, unscaled τιμή και μία κλιμάκωση(scale) ως ένα 32-bit // ακέραιο (integer). // - // Ο BigDecimal επιτρέπει στον προγραμματιστή να έχει πλήρη έλεγχο - // όσον αφορά τη δεκαδική στρογγυλοποίηση (rounding). Προτείνεται η - // χρήση του BigDecimal με τιμές νομισμάτων και όπου απαιτείται η + // Ο BigDecimal επιτρέπει στον προγραμματιστή να έχει πλήρη έλεγχο + // όσον αφορά τη δεκαδική στρογγυλοποίηση (rounding). Προτείνεται η + // χρήση του BigDecimal με τιμές νομισμάτων και όπου απαιτείται η // ακριβής δεκαδική ακρίβεια. // // Ο BigDecimal μπορεί να αρχικοποιηθεί με int, long, double ή String - // ή με την αρχικοποίηση της unscaled τιμής (BigInteger) και της + // ή με την αρχικοποίηση της unscaled τιμής (BigInteger) και της // κλίμακας (scale) (int). BigDecimal fooBigDecimal = new BigDecimal(fooBigInteger, fooInt); - - // Χρειάζεται να είμαστε προσεκτικοί με τον κατασκευαστή (constructor) - // ο οποίος παίρνει float ή double καθώς η ανακρίβεια του float/double + + // Χρειάζεται να είμαστε προσεκτικοί με τον κατασκευαστή (constructor) + // ο οποίος παίρνει float ή double καθώς η ανακρίβεια του float/double // θα αντιγραφεί στον BigDecimal. - // Είναι προτιμότερο να χρησιμοποιείται ο κατασκευαστής String (String + // Είναι προτιμότερο να χρησιμοποιείται ο κατασκευαστής String (String // constructor) όταν χρειάζεται ακριβής τιμή. - + BigDecimal tenCents = new BigDecimal("0.1"); // Strings - Γραμματοσειρές String fooString = "My String Is Here!"; - // Ο χαρακτήρας \n είναι ένας χαρακτήρας διαφυγής (escaped character) + // Ο χαρακτήρας \n είναι ένας χαρακτήρας διαφυγής (escaped character) // ο οποίος ξεκινά μία νέα γραμμή String barString = "Printing on a new line?\nNo Problem!"; // Ο χαρακτήρας \t είναι ένας χαρακτήρας διαφυγής (escaped character) @@ -27989,21 +27989,21 @@ public class LearnJava { // Πίνακες (Arrays) // Το μέγεθος του πίνακα πρέπει να αποφασιστεί με την αρχικοποίηση του // πίνακα - // Οι ακόλουθες μορφές μπορούν να χρησιμοποιηθούν για την δήλωση ενός - // πίνακα + // Οι ακόλουθες μορφές μπορούν να χρησιμοποιηθούν για την δήλωση ενός + // πίνακα // <Τυπος δεδομένων>[] <Όνομα Μεταβλητής> = new <Τύπος Δεδομένων>[<μέγεθος πίνακα>]; // <Τυπος δεδομένων> <Όνομα Μεταβλητής>[] = new <Τυπος δεδομένων>[<μέγεθος πίνακα>]; int[] intArray = new int[10]; String[] stringArray = new String[1]; boolean boolArray[] = new boolean[100]; - // Ακόμη ένας τρόπος για να δηλώσεις (to declare) και να + // Ακόμη ένας τρόπος για να δηλώσεις (to declare) και να // αρχικοποιήσεις ένα πίνακα int[] y = {9000, 1000, 1337}; String names[] = {"Bob", "John", "Fred", "Juan Pedro"}; boolean bools[] = new boolean[] {true, false, false}; - // Ευρετηρίαση (indexing) ενός πίνακα - Πρόσβαση (accessing) ενός + // Ευρετηρίαση (indexing) ενός πίνακα - Πρόσβαση (accessing) ενός // στοιχείου System.out.println("intArray @ 0: " + intArray[0]); @@ -28012,25 +28012,25 @@ public class LearnJava { System.out.println("intArray @ 1: " + intArray[1]); // => 1 // Παρόμοια - // ArrayLists - Παρόμοιοι με τους πίνακες με τη διαφορά ότι προσφέρουν - // περισσότερη λειτουργικότητα και το μέγεθος είναι ευμετάβλητο + // ArrayLists - Παρόμοιοι με τους πίνακες με τη διαφορά ότι προσφέρουν + // περισσότερη λειτουργικότητα και το μέγεθος είναι ευμετάβλητο // (mutable). - // LinkedLists - Υλοποίηση διπλά-συνδεδεμένης λίστας(doubly-linked - // list). Όλες οι λειτουργίες εκτελώνται όπως αναμένεται σε μία διπλά + // LinkedLists - Υλοποίηση διπλά-συνδεδεμένης λίστας(doubly-linked + // list). Όλες οι λειτουργίες εκτελώνται όπως αναμένεται σε μία διπλά // συνδεδεμένη (doubly-linked) λίστα. // Maps - Ένα σύνολο αντικειμένων τα οποία συνδέου (map) κλειδιά (keys) - // σε τιμές (values). Ο Map είναι διεπαφή (interface) και συνεπώς δεν + // σε τιμές (values). Ο Map είναι διεπαφή (interface) και συνεπώς δεν // μπορεί να συγκεκριμενοποίηθεί (instantiated). - // Ο τύπος των κλειδιών και των τιμών τα οποία συμπεριλαμβάνονται σε - // ένα Map πρέπει να καθοριστεί κατά τη διάρκεια της - // συγκεκριμενοποίησης (instantiation) της κλάσης που υλοποιεί τη - // διεπαφή Map. Κάθε κλειδί (key) μπορεί να συνδεθεί (map) σε μόνο μία - // αντίστοιχη τιμή και κάθε κλειδί μπορεί να εμφανιστεί μόνο μία φορά + // Ο τύπος των κλειδιών και των τιμών τα οποία συμπεριλαμβάνονται σε + // ένα Map πρέπει να καθοριστεί κατά τη διάρκεια της + // συγκεκριμενοποίησης (instantiation) της κλάσης που υλοποιεί τη + // διεπαφή Map. Κάθε κλειδί (key) μπορεί να συνδεθεί (map) σε μόνο μία + // αντίστοιχη τιμή και κάθε κλειδί μπορεί να εμφανιστεί μόνο μία φορά // (no duplicates). - // HashMaps - Η κλάση αυτή χρησιμοποιεί ένα πίνακα-κατακερματισμού - // (hashtable) για να υλοποιήσει τη διεπαφή Map. Αυτό επιτρέπει το - // χρόνο εκτέλεσης βασικών λειτουργιών, όπως της get και insert - // στοιχείου να παραμείνει σταθερός (constant) ακόμη και για μεγάλα + // HashMaps - Η κλάση αυτή χρησιμοποιεί ένα πίνακα-κατακερματισμού + // (hashtable) για να υλοποιήσει τη διεπαφή Map. Αυτό επιτρέπει το + // χρόνο εκτέλεσης βασικών λειτουργιών, όπως της get και insert + // στοιχείου να παραμείνει σταθερός (constant) ακόμη και για μεγάλα // σύνολα (sets.) @@ -28122,14 +28122,14 @@ public class LearnJava { System.out.println("fooDoWhile Value: " + fooDoWhile); // Επανάληψη For (For Loop) - // Δομή επανάληψης for => + // Δομή επανάληψης for => // for(<Αρχική Δήλωση>; <προυπόθεση (conditional)>; <βήμα (step)>) for (int fooFor = 0; fooFor < 10; fooFor++) { System.out.println(fooFor); // Iterated 10 times, fooFor 0->9 } System.out.println("fooFor Value: " + fooFor); - + // Έξοδος από εμφωλευμένη (nested) επανάληψη For με ετικέττα (Label) outer: for (int i = 0; i < 10; i++) { @@ -28140,10 +28140,10 @@ public class LearnJava { } } } - + // Επανάληψη For Each - // Η επανάληψη for είναι επίσης ικανή να επαναλαμβάνεται τόσο σε - // πίνακες όσο και σε αντικείμενα τα οποία υλοποιούν τη διεπαφή + // Η επανάληψη for είναι επίσης ικανή να επαναλαμβάνεται τόσο σε + // πίνακες όσο και σε αντικείμενα τα οποία υλοποιούν τη διεπαφή // Iterable. int[] fooList = {1, 2, 3, 4, 5, 6, 7, 8, 9}; // Σύνταξη της επανάληψης for each => for (<αντικείμενο> : ) @@ -28157,8 +28157,8 @@ public class LearnJava { // Switch Case // Ένα switch δουλέυει με byte, short, char, και int τύπους δεδομένων. - // Δουλέυει επίσης με τύπους enumerated (Συζήτηση στους τύπους Enum), - // τη κλάση String, και μερικές ειδικές περιπτώσεις οι οποίες + // Δουλέυει επίσης με τύπους enumerated (Συζήτηση στους τύπους Enum), + // τη κλάση String, και μερικές ειδικές περιπτώσεις οι οποίες // περιλαμβάνουν primitive τύπους: Character, Byte, Short, and Integer. int month = 3; String monthString; @@ -28173,7 +28173,7 @@ public class LearnJava { break; } System.out.println("Switch Case Result: " + monthString); - + // Αρχίζοντας από τη Java 7, switching για Strings δουλεύει έτσι: String myAnswer = "maybe"; switch(myAnswer) { @@ -28192,9 +28192,9 @@ public class LearnJava { } // Συντομογραφία του Conditional - // Μπορείς να χρησιμοποιήσεις τον τελεστή '?' για γρήγορες αναθέσεις ή - // logic forks. Διαβάζεται ως "Αν η (πρόταση) είναι αληθής, - // χρησιμοποίησε <την πρώτη τιμή>, αλλιώς, χρησιμοποία <την δεύτερη + // Μπορείς να χρησιμοποιήσεις τον τελεστή '?' για γρήγορες αναθέσεις ή + // logic forks. Διαβάζεται ως "Αν η (πρόταση) είναι αληθής, + // χρησιμοποίησε <την πρώτη τιμή>, αλλιώς, χρησιμοποία <την δεύτερη // τιμή>" int foo = 5; String bar = (foo < 10) ? "A" : "B"; @@ -28219,8 +28219,8 @@ public class LearnJava { // String // Typecasting - // Μπορείς επίσης να κάνεις cast αντικείμενα Java. Υπάρχουν πολλές - // λεπτομέρειες και μερικές πραγματεύονται κάποιες πιο προχωρημένες + // Μπορείς επίσης να κάνεις cast αντικείμενα Java. Υπάρχουν πολλές + // λεπτομέρειες και μερικές πραγματεύονται κάποιες πιο προχωρημένες // ένοιες. Για δες εδώ: // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html @@ -28237,17 +28237,17 @@ public class LearnJava { Bicycle trek = new Bicycle(); // Κλήση μεθόδων του αντικειμένου - trek.speedUp(3); // Πάντοτε πρέπει να χρησιμοποιείς μεθόδους setter + trek.speedUp(3); // Πάντοτε πρέπει να χρησιμοποιείς μεθόδους setter // και getter trek.setCadence(100); - // Το toString επιστρέφει την αναπαράσταση σε String μορφή του + // Το toString επιστρέφει την αναπαράσταση σε String μορφή του // αντικειμένου αυτού. System.out.println("trek info: " + trek.toString()); // Double Brace Initialization - // Η Γλώσσα Java δεν έχει σύνταξη για το πως να δημιουργήσεις static - // Collections με κάποιο εύκολο τρόπο. Συνήθως θα το κάνεις αυτό με + // Η Γλώσσα Java δεν έχει σύνταξη για το πως να δημιουργήσεις static + // Collections με κάποιο εύκολο τρόπο. Συνήθως θα το κάνεις αυτό με // τον παρακάτω τρόπο: private static final Set COUNTRIES = new HashSet(); @@ -28270,15 +28270,15 @@ public class LearnJava { // Η πρώτη αγκύλη δημιουργεί μία νέα AnonymousInnerClass και η // δεύτερη δηλώνει ένα instance initializer block. Το block // καλείται όταν η ανώνυμη εσωτερική κλάση δημιουργηθεί. - // Η μέθοδος αύτή δεν δουλεύει μόνο για τις Collections, αλλά για όλες + // Η μέθοδος αύτή δεν δουλεύει μόνο για τις Collections, αλλά για όλες // τις non-final κλάσεις. } // Τέλος μεθόδου main } // Τέλος κλάσης LearnJava -// Μπορείς να κάνεις include άλλες, όχι-δημόσιες (non-public) -// εξωτερικού-επιπέδου (outer-level) κλάσεις σε ένα αρχείο .java, αλλά δεν +// Μπορείς να κάνεις include άλλες, όχι-δημόσιες (non-public) +// εξωτερικού-επιπέδου (outer-level) κλάσεις σε ένα αρχείο .java, αλλά δεν // είναι καλή πρακτική. Αντί αυτού, διαχώρησε τις κλάσεις σε ξεχωριστά αρχεία. // Σύνταξη Δήλωσης Κλάσης (Class Declaration Syntax): @@ -28291,19 +28291,19 @@ class Bicycle { // Πεδία/μεταβλητές της Κλάσης Bicycle // Public(Δημόσιες): Μπορούν να γίνουν προσβάσιμες από παντού - public int cadence; + public int cadence; // Private(Ιδιωτικές): Προσβάσιμες μόνο εντός της κλάσης - private int speed; + private int speed; // Protected(Προστατευμένες): Προσβάσιμες από την κλάση και τις υποκλάσεις (subclasses) της - protected int gear; + protected int gear; String name; // Προκαθορισμένο: Προσβάσιμη μόνο εντός του πακέτου static String className; // Static μεταβλητή κλάσης - // Static block - // H Java δεν υποστηρίζει υλοποίησεις στατικών κατασκευαστών (static - // constructors), αλλά έχει ένα static block το οποίο μπορεί να - // χρησιμοποιηθεί για να αρχικοποιήσει στατικές μεταβλητές (static + // Static block + // H Java δεν υποστηρίζει υλοποίησεις στατικών κατασκευαστών (static + // constructors), αλλά έχει ένα static block το οποίο μπορεί να + // χρησιμοποιηθεί για να αρχικοποιήσει στατικές μεταβλητές (static // variables). Το block αυτό θα καλεσθεί όταν η κλάση φορτωθεί. static { className = "Bicycle"; @@ -28365,7 +28365,7 @@ class Bicycle { return name; } - //Μέθοδος η οποία επιστρέφει ως String τις τιμές των χαρακτηριστικών του + //Μέθοδος η οποία επιστρέφει ως String τις τιμές των χαρακτηριστικών του // αντικειμένου. @Override // Χρησιμοποιείται, καθώς η συγκεκριμένη μέθοδος κληρονομήθηκε από τη κλάση Object. public String toString() { @@ -28384,10 +28384,10 @@ class PennyFarthing extends Bicycle { super(startCadence, startSpeed, 0, "PennyFarthing"); } - // Χρειάζεται να μαρκάρεις τη μέθοδο την οποία κάνεις overriding + // Χρειάζεται να μαρκάρεις τη μέθοδο την οποία κάνεις overriding // χρησιμοποιώντας ένα @annotation. - // Για να μάθεις περισσότερα σχετικά με το τι είναι οι επισημάνσεις - // (annotations) και τον σκοπό τους δες αυτό: + // Για να μάθεις περισσότερα σχετικά με το τι είναι οι επισημάνσεις + // (annotations) και τον σκοπό τους δες αυτό: // http://docs.oracle.com/javase/tutorial/java/annotations/ @Override public void setGear(int gear) { @@ -28404,7 +28404,7 @@ class PennyFarthing extends Bicycle { // Παράδειγμα - Food: public interface Edible { - public void eat(); // Κάθε κλάση η οποία υλοποιεί τη διεπαφή αυτή πρέπει + public void eat(); // Κάθε κλάση η οποία υλοποιεί τη διεπαφή αυτή πρέπει // να υλοποιήσει τη συγκεκριμένη μέθοδο. } @@ -28415,7 +28415,7 @@ public interface Digestible { // Μπορούμε να δημιουργήσουμε μία κλάση η οποία υλοποιεί και τις δύο αυτές διεπαφές. public class Fruit implements Edible, Digestible { - + @Override public void eat() { // ... @@ -28454,11 +28454,11 @@ public class ExampleClass extends ExampleClassParent implements InterfaceOne, // οι οποίες πρέπει να οριστούν σε μία κλάση παιδί (child class). // Παρόμοια με τις διεπαφές (interfaces), οι abstract κλάσεις δεν μπορούν να // γίνουν instantiated, αλλά αντί αυτού πρέπει να γίνει extend και οι abstract -// μεθόδοι πρέπει να οριστούν. Διαφορετικά από τις Διεπαφές, οι abstract +// μεθόδοι πρέπει να οριστούν. Διαφορετικά από τις Διεπαφές, οι abstract // κλάσεις μπορούν να περιέχουν τόσο υλοποιημένες όσο και abstract μεθόδους. -// Οι μεθόδοι σε μια Διεπαφή δεν μπορούν να έχουν σώμα (δεν είναι υλοποιημένες -// δηλαδή εκτός εάν η μέθοδος είναι στατική και οι μεταβλητές είναι final by -// default αντίθετα απο μία abstract κλάση. Επίσης, οι abstract κλάσεις +// Οι μεθόδοι σε μια Διεπαφή δεν μπορούν να έχουν σώμα (δεν είναι υλοποιημένες +// δηλαδή εκτός εάν η μέθοδος είναι στατική και οι μεταβλητές είναι final by +// default αντίθετα απο μία abstract κλάση. Επίσης, οι abstract κλάσεις // ΜΠΟΡΟΥΝ να έχουν την μέθοδο "main". public abstract class Animal @@ -28468,18 +28468,18 @@ public abstract class Animal // Οι μεθόδοι μπορούν να έχουν σώμα (body) public void eat() { - System.out.println("I am an animal and I am Eating."); + System.out.println("I am an animal and I am Eating."); // Σημείωση: Μπορούμε να έχουμε πρόσβαση σε ιδιωτικές (private) μεταβλητές εδώ. age = 30; } - // Δεν χρειάζεται να αρχικοποιηθεί, εντούτοις σε ένα interface μία + // Δεν χρειάζεται να αρχικοποιηθεί, εντούτοις σε ένα interface μία // μεταβλητή είναι implicitly final και έτσι χρειάζεται να αρχικοποιηθεί protected int age; public void printAge() { - System.out.println(age); + System.out.println(age); } // Οι Abstract κλάσεις μπορούν να έχουν συνάρτηση main. @@ -28522,13 +28522,13 @@ class Dog extends Animal // // Δήλωση μεθόδων // } -// Οι κλάσεις Final είναι κλάσεις οι οποίες δεν μπορούν να κληρονομηθούν και -// συνεπώς είναι final child. In a way, final classes are the opposite of -// abstract classes because abstract classes must be extended, but final +// Οι κλάσεις Final είναι κλάσεις οι οποίες δεν μπορούν να κληρονομηθούν και +// συνεπώς είναι final child. In a way, final classes are the opposite of +// abstract classes because abstract classes must be extended, but final // classes cannot be extended. public final class SaberToothedCat extends Animal { - // Σημείωση ότι χρειάζεται και πάλι να κάνουμε override τις abstract + // Σημείωση ότι χρειάζεται και πάλι να κάνουμε override τις abstract // μεθόδους στην abstract κλάση. @Override public void makeSound() @@ -28543,7 +28543,7 @@ public abstract class Mammal() // Σύνταξη μίας Final μεθόδου: // <Προσδιοριστής πρόσβασης (access modifier)> final <τύπος επιστροφής> <Όνομα μεθόδου>() - // Οι Final μεθόδοι, όπως και οι final κλάσεις δεν μπορούν να γίνουν + // Οι Final μεθόδοι, όπως και οι final κλάσεις δεν μπορούν να γίνουν // overridden από κλάση παιδί, // και είναι συνεπώς η τελική υλοποίηση της μεθόδου. public final boolean isWarmBlooded() @@ -28555,51 +28555,51 @@ public abstract class Mammal() // Τύποι Enum // -// Ένας τύπος enum είναι ένας ειδικός τύπος δεδομένων, ο οποίος επιτρέπει σε -// μια μεταβλητή να είναι ένα σύνολο από προκαθορισμένες σταθερές. Η μεταβλητή -// πρέπει να είναι ίση με μία από τις τιμές αυτές που έχουν προκαθοριστεί. -// Επειδή είναι σταθερές, τα ονόματα ενός enum πεδίου γράφονται με κεφαλαίους -// χαρακτήρες. Στην γλώσσα προγραμματισμού Java, ορίζεις ένα τύπο enum -// χρησιμοποιώντας τη δεσμευμένη λέξη enum. Για παράδειγμα, θα μπορούσες να +// Ένας τύπος enum είναι ένας ειδικός τύπος δεδομένων, ο οποίος επιτρέπει σε +// μια μεταβλητή να είναι ένα σύνολο από προκαθορισμένες σταθερές. Η μεταβλητή +// πρέπει να είναι ίση με μία από τις τιμές αυτές που έχουν προκαθοριστεί. +// Επειδή είναι σταθερές, τα ονόματα ενός enum πεδίου γράφονται με κεφαλαίους +// χαρακτήρες. Στην γλώσσα προγραμματισμού Java, ορίζεις ένα τύπο enum +// χρησιμοποιώντας τη δεσμευμένη λέξη enum. Για παράδειγμα, θα μπορούσες να // καθορίσεις ένα τύπο enum με όνομα days-of-the-week ως: public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, - THURSDAY, FRIDAY, SATURDAY + THURSDAY, FRIDAY, SATURDAY } // Μπορούμε να χρησιμοποιήσουμε τον enum Day όπως παρακάτω: public class EnumTest { - + // Μεταβλητή Enum Day day; - + public EnumTest(Day day) { this.day = day; } - + public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println("Mondays are bad."); break; - + case FRIDAY: System.out.println("Fridays are better."); break; - - case SATURDAY: + + case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); break; - + default: System.out.println("Midweek days are so-so."); break; } } - + public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); // => Mondays are bad. @@ -28608,9 +28608,9 @@ public class EnumTest { } } -// Οι τύποι Enum είναι πολύ πιο δυνατοί από όσο έχουμε δείξει πιο πάνω. +// Οι τύποι Enum είναι πολύ πιο δυνατοί από όσο έχουμε δείξει πιο πάνω. // Το σώμα του enum (enum body) μπορεί να περιέχει μεθόδους και άλλα πεδία. -// Μπορείς να δεις περισσότερα στο +// Μπορείς να δεις περισσότερα στο // https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ``` @@ -28669,7 +28669,7 @@ translators: lang: el-gr --- -H Racket είναι μια γενικού σκοπού, πολυ-υποδειγματική γλώσσα προγραμματισμού που ανήκει +H Racket είναι μια γενικού σκοπού, πολυ-υποδειγματική γλώσσα προγραμματισμού που ανήκει στην οικογένεια της Lisp/Scheme ```racket @@ -28768,7 +28768,7 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Μπορούμε να δημιουργήσουμε μεταβλητές ;; χρησιμοποιώντας το define. -;; Ένα όνομα μεταβλητής μπορεί να χρησιμοποιεί οποιονδήποτε +;; Ένα όνομα μεταβλητής μπορεί να χρησιμοποιεί οποιονδήποτε ;; χαρακτήρα, εκτός από τους: ()[]{}",'`;#|\ (define some-var 5) some-var ; => 5 @@ -29463,7 +29463,7 @@ y = 20 // το y είναι τώρα 20 /* Η Scala είναι στατικού τύπου γλώσσα, εν τούτοις προσέξτε ότι στις παραπάνω δηλώσεις , δεν προσδιορίσαμε κάποιον τύπο. Αυτό συμβαίνει λόγω ενός - χαρακτηριστικού της Scala που λέγεται συμπερασματολογία τύπων. Στις + χαρακτηριστικού της Scala που λέγεται συμπερασματολογία τύπων. Στις περισσότερες των περιπτώσεων, ο μεταγλωττιστής της Scala μπορεί να μαντέψει ποιος είναι ο τύπος μιας μεταβλητής. Μπορούμε να δηλώσουμε αναλυτικά τον τύπο μιας μεταβλητής ως εξής: @@ -29472,9 +29472,9 @@ val z: Int = 10 val a: Double = 1.0 /* - Προσέξτε ότι υπάρχει αυτόματη μετατροπή από ακέραιο (Int) σε διπλής - ακρίβειας (Double), και συνεπώς το αποτέλεσμα είναι 10.0 και όχι 10. -*/ + Προσέξτε ότι υπάρχει αυτόματη μετατροπή από ακέραιο (Int) σε διπλής + ακρίβειας (Double), και συνεπώς το αποτέλεσμα είναι 10.0 και όχι 10. +*/ val b: Double = 10 // Λογικές τιμές @@ -29497,8 +29497,8 @@ true == false // false /* - Αξιολογώντας μια έκφραση στο REPL, σας δίνεται ο τύπος και - η τιμή του αποτελέσματος + Αξιολογώντας μια έκφραση στο REPL, σας δίνεται ο τύπος και + η τιμή του αποτελέσματος */ 1 + 7 @@ -29512,7 +29512,7 @@ true == false // false τύπου Int με τιμή 8 Σημειώστε ότι το "res29" είναι ένα σειριακά δημιουργούμενο όνομα μεταβλητής - για να αποθηκεύονται τα αποτελέσματα των εκφράσεων που έχετε πληκτρολογήσει + για να αποθηκεύονται τα αποτελέσματα των εκφράσεων που έχετε πληκτρολογήσει και συνεπώς η έξοδός σας μπορεί να διαφέρει. */ @@ -29526,7 +29526,7 @@ true == false // false "hello world".substring(2, 6) "hello world".replace("C", "3") -// Έχουν επίσης μερικές επιπλέον μεθόδους Scala. +// Έχουν επίσης μερικές επιπλέον μεθόδους Scala. // Δείτε επίσης : scala.collection.immutable.StringOps "hello world".take(5) "hello world".drop(5) @@ -29552,7 +29552,7 @@ raw"New line feed: \n. Carriage return: \r." // => "New line feed: \n. Carriage // λ.χ ένα διπλό εισαγωγικό μέσα σε ένα αλφαριθμητικό : "They stood outside the \"Rose and Crown\"" // => "They stood outside the "Rose and Crown"" -/* +/* Τα τριπλά διπλά-εισαγωγικά επιτρέπουν στα αλφαριθμητικά να εκτείνονται σε πολλαπλές γραμμές και να περιέχουν διπλά εισαγωγικά */ @@ -29620,11 +29620,11 @@ val weirdSum: (Int, Int) => Int = (_ * 2 + _ * 3) addOne(5) // => 6 weirdSum(2, 4) // => 16 -// Η δεσμευμένη λέξη return υπάρχει στην Scala , αλλά επιστρέφει μόνο +// Η δεσμευμένη λέξη return υπάρχει στην Scala , αλλά επιστρέφει μόνο // από το πιο εσωτερικό def που την περικλείει. // ΠΡΟΣΟΧΗ: Η χρήση του return στην Scala είναι επιρρεπής σε λάθη // και θα πρέπει να αποφεύγεται. -// Δεν έχει καμία επίδραση στις ανώνυμες συναρτήσεις. Για παράδειγμα: +// Δεν έχει καμία επίδραση στις ανώνυμες συναρτήσεις. Για παράδειγμα: def foo(x: Int): Int = { val anonFunc: Int => Int = { z => if (z > 5) @@ -29645,8 +29645,8 @@ val r = 1 to 5 r.foreach( println ) r foreach println -// ΠΡΟΣΟΧΗ: Η Scala είναι σχετικά επιεικής ως αναφορά τις τελείες και -// τις παρενθέσεις. Διαβάστε τους κανόνες ξεχωριστά. +// ΠΡΟΣΟΧΗ: Η Scala είναι σχετικά επιεικής ως αναφορά τις τελείες και +// τις παρενθέσεις. Διαβάστε τους κανόνες ξεχωριστά. // Αυτό βοηθάει στο να γράφεις DSLs και APIs που διαβάζονται σαν τα Αγγλικά. (5 to 1 by -1) foreach ( println ) @@ -29670,8 +29670,8 @@ do { } while (x < 10) // Η αναδρομή ουράς είναι ένας ιδιωματικός τρόπος να κάνεις επαναλαμβανόμενα -// πράγματα στην Scala. Οι αναδρομικές συναρτήσεις απαιτούν να γραφτεί -// ρητά ο τύπος που θα επιστρέψουν, αλλιώς ο μεταγλωττιστής δεν μπορεί +// πράγματα στην Scala. Οι αναδρομικές συναρτήσεις απαιτούν να γραφτεί +// ρητά ο τύπος που θα επιστρέψουν, αλλιώς ο μεταγλωττιστής δεν μπορεί // αλλιώς να τον συνάγει. Παρακάτω είναι μια συνάρτηση που επιστρέφει Unit. def showNumbersInRange(a:Int, b:Int):Unit = { print(a) @@ -29733,7 +29733,7 @@ s(1) // Γιατί να το έχουμε αυτό; val divideInts = (x:Int, y:Int) => (x / y, x % y) -divideInts(10,3) // Η συνάρτηση divideInts επιστρέφει το αποτέλεσμα +divideInts(10,3) // Η συνάρτηση divideInts επιστρέφει το αποτέλεσμα // της ακέραιας διαίρεσης και το υπόλοιπο. // Για να έχουμε πρόσβαση στα στοιχεία μιας πλειάδας, χρησιμοποιούμε το _._n @@ -29765,7 +29765,7 @@ d._2 Και τώρα θα εξηγήσουμε τι είναι αυτά. */ // Οι κλάσεις είναι παρόμοιες με τις κλάσεις σε άλλες γλώσσες. Τα ορίσματα του -// "κατασκευαστή" (constructor) δηλώνονται μετά από το όνομα της κλάσης , +// "κατασκευαστή" (constructor) δηλώνονται μετά από το όνομα της κλάσης , // και η αρχικοποιήση γίνεται μέσα στο σώμα της κλάσης. class Dog(br: String) { // Κώδικας για τον "κατασκευαστή" @@ -29775,12 +29775,12 @@ class Dog(br: String) { def bark = "Woof, woof!" // Οι τιμές και οι μέθοδοι είναι public εκτός αν χρησιμοποιήσουμε κάποια - // απο τις λέξεις κλειδιά "protected" και "private" . + // απο τις λέξεις κλειδιά "protected" και "private" . private def sleep(hours: Int) = println(s"I'm sleeping for $hours hours") // Οι abstract μέθοδοι είναι απλά μέθοδοι χωρίς σώμα. Αν βγάζαμε - // το σχόλιο απο την επόμενη γραμμή η κλάση Dog θα έπρεπε να + // το σχόλιο απο την επόμενη γραμμή η κλάση Dog θα έπρεπε να // δηλωθεί ως abstract class Dog(...) { ... } : // def chaseAfter(what: String): String } @@ -29793,7 +29793,7 @@ println(mydog.bark) // => "Woof, woof!" // Η λέξη "object" δημιουργεί ένα type ΚΑΙ ένα singleton instance αυτού. // Είναι κοινό για τις κλάσεις στην Scala να έχουν ένα "συντροφικό object", // όπου η συμπεριφορά για κάθε instance αιχμαλωτίζεται μέσα στις κλάσεις -// αυτές καθ' αυτές, αλλά η συμπρεριφορά που σχετίζεται με όλα τα instances +// αυτές καθ' αυτές, αλλά η συμπρεριφορά που σχετίζεται με όλα τα instances // της κλάσης πάνε μέσα στο object. Η διαφορά είναι παρόμοια με τις // μεθόδους κλάσεων σε σχέση με στατικές μεθόδους σε άλλες γλώσσες. // Προσέξτε ότι τα objects και οι κλάσεις μπορούν να έχουν το ίδιο όνομα. @@ -29802,18 +29802,18 @@ object Dog { def createDog(breed: String) = new Dog(breed) } -// Οι κλάσεις περίπτωσης (case classes) είναι που έχουν την επιπλέον +// Οι κλάσεις περίπτωσης (case classes) είναι που έχουν την επιπλέον // λειτουργικότητα ενσωματωμένη. Μιά συνήθης ερώτηση για αρχάριους στην // Scala είναι πότε να χρησιμοποιούνται κλάσεις και πότε case κλάσεις. // Γενικά οι κλάσεις τείνουν να εστιάζουν στην ενθυλάκωση, τον -// πολυμορφισμό και τη συμπεριφορά. Οι τιμές μέσα σε αυτές τις κλάσεις +// πολυμορφισμό και τη συμπεριφορά. Οι τιμές μέσα σε αυτές τις κλάσεις // τείνουν να είναι private , και μόνο οι μέθοδοι είναι εκτεθειμένες. // Ο κύριος σκοπός των case classes είναι να κρατούν δεδομένα που είναι // σταθερές(immutable). Συνήθως έχουν λίγες μεθόδους και οι μέθοδοι σπάνια // έχουν παρενέργειες. case class Person(name: String, phoneNumber: String) -// Δημιουργία ενός instance. Παρατηρήστε ότι τα case classes +// Δημιουργία ενός instance. Παρατηρήστε ότι τα case classes // δεν χρειάζονται την λέξη "new" . val george = Person("George", "1234") val kate = Person("Kate", "4567") @@ -29829,19 +29829,19 @@ Person("George", "1234") == Person("Kate", "1236") // => false // otherGeorge == Person("george", "9876") val otherGeorge = george.copy(phoneNumber = "9876") -// Και πολλά άλλα. Τα case classes έχουν και αντιστοίχιση προτύπων +// Και πολλά άλλα. Τα case classes έχουν και αντιστοίχιση προτύπων // (pattern matching) δωρεάν, δείτε παρακάτω. // Τα χαρακτηριστικά (traits) έρχονται σε λίγο καιρό ! ///////////////////////////////////////////////// -// 6. Αντιστοίχιση Προτύπων +// 6. Αντιστοίχιση Προτύπων ///////////////////////////////////////////////// // Η αντιστοίχιση προτύπων (pattern matching) είναι ένα πολύ δυνατό και // ευρέως χρησιμοποιούμενο χαρακτηριστικό στην Scala. Παρακάτω βλέπουμε -// πως γίνεται το pattern matching σε ένα case class. Σημείωση: Σε -// αντίθεση με άλλες γλώσσες η Scala δεν χρειάζεται breaks, γιατί γίνεται +// πως γίνεται το pattern matching σε ένα case class. Σημείωση: Σε +// αντίθεση με άλλες γλώσσες η Scala δεν χρειάζεται breaks, γιατί γίνεται // αυτόματα όταν γίνει κάποιο match. def matchPerson(person: Person): String = person match { @@ -29852,7 +29852,7 @@ def matchPerson(person: Person): String = person match { } val email = "(.*)@(.*)".r // Ορίζουμε ένα regex για το επόμενο παράδειγμα. - // (regex <- REGular EXpression) + // (regex <- REGular EXpression) // Το pattern matching μπορεί να μοιάζει γνώριμο απο τα switch statements σε // γλώσσες που ανήκουν στην οικογένεια της C αλλά είναι πολύ πιο ισχυρό. @@ -29903,7 +29903,7 @@ val add10: Int => Int = _ + 10 // Μια συνάρτηση που δέχετα List(1, 2, 3) map add10 // List(11, 12, 13) - το add10 εφαρμόζεται σε κάθε στοιχείο // μέσω του map -// Οι ανώνυμες συναρτήσεις μπορούν να χρησιμοποιηθούν αντί +// Οι ανώνυμες συναρτήσεις μπορούν να χρησιμοποιηθούν αντί // ονοματισμένων (όπως απο πάνω) : List(1, 2, 3) map (x => x + 10) @@ -29928,7 +29928,7 @@ sSquared.filter(_ < 10) sSquared.reduce (_+_) // Η συνάρτηση filter παίρνει ένα κατηγορούμενο (predicate) -// που είναι μια συνάρτηση απο το A -> Boolean και διαλέγει +// που είναι μια συνάρτηση απο το A -> Boolean και διαλέγει // όλα τα στοιχεία που ικανοποιούν αυτό το κατηγορούμενο. List(1, 2, 3) filter (_ > 2) // List(3) case class Person(name:String, age:Int) @@ -29966,11 +29966,11 @@ for { n <- s; nSquared = n * n if nSquared < 10} yield nSquared ///////////////////////////////////////////////// /* ΠΡΟΣΟΧΗ! Τα implicits είναι ένα σύνολο απο ισχυρά χαρακτηριστικά της Scala - και επομένως είναι εύκολο να γίνει κατάχρηση. Οι αρχάριοι στην Scala θα - πρέπει να αντισταθούν στον πειρασμό να τα χρησιμοποιήσουν έως ότου, όχι + και επομένως είναι εύκολο να γίνει κατάχρηση. Οι αρχάριοι στην Scala θα + πρέπει να αντισταθούν στον πειρασμό να τα χρησιμοποιήσουν έως ότου, όχι μόνο καταλάβουν πως λειτουργούν, αλλά ακόμα εξασκηθούν πάνω τους. Ο μόνος λόγος που συμπεριλάβαμε αυτό το κομμάτι στο tutorial είναι - γιατί είναι τόσο κοινό στις βιβλιοθήκες της Scala , που αδύνατο να κάνεις + γιατί είναι τόσο κοινό στις βιβλιοθήκες της Scala , που αδύνατο να κάνεις οτιδήποτε σημαντικό χωρίς να χρησιμοποιήσεις μια που να έχει implicits. */ @@ -29988,15 +29988,15 @@ implicit def myImplicitFunction(breed: String) = new Dog("Golden " + breed) myImplicitInt + 2 // => 102 myImplicitFunction("Pitbull").breed // => "Golden Pitbull" -// Η διαφορά είναι ότι τώρα αυτές οι τιμές έχουν την δυνατότητα να -// χρησιμοποιηθούν όταν ένα άλλο κομμάτι κώδικα "χρειάζεται" μια -// implicit τιμή. Μια τέτοια περίπτωση είναι τα ορίσματα μιας implicit +// Η διαφορά είναι ότι τώρα αυτές οι τιμές έχουν την δυνατότητα να +// χρησιμοποιηθούν όταν ένα άλλο κομμάτι κώδικα "χρειάζεται" μια +// implicit τιμή. Μια τέτοια περίπτωση είναι τα ορίσματα μιας implicit // συνάρτησης: def sendGreetings(toWhom: String)(implicit howMany: Int) = s"Hello $toWhom, $howMany blessings to you and yours!" // Άν τροφοδοτήσουμε μια τιμή για το "homMany", η συνάρτηση συμπεριφέρεται -// ως συνήθως +// ως συνήθως sendGreetings("John")(1000) // => "Hello John, 1000 blessings to you and yours!" // Αλλά αν παραλείψουμε την παράμετρο implicit , μια implicit τιμή του ιδίου τύπου @@ -30012,21 +30012,21 @@ def foo[T : C] = ... -// Μια άλλη περίπτωση στην οποία ο μεταγλωττιστής αναζητά μια implicit τιμή +// Μια άλλη περίπτωση στην οποία ο μεταγλωττιστής αναζητά μια implicit τιμή // είναι αν έχετε obj.method (...) -// αλλά το "obj" δεν έχει την "method" ως μέθοδο. Σε αυτή την περίπτωση, -// αν υπάρχει μια implicit μετατροπή του τύπου Α => Β, όπου Α είναι ο τύπος -// του obj, ενώ το Β έχει μία μέθοδο που ονομάζεται «method», εφαρμόζεται η -// εν λόγω μετατροπή. Έτσι, έχοντας την MyImplicitFunction μέσα στο πεδίο +// αλλά το "obj" δεν έχει την "method" ως μέθοδο. Σε αυτή την περίπτωση, +// αν υπάρχει μια implicit μετατροπή του τύπου Α => Β, όπου Α είναι ο τύπος +// του obj, ενώ το Β έχει μία μέθοδο που ονομάζεται «method», εφαρμόζεται η +// εν λόγω μετατροπή. Έτσι, έχοντας την MyImplicitFunction μέσα στο πεδίο // εφαρμογής(scope), μπορούμε να πούμε: "Retriever".breed // => "Golden Retriever" "Sheperd".bark // => "Woof, woof!" // Εδώ το String αρχικά μετατρέπεται σε Dog χρησιμοποιώντας την συνάρτησή μας // παραπάνω, και μετά καλείται η κατάλληλη μέθοδος. Αυτό είναι ένα εξερετικά -// ισχυρό χαρακτηριστικό, αλλά δεν πρέπει να χρησιμοποιείται με ελαφριά την +// ισχυρό χαρακτηριστικό, αλλά δεν πρέπει να χρησιμοποιείται με ελαφριά την // καρδιά. Μάλιστα, όταν ορίσατε την συνάρτηση implicit παραπάνω, ο μεταγλωττιστής -// θα πρέπει να σας έδωσε μια προειδοποιήση, ότι δεν πρέπει να το κάνετε αυτό +// θα πρέπει να σας έδωσε μια προειδοποιήση, ότι δεν πρέπει να το κάνετε αυτό // εκτός αν πραγματικά γνωρίζετε τι κάνετε. @@ -30059,7 +30059,7 @@ object Application { } // Files can contain multiple classes and objects. Compile with scalac -// Τα files μπορούν να περιέχουν περισσότερες απο μία κλάσεις και +// Τα files μπορούν να περιέχουν περισσότερες απο μία κλάσεις και // αντικείμενα. Το compile γίνεται με την εντολή scalac // Εισαγωγή και εξαγωγή. @@ -30069,7 +30069,7 @@ import scala.io.Source for(line <- Source.fromFile("myfile.txt").getLines()) println(line) -// Για να γράψετε σε ένα αρχείο +// Για να γράψετε σε ένα αρχείο val writer = new PrintWriter("myfile.txt") writer.write("Writing line for line" + util.Properties.lineSeparator) writer.write("Another line here" + util.Properties.lineSeparator) @@ -30764,7 +30764,7 @@ defmodule MyMod do end # The pipe operator |> allows you to pass the output of an expression -# as the first parameter into a function. +# as the first parameter into a function. Range.new(1,10) |> Enum.map(fn x -> x * x end) @@ -31645,7 +31645,7 @@ define('awesomeAMD', function(){ }); // Ahora definamos otro módulo que dependa de nuestro módulo `awesomeAMD`. -// Observe que ahora hay un argumento adicional que define +// Observe que ahora hay un argumento adicional que define // las dependencias de nuestro módulo: define('loudmouth', ['awesomeAMD'], function(awesomeAMD){ // las dependencias serán enviadas a los argumentos de la fábrica @@ -31832,48 +31832,48 @@ lang: es-es ## ¿Qué son? -Las notaciones asintóticas son lenguajes que nos permitan analizar el tiempo de -ejecución de un algoritmo identificando su comportamiento si el tamaño de -entrada para el algoritmo aumenta. Esto también se conoce como la tasa de -crecimiento de un algoritmo. ¿El algoritmo de repente se vuelve increíblemente -lento cuando el tamaño de entrada crece? ¿Tiende a mantener un rápido tiempo de -ejecución a medida que el tamaño de entrada aumenta? La notación asintótica nos +Las notaciones asintóticas son lenguajes que nos permitan analizar el tiempo de +ejecución de un algoritmo identificando su comportamiento si el tamaño de +entrada para el algoritmo aumenta. Esto también se conoce como la tasa de +crecimiento de un algoritmo. ¿El algoritmo de repente se vuelve increíblemente +lento cuando el tamaño de entrada crece? ¿Tiende a mantener un rápido tiempo de +ejecución a medida que el tamaño de entrada aumenta? La notación asintótica nos da la capacidad para responder a estas preguntas. ## ¿Hay alternativas que respondan a estas preguntas? -Una manera sería contar el número de operaciones primitivas en diferentes -tamaños de entrada. Aunque esta es una solución válida, la cantidad de trabajo +Una manera sería contar el número de operaciones primitivas en diferentes +tamaños de entrada. Aunque esta es una solución válida, la cantidad de trabajo que esto conlleva, incluso para los algoritmos simples, no justifica su uso. -Otra manera es medir físicamente la cantidad de tiempo que un algoritmo toma -para completar su ejecución dados diferentes tamaños de entrada. Sin embargo, -la exactitud y la relatividad (los tiempos obtenidos sólo serían relativos a la -máquina sobre la cual se calcularon) de este método está ligado a variables +Otra manera es medir físicamente la cantidad de tiempo que un algoritmo toma +para completar su ejecución dados diferentes tamaños de entrada. Sin embargo, +la exactitud y la relatividad (los tiempos obtenidos sólo serían relativos a la +máquina sobre la cual se calcularon) de este método está ligado a variables ambientales tales como especificaciones de hardware, capacidad de procesamiento, etc. ## Tipos de Notación Asintótica -En la primera sección de este documento hemos descrito cómo una notación -asintótica identifica el comportamiento de un algoritmo ante los cambios en el -tamaño de la entrada. Imaginemos un algoritmo como una función f, con tamaño de -entrada n, y f(n) siendo el tiempo de ejecución. Así que para un algoritmo f -dado, con el tamaño de entrada n obtenemos algún tiempo de ejecución resultante -f(n). Esto resulta en un gráfico donde el eje Y es el tiempo de ejecución, el -eje X es el tamaño de la entrada y los puntos en el gráfico son los resultantes +En la primera sección de este documento hemos descrito cómo una notación +asintótica identifica el comportamiento de un algoritmo ante los cambios en el +tamaño de la entrada. Imaginemos un algoritmo como una función f, con tamaño de +entrada n, y f(n) siendo el tiempo de ejecución. Así que para un algoritmo f +dado, con el tamaño de entrada n obtenemos algún tiempo de ejecución resultante +f(n). Esto resulta en un gráfico donde el eje Y es el tiempo de ejecución, el +eje X es el tamaño de la entrada y los puntos en el gráfico son los resultantes de la cantidad de tiempo para un tamaño de entrada dado. -Puedes etiquetar una función, o un algoritmo, con una notación asintótica de -muchas maneras diferentes. Algunos ejemplos son describir un algoritmo por su -mejor caso, su peor caso, o el caso promedio. Lo más común es analizar un -algoritmo por su peor caso. Por lo general, no se evalúa el mejor caso, porque +Puedes etiquetar una función, o un algoritmo, con una notación asintótica de +muchas maneras diferentes. Algunos ejemplos son describir un algoritmo por su +mejor caso, su peor caso, o el caso promedio. Lo más común es analizar un +algoritmo por su peor caso. Por lo general, no se evalúa el mejor caso, porque no planeas el algoritmo para estas condiciones. Un muy buen ejemplo de esto son -los algoritmos de ordenamiento; específicamente, añadir elementos a un árbol. -El mejor caso para la mayoría de los algoritmos podría ser tan bajo como una -sola operación. Sin embargo, en la mayoría de los casos, el elemento que está -añadiendo tendrá que ser ordenado adecuadamente a través del árbol, lo que -podría significar examinar toda una rama. Este es el peor de los casos, y +los algoritmos de ordenamiento; específicamente, añadir elementos a un árbol. +El mejor caso para la mayoría de los algoritmos podría ser tan bajo como una +sola operación. Sin embargo, en la mayoría de los casos, el elemento que está +añadiendo tendrá que ser ordenado adecuadamente a través del árbol, lo que +podría significar examinar toda una rama. Este es el peor de los casos, y para estos casos es que planeamos el algoritmo. @@ -31889,19 +31889,19 @@ Función exponencial - a^n, donde a es constante Estas son algunas clasificaciones de funciones de crecimiento básicos utilizados en varias notaciones. La lista comienza en la función de crecimiento menor -(logarítmica, el tiempo de ejecución mas rápido) y pasa a la de mayor -crecimiento (exponencial, el tiempo de ejecución mas lento). Observe como al -crecer 'n', o la entrada, en cada una de estas funciones, el resultado aumenta -claramente mucho más rápido en las cuadráticas, polinómicas y exponenciales, +(logarítmica, el tiempo de ejecución mas rápido) y pasa a la de mayor +crecimiento (exponencial, el tiempo de ejecución mas lento). Observe como al +crecer 'n', o la entrada, en cada una de estas funciones, el resultado aumenta +claramente mucho más rápido en las cuadráticas, polinómicas y exponenciales, en comparación con las logarítmicas y lineales. -Una anotación muy importante es que en las notaciones que se discutirán debes -hacer tu mejor esfuerzo por utilizar los términos más simples. Esto significa +Una anotación muy importante es que en las notaciones que se discutirán debes +hacer tu mejor esfuerzo por utilizar los términos más simples. Esto significa hacer caso omiso de las constantes y terminos de orden inferior, porque a medida -que el tamaño de entrada (o n en f(n)) aumenta hacia el infinito (límites -matemáticos), los términos y constantes de orden inferior se vuelven de poca o -ninguna importancia. Dicho esto, si tienes constantes que son 2^9001, -o alguna otra cantidad ridícula, inimaginable, te daras cuenta de que la +que el tamaño de entrada (o n en f(n)) aumenta hacia el infinito (límites +matemáticos), los términos y constantes de orden inferior se vuelven de poca o +ninguna importancia. Dicho esto, si tienes constantes que son 2^9001, +o alguna otra cantidad ridícula, inimaginable, te daras cuenta de que la simplificación sesgará la exactitud de la notación. Como queremos algo simplificado, vamos a modificarlo un poco... @@ -31915,69 +31915,69 @@ Exponencial - a^n, donde a es constante ``` ### O-grande (Big-O) -O-grande (Big-O), comúnmente escrito como O, es una notación asintótica para el -peor caso, o el techo de crecimiento para una función determinada. Si `f (n)` -es el tiempo de ejecución del algoritmo, y `g (n)` es un tiempo de complejidad -arbitraria que relacionas con el algoritmo, entonces `f (n)` es O(g(n)), si por -cualquier constante real c (c > 0), `f (n)` <= `c g(n)` para cada tamaño de +O-grande (Big-O), comúnmente escrito como O, es una notación asintótica para el +peor caso, o el techo de crecimiento para una función determinada. Si `f (n)` +es el tiempo de ejecución del algoritmo, y `g (n)` es un tiempo de complejidad +arbitraria que relacionas con el algoritmo, entonces `f (n)` es O(g(n)), si por +cualquier constante real c (c > 0), `f (n)` <= `c g(n)` para cada tamaño de entrada n (n > 0 ). -*Ejemplo 1* +*Ejemplo 1* ``` -f(n) = 3log n + 100 +f(n) = 3log n + 100 g(n) = log n ``` -`f(n)` es O(g(n))? -`3 log n + 100` es O(log n)? +`f(n)` es O(g(n))? +`3 log n + 100` es O(log n)? Echemos un vistazo a la definición de O-grande. ``` -3log n + 100 <= c * log n +3log n + 100 <= c * log n ``` -¿Hay alguna constante c que satisface esto para todo n? +¿Hay alguna constante c que satisface esto para todo n? ``` -3log n + 100 <= 150 * log n, n > 2 (indefinido en n = 1) +3log n + 100 <= 150 * log n, n > 2 (indefinido en n = 1) ``` ¡Sí! La definición de O-grande se cumple, por lo tanto `f (n)` es O(g(n)). -*Ejemplo 2* +*Ejemplo 2* ``` -f(n) = 3*n^2 +f(n) = 3*n^2 g(n) = n ``` -`f(n)` es O(g(n))? -`3 * n^2` es O(n)? +`f(n)` es O(g(n))? +`3 * n^2` es O(n)? Echemos un vistazo a la definición de O-grande. ``` -3 * n^2 <= c * n +3 * n^2 <= c * n ``` -¿Hay alguna constante c que satisface esto para todo n? +¿Hay alguna constante c que satisface esto para todo n? No, no la hay. `f(n)` no es O(g(n)). ### Big-Omega Big-Omega, comunmente escrito como Ω, es una notación asintótica para el mejor caso, o el piso en el crecimiento para una función dada. -`f(n)` es Ω(g(n)), si para cualquier constante real c (c > 0), +`f(n)` es Ω(g(n)), si para cualquier constante real c (c > 0), `f(n)` es >= `c g(n)` para cualquier tamaño de entrada n (n > 0). -No dudes en dirigirte a los recursos adicionales para ejemplos sobre esto. +No dudes en dirigirte a los recursos adicionales para ejemplos sobre esto. O-grande es la notación principal utilizada para la complejidad general de tiempo algoritmico. ### Notas finales -Es difícil mantener este tipo de tema corto, y sin duda deberias revisar los -libros y recursos en línea en la lista. Entran en mucha mayor profundidad con -definiciones y ejemplos. +Es difícil mantener este tipo de tema corto, y sin duda deberias revisar los +libros y recursos en línea en la lista. Entran en mucha mayor profundidad con +definiciones y ejemplos. ## Libros @@ -32001,8 +32001,8 @@ lang: es-es AWK es una herramienta estándar en cada sistema UNIX compatible con POSIX. Es como un Perl restringido, perfecto para tareas de procesamiento de texto y -otras necesidades de scripting. Tiene una sintaxis similar a C, pero sin -puntos y comas, manejo manual de memoria y tipado estático. Puedes llamarlo +otras necesidades de scripting. Tiene una sintaxis similar a C, pero sin +puntos y comas, manejo manual de memoria y tipado estático. Puedes llamarlo desde un script de shell o usarlo como un lenguaje stand-alone para scripting. ¿Por qué elegir AWK sobre Perl? Principalmente, porque AWK es parte de UNIX. @@ -32064,7 +32064,7 @@ BEGIN { # Bloques formados por múltiples líneas usan llaves while (a < 10) { - print "La concatenación de strings se hace " " con series " + print "La concatenación de strings se hace " " con series " print " de" " strings separados por espacios" print a @@ -32143,12 +32143,12 @@ function arithmetic_functions(a, b, c, localvar) { # Todo es global. No es problema en scripts pequeños, pero sí para # scripts más grandes. - # Hay un work-around (mmm... hack). Los argumentos de las funciones son + # Hay un work-around (mmm... hack). Los argumentos de las funciones son # locales para la función, y AWK permite definir más argumentos de función - # de los que necesita, por lo que define las variables locales en la + # de los que necesita, por lo que define las variables locales en la # declaración como en la función de arriba. Como convención, agrega - # espacios en blanco para distinguir los parámetros de la función de las - # variables locales. En este ejemplo, a, b y c son parámetros y localvar es una + # espacios en blanco para distinguir los parámetros de la función de las + # variables locales. En este ejemplo, a, b y c son parámetros y localvar es una # variable local. # Ahora, a demostrar las funciones aritméticas @@ -32212,8 +32212,8 @@ function io_functions( localvar) { # También hay printf printf("%s %d %d %d\n", "Testing", 1, 2, 3) - # AWK no tiene handles de archivos en sí mismo. Automáticamente abrirá un - # handle de archivo cuando use algo que necesite uno. El string que usaste + # AWK no tiene handles de archivos en sí mismo. Automáticamente abrirá un + # handle de archivo cuando use algo que necesite uno. El string que usaste # para esto puede ser tratada como un handle de archivo para propósitos de I/O. # Esto lo hace similar al scripting de shell: @@ -32237,17 +32237,17 @@ function io_functions( localvar) { close("/tmp/foobar.txt") } -# Como dije al inicio, los programas en AWK son una colección de patrones y +# Como dije al inicio, los programas en AWK son una colección de patrones y # acciones. Ya conociste el patrón BEGIN. otros patrones sólo se usan si estás # procesando líneas desde archivos o stdin. -# Cuando pasas argumentos a AWK, son tratados como nombres de archivos a -# procesar. Los va a procesar todos, en orden. Imagínalos como un ciclo for +# Cuando pasas argumentos a AWK, son tratados como nombres de archivos a +# procesar. Los va a procesar todos, en orden. Imagínalos como un ciclo for # implícito, iterando sobre las líneas de estos archivos. Estos patrones y # acciones son como instrucciones switch dentro del ciclo. /^fo+bar$/ { - + # Esta acción se ejecutará por cada línea que haga match con la expresión # regular /^fo+bar$/, y será saltada por cualquier línea que no haga match. # Vamos a sólo mostrar la línea: @@ -32258,7 +32258,7 @@ function io_functions( localvar) { # $0 es el nombre de la línea actual que se está procesando. # Se crea automáticamente para ti. - # Probablemente puedas adivinar que hay otras variables $. Cada línea es + # Probablemente puedas adivinar que hay otras variables $. Cada línea es # separada implícitamente antes de que se llame cada acción, justo como lo # hace shell. Y, como shell, cada campo puede ser accesado con $. @@ -32291,7 +32291,7 @@ a > 0 { # Y ya te das una idea. Procesar archivos de texto, leyendo una línea a la vez, # y haciendo algo con ella, particularmente separando en un deliminator, es tan # común en UNIX que AWK es un lenguaje de scripting que hace todo eso por ti -# sin que tengas que pedirlo. Basta con escribir los patrones y acciones +# sin que tengas que pedirlo. Basta con escribir los patrones y acciones # basados en lo que esperas de la entrada y lo quieras quieras hacer con ella. # Aquí está un ejemplo de un script simple, para lo que AWK es perfecto. @@ -32333,7 +32333,7 @@ $1 == name { nlines++ } -# Otro patrón especial es END. Va a ejecutarse después de procesar todos los +# Otro patrón especial es END. Va a ejecutarse después de procesar todos los # archivos de texto. A diferencia de BEGIN, sólo se ejecuta si le das dado una # entrada a procesar. Se ejecutará después de que todos los archivos hayan sido # leídos y procesados según las reglas y acciones que programaste. El propósito @@ -32369,9 +32369,9 @@ lang: es-es Tutorial de Shell en español. -Bash es el nombre del shell de unix, el cual también es distribuido como +Bash es el nombre del shell de unix, el cual también es distribuido como el shell del sistema operativo GNU. También es el shell -por defecto de Linux y Mac OS X. Casi todos los ejemplos abajo pueden +por defecto de Linux y Mac OS X. Casi todos los ejemplos abajo pueden ser parte de un script shell o ser ejecutados directamente en la terminal. [Leer más aquí.](http://www.gnu.org/software/bash/manual/bashref.html) @@ -32379,7 +32379,7 @@ ser parte de un script shell o ser ejecutados directamente en la terminal. ```bash #!/bin/bash -# La primera línea del script es el [shebang](http://en.wikipedia.org/wiki/Shebang_(Unix)) que le indica al sistema +# La primera línea del script es el [shebang](http://en.wikipedia.org/wiki/Shebang_(Unix)) que le indica al sistema # cómo ejecutar el script. # Como te habrás dado cuenta, los comentarios en shell empiezan con #. # El shebang también es un comentario. @@ -32405,7 +32405,7 @@ echo '$VARIABLE' # Cuando la variable es usada - o asignada, exportada, etcétera - se # escribe su nombre sin $. Si se quiere saber el valor de la variables, -# entonces sí se usa $. Note que ' (comilla simple) no expandirá las +# entonces sí se usa $. Note que ' (comilla simple) no expandirá las # variables. # Sustitución de strings en variables. @@ -32447,7 +32447,7 @@ fi echo "Siempre ejecutado" || echo "Sólo ejecutado si el primer comando falla" echo "Siempre ejecutado" && echo "Sólo ejecutado si el primer comando NO falla" -# Para usar && y || con condicionales, se necesitan +# Para usar && y || con condicionales, se necesitan # múltiples pares de corchetes: if [ $NOMBRE == "Steve" ] && [ $EDAD -eq 15 ] then @@ -32470,7 +32470,7 @@ ls # Estos comandos tienen opciones que controlan su ejecución: ls -l # Lista todos los archivos y directorios en líneas distintas. -# Los resultados del comando anterior pueden ser pasados al siguiente +# Los resultados del comando anterior pueden ser pasados al siguiente # como input. El comando 'grep' filtra el input con los comandos provistos. # Así es como podemos listar archivos .txt en el directorio actual: ls -l | grep "\.txt" @@ -32494,8 +32494,8 @@ echo "Hay $(ls | wc -l) elementos aquí." echo "Hay `ls | wc -l` elementos aquí." # Bash usa una estructura de casos similar al switch de Java o C++: -case "$VARIABLE" in - # Lista de patrones que las condiciones deben cumplir: +case "$VARIABLE" in + # Lista de patrones que las condiciones deben cumplir: 0) echo "Hay un cero.";; 1) echo "Hay un uno.";; *) echo "No es null.";; @@ -32583,7 +32583,7 @@ Existen ocho comandos: [ : Si el valor en la celda actual es cero mueve el apuntador hasta el primer ']' que encuentre. Si no es cero sigue a la siguiente instrucción. -] : Si el valor en la celda actual es cero, entonces sigue con +] : Si el valor en la celda actual es cero, entonces sigue con la siguiente instrucción. Si no entonces mueve el apuntador hacia atrás hasta encontrar el primer '['. @@ -32593,7 +32593,7 @@ Estos son algunos ejemplos de programas escritos con brainfuck. ++++++ [ > ++++++++++ < - ] > +++++ . -Este programa imprime la letra 'A'. Primero, incrementa la celda #1 a +Este programa imprime la letra 'A'. Primero, incrementa la celda #1 a 6. La celda #1 será usada para hacer los ciclos. Después entra al ciclo ([) y se mueve a la celda #2 (>). Después incrementa la celda #2 10 veces, y se regresa a la celda #1 (<), para después decrementarla en 1 (-). @@ -32608,10 +32608,10 @@ se imprime. , [ > + < - ] > . -Este programa lee un caracter del input y lo copia en la celda #2 (,). +Este programa lee un caracter del input y lo copia en la celda #2 (,). Después empieza un ciclo. Nos movemos a la celda #2 (>) e incrementamos su valor (+). Regresamos a la celda #1 y decrementamos su valor en 1 (-). -Esto continúa hasta que la celda #1 contenga un cero. Cuando #1 contenga un +Esto continúa hasta que la celda #1 contenga un cero. Cuando #1 contenga un cero la celda #2 tendrá el valor inicial de #1. Como este ciclo siempre terminara en la celda #1 nos movemos a la celda #2 e imprimimos (.). @@ -32644,7 +32644,7 @@ contributors: - ["Abhishek Jaisingh", "http://github.com/abhishekjiitr"] translators: - ["Gino Amaury", "https://github.com/ginoamaury"] -lang: es-es +lang: es-es --- # Búsqueda Binaria @@ -32665,16 +32665,16 @@ Búsqueda Binaria: O ( log(n) ) Tiempo logarítmico ``` ``` def search(arr, x): - + for i in range(len(arr)): - + if arr[i] == x: return i - + return -1 ``` -## Algoritmo de Búsqueda Binaria +## Algoritmo de Búsqueda Binaria El requisito básico para que la búsqueda binaria funcione es que los datos a buscar deben estar ordenados (en cualquier orden). @@ -32685,13 +32685,13 @@ El requisito básico para que la búsqueda binaria funcione es que los datos a b La idea de la búsqueda binaria es usar la información de que la matriz está ordenada y así reducir la complejidad del tiempo a O(Logn). Básicamente ignoramos la mitad de los elementos después de la primera comparación. 1) Compare x con el elemento del medio. 2) si x coincide con el elemento del medio , retornamos el índice del elemento del medio. -3) Si no coincide, si x es mayor que el elemento del medio, entonces x solo puede estar en la mitad derecha justo después del elemento del medio. Así que recurrimos a la mitad derecha. +3) Si no coincide, si x es mayor que el elemento del medio, entonces x solo puede estar en la mitad derecha justo después del elemento del medio. Así que recurrimos a la mitad derecha. 4) Si no (x es más pequeño) recurrimos a la mitad izquierda. Siguiendo la implementación recursiva de búsqueda binaria. ``` -### Notas finales +### Notas finales Hay otra forma de búsqueda binaria que es muy útil. @@ -32701,7 +32701,7 @@ Hay otra forma de búsqueda binaria que es muy útil. * [Algoritmos EN](http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X) * [Diseño de Algoritmos EN](http://www.amazon.com/Algorithm-Design-Foundations-Analysis-Internet/dp/0471383651) -## Recursos en línea +## Recursos en línea * [GeeksforGeeks EN](http://www.geeksforgeeks.org/the-ubiquitous-binary-search-set-1/) * [Topcoder Tutorial EN](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) @@ -33544,7 +33544,7 @@ translators: lang: es-es --- -¡Ah!, C. Aun hoy en día sigue siendo el lenguaje por excelencia de la +¡Ah!, C. Aun hoy en día sigue siendo el lenguaje por excelencia de la computación moderna de alto rendimiento. C es el lenguaje de más bajo nivel que la mayoría de los programadores @@ -33599,7 +33599,7 @@ char y_char = 'y'; // Los caracteres literales se entrecomillan con '' // 'longs' son a menudo de 4 a 8 bytes; 'long longs' son fijo de por lo // menos 64 bits long x_long = 0; -long long x_long_long = 0; +long long x_long_long = 0; // 'floats' son normalmente números de coma flotante de 32 bits float x_float = 0.0; @@ -33615,7 +33615,7 @@ unsigned short ux_short; unsigned int ux_int; unsigned long long ux_long_long; -// Todos menos 'char', que es siempre de 1 byte, varían el tamaño +// Todos menos 'char', que es siempre de 1 byte, varían el tamaño // dependiendo de tu máquina. sizeof(T) te dice el tamaño de una variable // de tipo T en bytes por lo que podemos expresar el tamaño de estos tipos // portatilmente. @@ -33649,7 +33649,7 @@ printf("%s\n", a_string); // %s se sutituye por una cadena. /* Te habrás dado cuenta de que a_string es solo de 18 caracteres. -El 'char' #19 es el byte nulo. +El 'char' #19 es el byte nulo. El 'char' #20 es de valor indefinido. */ @@ -33674,7 +33674,7 @@ f1 / f2; // => 0.5, más o menos épsilon // Los operadores de comparación te resultaran familiares, pero no hay // booleanos en C. Usamos enteros (ints) en su lugar. 0 es falso, -// cualquier otra cosa es verdadero. (Los operadores de comparación +// cualquier otra cosa es verdadero. (Los operadores de comparación // siempre devuelven 0 o 1) 3 == 2; // => 0 (Falso) 3 != 2; // => 1 (Verdadero) @@ -33761,8 +33761,8 @@ printf("%d\n", (char)100.0); // Punteros /////////////////////////////////////// -// Un puntero es una variable declarada para almacenar una dirección de -// memoria. Su declaración además nos dirá el tipo de dato al que apunta. +// Un puntero es una variable declarada para almacenar una dirección de +// memoria. Su declaración además nos dirá el tipo de dato al que apunta. // Puedes obtener la dirección de memoria de tus variables, y después // enlazarlas con ellos. @@ -33777,7 +33777,7 @@ px = &x; // Almacena la dirección de x en px printf("%p\n", px); // => Muestra alguna dirección de memoria // Para obtener el valor de la dirección a la que apunta un puntero, pon -// * delante para desreferenciarle. +// * delante para desreferenciarle. printf("%d\n", *px); // => Muestra 0, el valor de x y de la dirección a la // que apunta px @@ -33820,7 +33820,7 @@ for (xx=0; xx<20; xx++) { // impredecibles printf("%d\n", *(my_ptr + 21)); // => Prints who-knows-what? -// Cuando hayas acabado con el bloque de memoría malloc, necesitas +// Cuando hayas acabado con el bloque de memoría malloc, necesitas // liberarlo o sino nadie más podrá usarlo hasta que tu programa se cierre free(my_ptr); @@ -33845,8 +33845,8 @@ int add_two_ints(int x1, int x2){ } /* -Las funciones son de paso por valor, pero puedes hacer tus propias -referencias con punteros de manera que las funciones puedan cambiar sus +Las funciones son de paso por valor, pero puedes hacer tus propias +referencias con punteros de manera que las funciones puedan cambiar sus valores. Ejemplo: invertidor de cadenas in-situ @@ -33855,7 +33855,7 @@ Ejemplo: invertidor de cadenas in-situ // Una función 'void' no retorna valor void str_reverse(char* str_in){ char tmp; - int ii=0, len = strlen(str_in); // Strlen es parte de la librería + int ii=0, len = strlen(str_in); // Strlen es parte de la librería for(ii=0; ii ``` -El orden respetado es el siguiente: +El orden respetado es el siguiente: Recuerda, la preferencia es por cada **property**, no para el bloque completo. -* `E` tiene la preferencia más elevada gracias a la palabra `!important`. +* `E` tiene la preferencia más elevada gracias a la palabra `!important`. Es recomendado evitar esto a menos que sea estrictamente necesario incluirlo. * `F` le sigue, porque es estilo incrustado directamente en el HTML. -* `A` le sigue, porque es más específico que cualquier otra opción. - más específico = más especificadores. Aquí hay tres especificadores: elemento `p` + +* `A` le sigue, porque es más específico que cualquier otra opción. + más específico = más especificadores. Aquí hay tres especificadores: elemento `p` + nombre de la clase `clase1` + un atributo `attr='valor'` -* `C` le sigue. Aunque tiene el mismo número de especificadores como `B` +* `C` le sigue. Aunque tiene el mismo número de especificadores como `B` pero aparece después. * Luego va `B` * y al final `D`. ## Compatibilidad -La mayoría de las funcionalidades de CSS2 (y gradualmente de CSS3) son compatibles +La mayoría de las funcionalidades de CSS2 (y gradualmente de CSS3) son compatibles en todos los navegadores y dispositivos. Pero siempre es vital tener en mente la compatibilidad y disponibilidad del CSS que uses con respecto a los navegadores y dispositivos para los que desarrolles. @@ -35312,14 +35312,14 @@ contributors: - ["Akashdeep Goel", "http://github.com/akashdeepgoel"] translators: - ["Gino Amaury", "https://github.com/ginoamaury"] -lang: es-es +lang: es-es --- # Programación Dinámica ## Introducción -La programación dinámica es una técnica poderosa usada para resolver una clase particular de problemas como veremos más adelante. +La programación dinámica es una técnica poderosa usada para resolver una clase particular de problemas como veremos más adelante. La idea es muy simple: si has solucionado un problema con la entrada dada, entonces, guardaremos el resultado para una futura referencia, con el fin de evitar la solución del mismo problema de nuevo. Recuerda siempre: @@ -35366,7 +35366,7 @@ contributors: - ["Jason Yeo", "https://github.com/jsyeo"] translators: - ["Gino Amaury", "https://github.com/ginoamaury"] -lang: es-es +lang: es-es --- La notación de datos extensible (Extensible Data Notation (EDN)) es un formato para serializar los datos. @@ -35375,7 +35375,7 @@ La notación se utiliza internamente por Clojure para representar programas. Tam utilizado como un formato de transferencia de datos como JSON. A pesar de que se utiliza más comúnmente en Clojure, existen implementaciones de EDN para muchos otros lenguajes. -El principal beneficio de EDN sobre JSON y YAML es que es extensible. +El principal beneficio de EDN sobre JSON y YAML es que es extensible. Vamos a ver cómo se extiende más adelante. ```clojure @@ -35492,7 +35492,7 @@ filename: learn-emacs-lisp-es.el ;; ;; Ahora instala GNU Emacs 24.3: ;; -;; Debian: apt-get install emacs +;; Debian: apt-get install emacs ;; (o sigue las instrucciones de tu distribución preferida) ;; OSX: http://emacsformacosx.com/emacs-builds/Emacs-24.3-universal-10.6.8.dmg ;; Windows: http://ftp.gnu.org/gnu/windows/emacs/emacs-24.3-bin-i386.zip @@ -35503,20 +35503,20 @@ filename: learn-emacs-lisp-es.el ;; Aviso importante: ;; ;; Seguir este tutorial no provocará daños en tu ordenador a menos que -;; te enfades tanto que que acabes tirándolo al suelo. En tal caso +;; te enfades tanto que que acabes tirándolo al suelo. En tal caso ;; declino cualquier responsabilidad. ¡A divertirse! -;; "N. del. T.": Algunos términos comunes de la informática se han dejado -;; sin traducir ya que es mucho más probable que el lector los conozca en +;; "N. del. T.": Algunos términos comunes de la informática se han dejado +;; sin traducir ya que es mucho más probable que el lector los conozca en ;; su forma en inglés, siendo la versión en español de muy raro uso. ;; Además "sexps" se ha decidido traducir por sexpresión. -;; Por último, añadir que no se han traducido los ejemplos de código ya que no +;; Por último, añadir que no se han traducido los ejemplos de código ya que no ;; es necesario entender qué dice el string para comprender el funcionamiento ;; y podría llevar a error. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; +;; ;; Inicia Emacs. ;; ;; Pulsa la tecla `q' para pasar el mensaje de bienvenida. @@ -35527,21 +35527,21 @@ filename: learn-emacs-lisp-es.el ;; A este espacio editable se le llama "buffer". ;; ;; Scratch es el buffer por defecto cuando abres Emacs. -;; En Emacs nunca editas ficheros, sino que editas buffers que +;; En Emacs nunca editas ficheros, sino que editas buffers que ;; posteriormente pueden grabarse a un fichero. ;; can save to a file. -;; +;; ;; "Lisp interaction" indica el conjunto de ordenes disponibles. -;; +;; ;; Emacs dispone de un set de comandos disponibles en cualquier buffer -;; ("built-ins") y aparte varios conjuntos de ordenes disponibles -;; según el modo específico que esté activo. En nuestro caso +;; ("built-ins") y aparte varios conjuntos de ordenes disponibles +;; según el modo específico que esté activo. En nuestro caso ;; estamos usando `lisp-interaction-mode', el cual incluye las ;; ordenes necesarias para evaluar y navegar código Elisp. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; -;; Un punto y coma comienza un comentario. Pueden ponerse en cualquier +;; Un punto y coma comienza un comentario. Pueden ponerse en cualquier ;; posicion de la linea. ;; ;; Los programas en Elisp se componen de expresiones simbólicas @@ -35553,12 +35553,12 @@ filename: learn-emacs-lisp-es.el ;; Las sexpresiones se rodean por paréntesis, y pueden anidarse: (+ 2 (+ 1 1)) -;; Una expresion simbólica está formada bien por átomos o bien por otras -;; expresiones simbólicas. En el ejemplo de arriba, 1 y 2 son átomos, +;; Una expresion simbólica está formada bien por átomos o bien por otras +;; expresiones simbólicas. En el ejemplo de arriba, 1 y 2 son átomos, ;; mientras que (+ 2 (+ 1 1)) y (+ 1 1) son expresiones simbólicas. ;; Gracias a `lisp-interaction-mode' puedes evaluar las sexpresiones. -;; Coloca el cursor justo despues del paréntesis de cierre y +;; Coloca el cursor justo despues del paréntesis de cierre y ;; mantén pulsada la tecla Control y la j (para abreviar usaremos "C-j"). (+ 3 (+ 1 2)) @@ -35568,7 +35568,7 @@ filename: learn-emacs-lisp-es.el ;; `C-j' añade el resultado de la evaluación al buffer. ;; `C-xC-e' muestra el mismo resultado pero en la linea inferior -;; la cual se llama "minibuffer". Este será el metodo que usaremos +;; la cual se llama "minibuffer". Este será el metodo que usaremos ;; normalmente para no llenar el buffer con texto inútil. ;; `setq' guarda un valor en una variable: @@ -35604,7 +35604,7 @@ filename: learn-emacs-lisp-es.el (defun hello (name) (insert "Hello " name)) ;; `C-xC-e' => hello -;; Ahora vamos a llamar a la funcion con el string "you" como valor para +;; Ahora vamos a llamar a la funcion con el string "you" como valor para ;; el único parámetro que posee. (hello "you") ;; `C-xC-e' => "Hello you" @@ -35621,7 +35621,7 @@ filename: learn-emacs-lisp-es.el ;; `C-xC-e' ;; => [La pantalla ahora tiene dos ventanas y el cursor está en el buffer *test*] -;; Mueve el ratón sobre la ventana superior y pulsa el boton izdo. para volver. +;; Mueve el ratón sobre la ventana superior y pulsa el boton izdo. para volver. ;; Otra forma es usando `C-xo' (pulsa simultaneamente control y x y luego la o) ;; para ir a la otra ventana. @@ -35632,7 +35632,7 @@ filename: learn-emacs-lisp-es.el ;; `C-xC-e' ;; => [De las dos ventanas de la pantalla, el cursor está en la marcada como *test*] -;; A partir de ahora, si no te importa, dejaremos de decir que pulses `C-xC-e': +;; A partir de ahora, si no te importa, dejaremos de decir que pulses `C-xC-e': ;; tendrás que hacerlo para ejecutar cada sexpresión que siga. ;; También tendrás que volver al buffer *scratch* bien con el ratón o con `C-xo'. @@ -35657,13 +35657,13 @@ filename: learn-emacs-lisp-es.el (hello local-name) (other-window 1)) -;; En este caso, no hace falta añadir `progn' ya que `let' permite combinar +;; En este caso, no hace falta añadir `progn' ya que `let' permite combinar ;; varias sexpresiones. ;; Vamos a darle formato a un string: (format "Hello %s!\n" "visitor") -;; Cada %s indica la posicion donde irá un string, el cual será reemplazado +;; Cada %s indica la posicion donde irá un string, el cual será reemplazado ;; por "visitor". "\n" es el caracter de nueva línea. ;; Mejoremos nuestra funcion usando `format': @@ -35719,7 +35719,7 @@ filename: learn-emacs-lisp-es.el ;; Para coger el primer elemento de la lista usaremos `car': (car list-of-names) -;; Para coger todos menos el primer elemento de la lista +;; Para coger todos menos el primer elemento de la lista ;; usaremos `cdr': (cdr list-of-names) @@ -35727,9 +35727,9 @@ filename: learn-emacs-lisp-es.el (push "Stephanie" list-of-names) ;; OJO: `car' y `cdr' no modifican la lista, mientras que `push' sí. -;; ¡Es una diferencia importante! Algunas funciones no tienen efectos +;; ¡Es una diferencia importante! Algunas funciones no tienen efectos ;; colaterales (como `car') mientras que otras sí (como `push'). -;; "N. del T.": estos efectos colaterales se les llama `side-effects' en +;; "N. del T.": estos efectos colaterales se les llama `side-effects' en ;; las distintas variantes de lisp. ;; Llamemos a `hello' con cada elemento de `list-of-names': @@ -35745,7 +35745,7 @@ filename: learn-emacs-lisp-es.el (greeting) ;; ¿Te acuerdas de la función `hello' definida un poco más arriba? -;; Recibía un parámetro: `name'. Así que `mapcar' llama a `hello' con cada +;; Recibía un parámetro: `name'. Así que `mapcar' llama a `hello' con cada ;; elemento de `list-of-names' como parámetro de `hello'. ;; Ahora ordenaremos un poco lo que tenemos en el buffer: @@ -35761,7 +35761,7 @@ filename: learn-emacs-lisp-es.el ;; (search-forward "Hello") busca un string "Hello". ;; (while x y) evalua la/s sexpresion/es y mientras que x devuelva ;; alguna cosa. -;; En el momento que x devuelva `nil' (es decir nada), sale del +;; En el momento que x devuelva `nil' (es decir nada), sale del ;; bucle `while'. (replace-hello-by-bonjour) @@ -35771,8 +35771,8 @@ filename: learn-emacs-lisp-es.el ;; Y además, hemos obtenido un error: "Search failed: Hello". ;; -;; Para evitar este error, hay que decirle a `search-forward' si debería dejar de -;; buscar en el buffer en algún momento y si debería fallar sin quejarse cuando +;; Para evitar este error, hay que decirle a `search-forward' si debería dejar de +;; buscar en el buffer en algún momento y si debería fallar sin quejarse cuando ;; no encuentra nada. ;; (search-forward "Hello" nil t) justo hace eso: @@ -35780,7 +35780,7 @@ filename: learn-emacs-lisp-es.el ;; El argumento `nil' significa que la busqueda no está ligada a ninguna posición. ;; Y el argumento `t' le pide que no diga nada si no encuentra el string. -;; Usaremos esta sexpresión en la función siguiente, la cual ya +;; Usaremos esta sexpresión en la función siguiente, la cual ya ;; no muestra ningún error: (defun hello-to-bonjour () @@ -35807,13 +35807,13 @@ filename: learn-emacs-lisp-es.el (list 'face 'bold))) (other-window 1)) -;; Esta función nos presenta `re-search-forward': en vez de +;; Esta función nos presenta `re-search-forward': en vez de ;; buscar el string "Bonjour" exacto, se busca por un patrón -;; usando una "expresión regular" (lo cual se muestra abreviado +;; usando una "expresión regular" (lo cual se muestra abreviado ;; en el prefijo "re-" del inglés "Regular Expression"). ;; La expresión regular a utilizar es "Bonjour \\(.+\\)!" y se traduce como: -;; el string "Bonjour ", seguido de +;; el string "Bonjour ", seguido de ;; un grupo de | representado por \\( ... \\) ;; cualquier caracter | representado por . ;; al menos una vez | representado por + @@ -36180,7 +36180,7 @@ defmodule MyMod do end # El operador pipe |> permite que se pase la salida de una expresión -# como el primer parámetro en una función. +# como el primer parámetro en una función. Range.new(1,10) |> Enum.map(fn x -> x * x end) @@ -36317,7 +36317,7 @@ filename: learnforth-es.fs Forth fue criado por Charles H. Moore en los 70s. Forth es un lenguaje imperativo, basado en pila y entorno de programación, siendo usado en proyectos como Open Firmware. También esta usado por NASA. -Nota: Este articulo enfoca predominantemente en la Gforth implementación de Forth, pero casi todo +Nota: Este articulo enfoca predominantemente en la Gforth implementación de Forth, pero casi todo de lo que esta escrito aquí debe funcionar en otro sitio. ``` @@ -36397,7 +36397,7 @@ see cuadrado \ : cuadrado dup * ; ok \ Else: : ?>64 ( n -- n ) dup 64 > if ." Mas que 64!" else ." Menos que 64!" then ; 100 ?>64 \ Mas que 64! ok -20 ?>64 \ Menos que 64! ok +20 ?>64 \ Menos que 64! ok \ ------------------------------------ Loops ----------------------------------- @@ -37065,7 +37065,7 @@ saltos de línea.` // mismo tipo cadena // Para añadir elementos a un sector, se utiliza la función incorporada // append(). // El primer argumento es el sector al que se está anexando. Comúnmente, - // la variable del arreglo se actualiza en su lugar, como en el + // la variable del arreglo se actualiza en su lugar, como en el // siguiente ejemplo. sec := []int{1, 2 , 3} // El resultado es un sector de longitud 3. sec = append(sec, 4, 5, 6) // Añade 3 elementos. El sector ahora tiene una @@ -37392,7 +37392,7 @@ utilizar [https://play.golang.org]( https://play.golang.org) como un cosas y el código en el navegador, sin ni siquiera instalar Go. En la lista de lecturas para estudiantes de Go está el -[código fuente de la biblioteca estándar](http://golang.org/src/pkg/). +[código fuente de la biblioteca estándar](http://golang.org/src/pkg/). Ampliamente documentado, que demuestra lo mejor del legible y comprensible Go, con su característico estilo y modismos. ¡O puedes hacer clic en un nombre de función en [la documentación](http://golang.org/pkg/) y @@ -37563,7 +37563,7 @@ println devMap.values() * Si accedes a una propiedad desde dentro de la clase, la propiedad es definida en tiempo de compilación con this implícito o explícito (por ejemplo, this.foo - o simplemente foo), Groovy accederá al campo directamente en vez de usar el + o simplemente foo), Groovy accederá al campo directamente en vez de usar el getter y setter. * Si accedes a una propiedad que no existe usando foo explícito o implícito, entonces @@ -37658,7 +37658,7 @@ def username = user?.username /* Closures - Un Closure en Groovy es como un "bloque de código" o un puntero a un método. Es una + Un Closure en Groovy es como un "bloque de código" o un puntero a un método. Es una porci´øn de código que es definida y ejecutada en un punto futuro en el tiempo. Más información en: http://www.groovy-lang.org/closures.html @@ -37876,7 +37876,7 @@ function truncate(resource $handle) : void // ... } -// Al determinar un tipo, hay que indicar explícitamente si permite el valor +// Al determinar un tipo, hay que indicar explícitamente si permite el valor // NULL function identity(?string $stringOrNull) : ?string { @@ -37887,7 +37887,7 @@ function identity(?string $stringOrNull) : ?string class TypeHintedProperties { public ?string $name; - + protected int $id; private float $score = 100.0; @@ -38009,10 +38009,10 @@ class WithoutArgumentPromotion // Multitarea cooperativa // // "async" y "await" son dos palabras claves nuevas para realizar multi-tarea. -// Esto no implica que se usen hilos, sólo permiten transferir el control de la +// Esto no implica que se usen hilos, sólo permiten transferir el control de la // ejecución. { - for ($i = $start; $i <= $end; $i++) { + for ($i = $start; $i <= $end; $i++) { echo "$i "; // Da a otras tareas la oportunidad de hacer algo @@ -38066,7 +38066,7 @@ class ConsistentBar extends ConsistentFoo { public function __construct(int $x, float $y) { - // El comprobador de tipos de Hack fuerza que los constructores de + // El comprobador de tipos de Hack fuerza que los constructores de // los padres sean llamados. parent::__construct($x, $y); @@ -38087,8 +38087,8 @@ class InvalidFooSubclass extends ConsistentFoo { // Este constructor no coincide con el padre y causará el siguiente error: // - // "This object is of type ConsistentBaz. It is incompatible with this - // object of type ConsistentFoo because some of their methods are + // "This object is of type ConsistentBaz. It is incompatible with this + // object of type ConsistentFoo because some of their methods are // incompatible" public function __construct(float $x) { @@ -38099,7 +38099,7 @@ class InvalidFooSubclass extends ConsistentFoo // producirá el siguiente error: // // "InvalidFooSubclass::otherMethod() is marked as override; no non-private - // parent definition found or overridden parent is defined in non-> public function otherMethod() @@ -38476,7 +38476,7 @@ myMap func (x:xs) = func x:(myMap func xs) myMap (\x -> x + 2) [1..5] -- [3, 4, 5, 6, 7] -- utilizando pliegues (llamado `inject` en algunos lenguajes) con una función --- anónima. foldl1 significa pliegue por la izquierda, y usa el primer valor +-- anónima. foldl1 significa pliegue por la izquierda, y usa el primer valor -- en la lista como el valor inicial para el acumulador. foldl1 (\acc x -> acc + x) [1..5] -- 15 @@ -38505,10 +38505,10 @@ foo = (*5) . (+10) -- (5 + 10) * 5 = 75 foo 5 -- 75 --- fijación de precedencia --- Haskell tiene otro operador llamado `$`. Este operador aplica a una función --- para un parámetro dado. En contraste a la aplicación de función estándar, --- la cúal tiene prioridad más alta posible de 10 y es asociativa por la izquierda, +-- fijación de precedencia +-- Haskell tiene otro operador llamado `$`. Este operador aplica a una función +-- para un parámetro dado. En contraste a la aplicación de función estándar, +-- la cúal tiene prioridad más alta posible de 10 y es asociativa por la izquierda, -- el operador `$` tiene prioridad de 0 y es asociativa por la derecha. Tal que -- una baja prioridad significa que la expresión a su derecha es aplicada como parámetro a la función a su izquierda. @@ -38556,7 +38556,7 @@ haskell = if 1 == 1 then "awesome" else "awful" --- expressiones case: Aquí se muestra como analizar los argumentos +-- expressiones case: Aquí se muestra como analizar los argumentos -- desde línea de comandos case args of "help" -> printHelp @@ -38640,7 +38640,7 @@ countLines = show . length . lines main' = interact countLines --- Puedes pensar en el valor de tipo `IO ()` como la representación +-- Puedes pensar en el valor de tipo `IO ()` como la representación -- de una secuencia de acciones que la computadora hace, al igual que -- un programa escrito en un lenguaje imperativo. Podemos utilizar -- la notación `do` para encadenar acciones. Por ejemplo: @@ -38651,7 +38651,7 @@ sayHello = do name <- getLine -- obtenemos un valor y lo proporcionamos a "name" putStrLn $ "Hola, " ++ name --- Ejercicio: escribe tu propia version de `interact` que solo lea +-- Ejercicio: escribe tu propia version de `interact` que solo lea -- una linea como entrada. -- Nunca se ejecuta el código en `sayHello`, sin embargo. La única @@ -38748,7 +38748,7 @@ lang: es-es --- HTML significa Lenguaje de marcado de hipertexto (HyperText Markup Language). -Este es un lenguaje usado para escribir páginas en la web (WWW). +Este es un lenguaje usado para escribir páginas en la web (WWW). Este es un lenguaje de marcado, es usado para escribir páginas web usando código para indicar cómo se debe mostrar el texto y los datos. En efecto, los archivos html son simples archivos de texto. Qué es esto de marcado? es un método para organizar los datos de la página encerrandolos con etiquetas de apertura y cierre. @@ -38763,7 +38763,7 @@ Este artículo está centrado principalmente en la sintaxis HTML y algunos tips - + @@ -38854,7 +38854,7 @@ Este artículo está centrado principalmente en la sintaxis HTML y algunos tips HTML es escrito en archivos que terminan con (extensión) `.html`. -## Para aprender más! +## Para aprender más! * [wikipedia](https://es.wikipedia.org/wiki/HTML) * [HTML tutorial](https://developer.mozilla.org/es/docs/Web/HTML) @@ -39294,20 +39294,20 @@ lang: es-es --- Tutorial de JavaScript en español. -JavaScript fue creado por Brendan Eich en 1995 mientras trabajaba en Netscape. +JavaScript fue creado por Brendan Eich en 1995 mientras trabajaba en Netscape. Su intención original era crear un lenguaje simple para sitios web, complementándolo con Java para aplicaciones más complejas. Debido a su integracion estrecha con sitios -web y soporte por defecto de los navegadores modernos se ha vuelto mucho más común +web y soporte por defecto de los navegadores modernos se ha vuelto mucho más común para front-end que Java. Sin embargo, JavaScript no sólo se limita a los navegadores web: Node.js, un proyecto que proporciona un entorno de ejecución independiente para el motor V8 de Google Chrome, se está volviendo más y más popular. -¡La retroalimentación es bienvenida! Puedes encontrarme en: +¡La retroalimentación es bienvenida! Puedes encontrarme en: [@adambrenecki](https://twitter.com/adambrenecki), o [adam@brenecki.id.au](mailto:adam@brenecki.id.au). ```js -// Los comentarios en JavaScript son los mismos como comentarios en C. +// Los comentarios en JavaScript son los mismos como comentarios en C. //Los comentarios de una sola línea comienzan con //, /* y los comentarios multilínea comienzan @@ -39362,7 +39362,7 @@ false; 'abc'; "Hola, mundo"; -// La negación se aplica con la expresión ! +// La negación se aplica con la expresión ! !true; // = false !false; // = true @@ -39441,7 +39441,7 @@ miPrimeraVariable--; // de vuelta a 100 // Los arreglos son listas ordenadas de valores, de cualquier tipo. var miArreglo = ["Hola", 45, true]; -// Los miembros de un arreglo pueden ser accesados con la sintaxis +// Los miembros de un arreglo pueden ser accesados con la sintaxis // de indices dentro de corchetes []. // Los índices empiezan en cero. miArreglo[1]; // = 45 @@ -39478,7 +39478,7 @@ miObjeto.miCuartaLlave; // = undefined /////////////////////////////////// // 3. Lógica y estructura de control -// La sintaxis de esta sección es casi idéntica a la de Java. +// La sintaxis de esta sección es casi idéntica a la de Java. // La estructura if funciona de la misma forma. var contador = 1; @@ -39520,8 +39520,8 @@ var nombre = otroNombre || "default"; // la estructura switch usa === para sus comparaciones -// usa 'break' para terminar cada caso -// o los casos después del caso correcto serán ejecutados también. +// usa 'break' para terminar cada caso +// o los casos después del caso correcto serán ejecutados también. calificacion = 'B'; switch (calificacion) { case 'A': @@ -39550,7 +39550,7 @@ function miFuncion(miArgumentoString){ miFuncion("foo"); // = "FOO" // Note que el valor a ser regresado debe estar en la misma línea que la -// palabra clave 'return', de otra forma la función siempre regresará 'undefined' +// palabra clave 'return', de otra forma la función siempre regresará 'undefined' // debido a la inserción automática de punto y coma. function miFuncion() { @@ -39583,7 +39583,7 @@ if (true){ } i; // = 5 - en un lenguaje que da ámbitos por bloque esto sería undefined, pero no aquí. -// Este conlleva a un patrón de diseño común llamado "ejecutar funciones anónimas +// Este conlleva a un patrón de diseño común llamado "ejecutar funciones anónimas //inmediatamente", que preveé variables temporales de fugarse al ámbito global (function(){ var temporal = 5; @@ -39597,7 +39597,7 @@ permanente; // = 10 // Una de las características más útiles de JavaScript son los closures. // Si una función es definida dentro de otra función, la función interna tiene acceso -// a todas las variables de la función externa, incluso aunque la función +// a todas las variables de la función externa, incluso aunque la función // externa ya haya terminado. function decirHolaCadaCincoSegundos(nombre){ var texto = "¡Hola, " + nombre + "!"; @@ -39607,7 +39607,7 @@ function decirHolaCadaCincoSegundos(nombre){ alert(texto); } setTimeout(interna, 5000); - // setTimeout es asíncrono, así que la función decirHolaCadaCincoSegundos + // setTimeout es asíncrono, así que la función decirHolaCadaCincoSegundos // terminará inmediatamente, y setTimeout llamará a interna() a los cinco segundos // Como interna está "cerrada dentro de" decirHolaCadaCindoSegundos, interna todavía tiene // acceso a la variable 'texto' cuando es llamada. @@ -39625,7 +39625,7 @@ var miObjeto = { }; miObjeto.miFuncion(); // = "¡Hola Mundo!" -// Cuando las funciones de un objeto son llamadas, pueden acceder a las variables +// Cuando las funciones de un objeto son llamadas, pueden acceder a las variables // del objeto con la palabra clave 'this'. miObjeto = { miString: "¡Hola Mundo!", @@ -39659,7 +39659,7 @@ otraFuncion.call(miObjeto, " y hola Luna!"); // = "¡Hola Mundo! y hola Luna!" otraFuncion.apply(miObjeto, [" y hola Sol!"]); // = "¡Hola Mundo! y hola Sol!" -// Esto es útil cuando estás trabajando con una función que acepta una secuencia de +// Esto es útil cuando estás trabajando con una función que acepta una secuencia de // argumentos y quieres pasar un arreglo. Math.min(42, 6, 27); // = 6 @@ -39691,7 +39691,7 @@ miNuevoObjeto.miNumero; // = 5 // propiedad en un objeto que no existe en el objeto el intérprete buscará en // el prototipo. -// Algunas implementaciones de JavaScript te permiten acceder al prototipo de +// Algunas implementaciones de JavaScript te permiten acceder al prototipo de // un objeto con la propiedad __proto__. Mientras que esto es útil para explicar // prototipos, no es parte del estándar; veremos formas estándar de usar prototipos // más adelante. @@ -39712,20 +39712,20 @@ miObjeto.sentidoDeLaVida; // = 42 // Esto funcionan también para funciones. miObjeto.miFuncion(); // = "hello world!" -// Por supuesto, si la propiedad que buscas no está en el prototipo, +// Por supuesto, si la propiedad que buscas no está en el prototipo, // se buscará en el prototipo del prototipo. miPrototipo.__proto__ = { miBoolean: true }; miObjeto.miBoolean; // = true -// Esto no involucra ningún copiado, cada objeto guarda una referencia a su +// Esto no involucra ningún copiado, cada objeto guarda una referencia a su // prototipo. Esto significa que podemos alterar el prototipo y nuestros // cambios serán reflejados en todos lados. miPrototipo.sentidoDeLaVida = 43; miObjeto.sentidoDeLaVida; // = 43 -// Mencionabamos anteriormente que __proto__ no está estandarizado, y que no +// Mencionabamos anteriormente que __proto__ no está estandarizado, y que no // existe una forma estándar de acceder al prototipo de un objeto. De todas formas. // hay dos formas de crear un nuevo objeto con un prototipo dado. @@ -39734,7 +39734,7 @@ miObjeto.sentidoDeLaVida; // = 43 var miObjeto = Object.create(miPrototipo); miObjeto.sentidoDeLaVida; // = 43 -// El segundo método, el cual trabaja en todos lados, tiene que ver con los +// El segundo método, el cual trabaja en todos lados, tiene que ver con los // constructores. Los constructores tienen una propiedad llamada prototype. // Este NO ES el prototipo de la función constructor; es el prototipo que // se le da a los nuevos objetos cuando son creados con la palabra clave @@ -39766,7 +39766,7 @@ if (0){ } // Aún así, los objetos que envuelven y los prototipos por defecto comparten -// un prototipo. así que puedes agregar funcionalidades a un string de la +// un prototipo. así que puedes agregar funcionalidades a un string de la // siguiente forma: String.prototype.primerCaracter = function(){ return this.charAt(0); @@ -39793,22 +39793,22 @@ if (Object.create === undefined){ // esta validación sirve para no sobreescribi ## Fuentes y Referencias -La [Red para Desarroladores de Mozilla](https://developer.mozilla.org/en-US/docs/Web/JavaScript) +La [Red para Desarroladores de Mozilla](https://developer.mozilla.org/en-US/docs/Web/JavaScript) proveé excelente documentación para JavaScript para navegadores. Además, está en formato de wiki, por lo que mientras vayas aprendiendo podrás ayudar a los demás con tu experiencia. MDN [Una re-introducción a JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript) -cubre muchos de los conceptos que vimos aquí pero a mayor detalle. Esta guía cubre, más que nada, +cubre muchos de los conceptos que vimos aquí pero a mayor detalle. Esta guía cubre, más que nada, el lenguaje JavaScript solo. Si quieres aprender a cómo usarlo en un ambiente web empieza aprendiendo sobre el [DOM](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core) -[Aprende JavaScript con ejemplos y retos](http://www.learneroo.com/modules/64/nodes/350) es una +[Aprende JavaScript con ejemplos y retos](http://www.learneroo.com/modules/64/nodes/350) es una variante de esta guía pero con retos. [Jardín JavaScript](http://bonsaiden.github.io/JavaScript-Garden/) es una guía para todas las funciones y características contra-intuitivas del lenguaje. -[JavaScript: La guía definitiva](http://www.amazon.com/gp/product/0596805527/) es una guía clásica / libro de referencia. +[JavaScript: La guía definitiva](http://www.amazon.com/gp/product/0596805527/) es una guía clásica / libro de referencia. Aparte de las contribuciones directas para este artículo, algo del contenido se adaptó del tutorial de Python por Louie Dinh en este sitio. y el [Tutorial JS](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript) en la Red de Desarrolladores de Mozilla. @@ -39933,7 +39933,7 @@ tables.animate({margin-top:"+=50", height: "100px"}, 500, myFunction); // Estos son similares a los efectos, pero pueden hacer más $('div').addClass('div') // Añade la clase div a todos los divs -// Métodos comunes de manipulación +// Métodos comunes de manipulación $('p').append('Hola mundo'); // Añade al final del elemento $('p').attr('class'); // Obtiene atributo $('p').attr('class', 'content'); // Configura atributos @@ -39971,7 +39971,7 @@ JSON en su forma más pura no tiene comentarios, pero la mayoría de los parsead { "llave": "valor", - + "llaves": "siempre debe estar entre comillas (ya sean dobles o simples)", "numeros": 0, "strings": "Høla, múndo. Todo el unicode está permitido, así como \"escapar\".", @@ -40001,7 +40001,7 @@ JSON en su forma más pura no tiene comentarios, pero la mayoría de los parsead [0, 0, 0, 1] ] ], - + "estilo alternativo": { "comentario": "Mira esto!" , "posición de la coma": "no importa - mientras este antes del valor, entonces sera válido" @@ -41076,7 +41076,7 @@ fun main(args: Array) { println(even(6)) // => true println(even(7)) // => false - // Las funciones pueden tomar funciones como argumentos y + // Las funciones pueden tomar funciones como argumentos y // retornar funciones. fun not(f: (Int) -> Boolean) : (Int) -> Boolean { return {n -> !f.invoke(n)} @@ -41419,7 +41419,7 @@ He necesitado añadir el signo $ antes de los símbolos. Esto se debe a que cuan Mi letra griega favorita es $\xi$. También me gustan $\beta$, $\gamma$ y $\sigma$. Todavía no he encontrado una letra griega que LaTeX no conozca. -Los operadores son también una parte esencial de un documento matemático: +Los operadores son también una parte esencial de un documento matemático: funciones trigonométricas ($\sin$, $\cos$, $\tan$), logaritmos y exponenciales ($\log$, $\exp$), límites ($\lim$), etc. tienen comandos predefinidos en LaTeX. Vamos a escribir una ecuación para ver cómo se hace: \\ @@ -41934,7 +41934,7 @@ comparación de patrones y muchas otras cosas son las adiciones que hace LiveScript. Está inspirado en lenguajes como Haskell, F# y Scala. Livescript es un bifurcación de [Coco][], que en sí mismo es una bifurcación -de [CoffeeScript][]. El lenguaje es estable, y una nueva versión está en +de [CoffeeScript][]. El lenguaje es estable, y una nueva versión está en desarrollo activo para traer aún más funciones. [Coco]: http://satyr.github.io/coco/ @@ -41967,7 +41967,7 @@ void # igual que `undefined` pero más seguro (no puede ser sobre esc # Ningún valor válido se representa con Null. null -# El valor básico más pequeño es de tipo lógico: +# El valor básico más pequeño es de tipo lógico: true false @@ -41975,7 +41975,7 @@ false on; off yes; no -# Luego vienen los números. Estos número con punto flotante tienen la misma +# Luego vienen los números. Estos número con punto flotante tienen la misma # precisión que los de JS: 10 0.4 # Note que el `0` al inicio es requerido @@ -42003,7 +42003,7 @@ frutas = * \naranja * \pera -# Una forma más concisa de representarlos son con corchetes: +# Una forma más concisa de representarlos son con corchetes: frutas = [ \manzana, \naranja, \pera ] # Esta es una conveniente de crear listas de Strings, usando @@ -42055,7 +42055,7 @@ expresion-regular = // # Las comparaciones son casi las mismas, excepto `==` que es igual # a `===` en. El operador `==` de JS en LiveScript es `~=`, y `===` -# permite comparaciones entre objetos y arreglos, y también +# permite comparaciones entre objetos y arreglos, y también # comparasiones más estrictas: 2 == 2 # => true 2 == "2" # => false @@ -42070,13 +42070,13 @@ expresion-regular = // # Otros operadores relacionales incluyen <, <=, > and >= -# Los valores lógicos pueden ser combinados mediante los operadores -# lógicos `or`, `and` and `not`: +# Los valores lógicos pueden ser combinados mediante los operadores +# lógicos `or`, `and` and `not`: true and false # => false false or true # => true not false # => true -# Las colecciones también tienen algunos operadores adicionales: +# Las colecciones también tienen algunos operadores adicionales: [1, 2] ++ [3, 4] # => [1, 2, 3, 4] 'a' in <[ a b c ]> # => true 'nombre' of { nombre: 'Chris' } # => true @@ -42084,11 +42084,11 @@ not false # => true ######################################################################## ## 3. Funciones -######################################################################## +######################################################################## # Como LiveScript es funcional, uno esperaría que las funciones recibirían # un buen tratamiento. En LiveScript es más que aparente que las funciones -# son de primera clase: +# son de primera clase: suma = (primerElemento, segundoElemento) -> primerElemento + segundoElemento add 1, 2 # => 3 @@ -42096,14 +42096,14 @@ add 1, 2 # => 3 dos = -> 2 dos! -# LiveScript, al igual que JS, aplica ámbitos (alcance) a sus variables y +# LiveScript, al igual que JS, aplica ámbitos (alcance) a sus variables y # tiene cierres (closures) también. A diferencia de JavaScript, el operador # `=` sirve como declaración y siempre declarará la variable en lado izquierdo. # El operador `:=` está disponible para *reusar* un nombre del ámbito del padre. # Puedes acceder a los argumentos de una función para conseguir -# los datos internos de una estructura de datos rápidamente: +# los datos internos de una estructura de datos rápidamente: cola = ([cabeza, ...resto]) -> resto cola [1, 2, 3] # => [2, 3] @@ -42113,7 +42113,7 @@ foo = (a = 1, b = 2) -> a + b foo! # => 3 # También puedes usarlo para clonar un argumento en particular para evitar efectos -# secundarios, por ejemplo: +# secundarios, por ejemplo: copiar = (^^objetivo, fuente) -> for k,v of fuente => objetivo[k] = v objetivo @@ -42132,12 +42132,12 @@ identidad = -> it identidad 1 # => 1 # Los operadores no son funciones en LiveScript. ¡Pero se pueden convertir fácilmente -# en una! Presentamos el seccionamiento de operadores: +# en una! Presentamos el seccionamiento de operadores: dividir-entre-2 = (/ 2) [2, 4, 8, 16].map(dividir-entre-2) .reduce (+) -# LiveScript vive de otras cosas aparte de las funciones. Como en cualquier lenguaje -# funcional obtienes medios para componer (juntar) funciones: +# LiveScript vive de otras cosas aparte de las funciones. Como en cualquier lenguaje +# funcional obtienes medios para componer (juntar) funciones: doble-menos-uno = (- 1) . (* 2) # A parte de la clásica fórmula matemática `f . g`, también cuentas co los operadores @@ -42155,7 +42155,7 @@ map = (f, xs) --> xs.map f reducir = (f, xs, initial) --> xs.reducir f, initial [1 2 3] |> reducir (+), _, 0 # => 6 -# El guíon bajo también se usa para apartar lugares para tus argumentos, por ejemplo: +# El guíon bajo también se usa para apartar lugares para tus argumentos, por ejemplo: division = (dividendo,divisor) -> dividendo / divisor dividir-entre-2 = division _, 2 dividir-entre-2 4 # => 2 @@ -42182,7 +42182,7 @@ x = if n > 0 then \positive else \negative # En lugar de `then`, puedes usar `=>` x = if n > 0 => \positivo else \negativo - + # A pesar de esto, a las condiciones complejas es mejor expresarlas con el `switch`: y = {} x = switch @@ -42192,7 +42192,7 @@ x = switch | otherwise => \objeto # `otherwise` y `_` son lo mismo. # Los cuerpos de las funciones, declaraciones y asignaciones tienen un `switch` por defecto, -# así que no necesitas escribirlo nuevamente: +# así que no necesitas escribirlo nuevamente: take = (n, [x, ...xs]) --> | n == 0 => [] @@ -42213,7 +42213,7 @@ pares = [x for x in oneToTwenty when x % 2 == 0] # `when` y `unless` pueden ser usados como filtros en el auxiliar. -# Los auxiliares para objetos funcionan de la misma forma, excepto que regresa un +# Los auxiliares para objetos funcionan de la misma forma, excepto que regresa un # objeto en lugar de un arreglo: copiar = { [k, v] for k, v of source } @@ -42222,7 +42222,7 @@ copiar = { [k, v] for k, v of source } ## 4. PROGRAMACIÓN ORIENTADA A OBJETOS ######################################################################## -# Mientras que LiveScript es un lenguaje funcional en la mayoría de los +# Mientras que LiveScript es un lenguaje funcional en la mayoría de los # aspectos, también brinda ayudas para la programación orientada a objetos. # Algunas de estas ayudas son la sintaxis para las clases y un poco de "azucar" # para las clases heredada de CoffeeScript: @@ -42252,10 +42252,10 @@ gatito.abrazar! # => "*Mei (un gato) es abrazado*" ## Más recursos Existe mucho más sobre LiveScript, pero esto debe bastar para que empieces. -El [sitio oficial](http://livescript.net/) tiene mucha información sobre el +El [sitio oficial](http://livescript.net/) tiene mucha información sobre el lenguaje, y un compilador en linea para que pruebes cosas inmediatamente. -También querras probar un poco de [prelude.ls](http://gkz.github.io/prelude-ls/), +También querras probar un poco de [prelude.ls](http://gkz.github.io/prelude-ls/), y probar el canal `#livescript` en la red Freenode. --- language: markdown @@ -42276,7 +42276,7 @@ fácilmente a HTML (y, actualmente, otros formatos también). ```markdown @@ -42303,7 +42303,7 @@ Esto es un h2 ------------- - *Este texto está en itálicas.* @@ -42316,12 +42316,12 @@ __Al igual que este texto.__ **_Al igual que este!_** *__¡Y este!__* - ~~Este texto está tachado.~~ - Este es un párrafo. Estoy escribiendo un párrafo, ¿No es divertido? @@ -42334,7 +42334,7 @@ Ahora estoy en el párrafo dos. -Termino con dos espacios (selecciona esta línea completa para que los veas). +Termino con dos espacios (selecciona esta línea completa para que los veas). ¡Hay un
    arriba de mí! @@ -42392,7 +42392,7 @@ es una buena idea --> 4. Item cuatro - Esto es código @@ -42426,7 +42426,7 @@ con o sin espacios. --> *** --- -- - - +- - - **************** @@ -42541,45 +42541,45 @@ Los comentarios de múltiples líneas se ven así. // Xcode 5, puedes importarlos de la siguiente manera: @import Foundation; -// El punto de entrada de tu programa es una función llamada -// main con un tipo de retorno entero. +// El punto de entrada de tu programa es una función llamada +// main con un tipo de retorno entero. int main (int argc, const char * argv[]) { // Crear un autorelease pool para manejar la memoria al programa NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - // Si se utiliza el conteo automático de referencias (ARC), - // utiliza @autoreleasepool: + // Si se utiliza el conteo automático de referencias (ARC), + // utiliza @autoreleasepool: @autoreleasepool { // Utiliza NSLog para imprimir líneas a la consola NSLog(@"Hello World!"); // Imprimir el string "Hello World!" - + /////////////////////////////////////// // Tipos y variables /////////////////////////////////////// - + // Declaraciones de primitivos int myPrimitive1 = 1; long myPrimitive2 = 234554664565; - + // Declaraciones de objetos // Pon el * como prefijo de los nombre de las variables para declaraciones - // de objetos de tipos fuertes + // de objetos de tipos fuertes MyClass *myObject1 = nil; // Tipo fuerte id myObject2 = nil; // Tipo débil // %@ es un objeto // 'description' es una convención para mostrar el valor de los objetos - NSLog(@"%@ and %@", myObject1, [myObject2 description]); + NSLog(@"%@ and %@", myObject1, [myObject2 description]); // imprime => "(null) and (null)" - + // String NSString *worldString = @"World"; - NSLog(@"Hello %@!", worldString); // imprime => "Hello World!" + NSLog(@"Hello %@!", worldString); // imprime => "Hello World!" // NSMutableString es una versión mutable del objeto NSString NSMutableString *mutableString = [NSMutableString stringWithString:@"Hello"]; [mutableString appendString:@" World!"]; NSLog(@"%@", mutableString); // imprime => "Hello World!" - + // Literales de caracteres NSNumber *theLetterZNumber = @'Z'; char theLetterZ = [theLetterZNumber charValue]; // o 'Z' @@ -42589,11 +42589,11 @@ int main (int argc, const char * argv[]) NSNumber *fortyTwoNumber = @42; int fortyTwo = [fortyTwoNumber intValue]; // o 42 NSLog(@"%i", fortyTwo); - + NSNumber *fortyTwoUnsignedNumber = @42U; unsigned int fortyTwoUnsigned = [fortyTwoUnsignedNumber unsignedIntValue]; // o 42 NSLog(@"%u", fortyTwoUnsigned); - + NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:42]; short fortyTwoShort = [fortyTwoShortNumber shortValue]; // o 42 NSLog(@"%hi", fortyTwoShort); @@ -42601,7 +42601,7 @@ int main (int argc, const char * argv[]) NSNumber *fortyOneShortNumber = [NSNumber numberWithShort:41]; unsigned short fortyOneUnsigned = [fortyOneShortNumber unsignedShortValue]; // o 41 NSLog(@"%u", fortyOneUnsigned); - + NSNumber *fortyTwoLongNumber = @42L; long fortyTwoLong = [fortyTwoLongNumber longValue]; // o 42 NSLog(@"%li", fortyTwoLong); @@ -42615,18 +42615,18 @@ int main (int argc, const char * argv[]) float piFloat = [piFloatNumber floatValue]; // o 3.141592654f NSLog(@"%f", piFloat); // imprime => 3.141592654 NSLog(@"%5.2f", piFloat); // imprime => " 3.14" - + NSNumber *piDoubleNumber = @3.1415926535; double piDouble = [piDoubleNumber doubleValue]; // o 3.1415926535 NSLog(@"%f", piDouble); NSLog(@"%4.2f", piDouble); // imprime => "3.14" - // NSDecimalNumber es una clase de punto-fijo que es más preciso que float o double + // NSDecimalNumber es una clase de punto-fijo que es más preciso que float o double NSDecimalNumber *oneDecNum = [NSDecimalNumber decimalNumberWithString:@"10.99"]; NSDecimalNumber *twoDecNum = [NSDecimalNumber decimalNumberWithString:@"5.002"]; - // NSDecimalNumber no tiene la capacidad de utilizar los operadores estándares - // +, -, * , /, por lo que cuenta con sus propios operadores: - [oneDecNum decimalNumberByAdding:twoDecNum]; + // NSDecimalNumber no tiene la capacidad de utilizar los operadores estándares + // +, -, * , /, por lo que cuenta con sus propios operadores: + [oneDecNum decimalNumberByAdding:twoDecNum]; [oneDecNum decimalNumberBySubtracting:twoDecNum]; [oneDecNum decimalNumberByMultiplyingBy:twoDecNum]; [oneDecNum decimalNumberByDividingBy:twoDecNum]; @@ -42642,13 +42642,13 @@ int main (int argc, const char * argv[]) // Objecto arreglo // Puede contener diferentes tipos de datos, pero deben de ser un objeto de - // Objective-C + // Objective-C NSArray *anArray = @[@1, @2, @3, @4]; NSNumber *thirdNumber = anArray[2]; NSLog(@"Third number = %@", thirdNumber); // imprime => "Third number = 3" // NSMutableArray es una versión mutable de NSArray, permitiendo el cambio // de los elementos del arreglo y el agrandado o encojimiento del objeto arreglo. - // Conveniente, pero no tan eficiente como NSArray en cuanto a rendimiento. + // Conveniente, pero no tan eficiente como NSArray en cuanto a rendimiento. NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:2]; [mutableArray addObject:@"Hello"]; [mutableArray addObject:@"World"]; @@ -42677,7 +42677,7 @@ int main (int argc, const char * argv[]) /////////////////////////////////////// // Operadores /////////////////////////////////////// - + // Los operadores funcionan como en el lenguaje C // Por ejemplo: 2 + 5; // => 7 @@ -42722,14 +42722,14 @@ int main (int argc, const char * argv[]) NSLog(@"I print"); } break; } - + // Declaración de ciclos While int ii = 0; while (ii < 4) { - NSLog(@"%d,", ii++); // ii++ incrementa ii en la misma línea, luego de + NSLog(@"%d,", ii++); // ii++ incrementa ii en la misma línea, luego de // utilizar su valor - } // imprime => "0," + } // imprime => "0," // "1," // "2," // "3," @@ -42739,26 +42739,26 @@ int main (int argc, const char * argv[]) for (jj=0; jj < 4; jj++) { NSLog(@"%d,", jj); - } // imprime => "0," + } // imprime => "0," // "1," // "2," // "3," - + // Declaraciones foreach NSArray *values = @[@0, @1, @2, @3]; for (NSNumber *value in values) { NSLog(@"%@,", value); - } // imprime => "0," + } // imprime => "0," // "1," // "2," // "3," - // Objeto de ciclos For. Puede ser utilizado con cualquier tipo de objecto de + // Objeto de ciclos For. Puede ser utilizado con cualquier tipo de objecto de // Objective-C - for (id item in values) { - NSLog(@"%@,", item); - } // imprime => "0," + for (id item in values) { + NSLog(@"%@,", item); + } // imprime => "0," // "1," // "2," // "3," @@ -42769,7 +42769,7 @@ int main (int argc, const char * argv[]) // Tus declaraciones aquí @throw [NSException exceptionWithName:@"FileNotFoundException" reason:@"File Not Found on System" userInfo:nil]; - } @catch (NSException * e) // utiliza: @catch (id exceptionName) para atrapar + } @catch (NSException * e) // utiliza: @catch (id exceptionName) para atrapar // todos los objetos { NSLog(@"Exception: %@", e); @@ -42779,30 +42779,30 @@ int main (int argc, const char * argv[]) } // imprime => "Exception: File Not Found on System" // "Finally. Time to clean up." - // Los objetos NSError son útiles para argumentos de función para los - // errores de usuario. + // Los objetos NSError son útiles para argumentos de función para los + // errores de usuario. NSError *error = [NSError errorWithDomain:@"Invalid email." code:4 userInfo:nil]; - + /////////////////////////////////////// // Objetos /////////////////////////////////////// - + // Crea una instancia de objeto alocando memoria e inicializándola // Un objeto no es completamente funcional hasta que ambos pasos hayan sido // completados MyClass *myObject = [[MyClass alloc] init]; - + // El modelo de programación orientada a objetos de Objective-C es basada en // el envío de mensajes a instancias de objetos - // En Objective-C no se llama a un método; se envía un mensaje + // En Objective-C no se llama a un método; se envía un mensaje [myObject instanceMethodWithParameter:@"Steve Jobs"]; - // Limpiar la memoria que se utilizó en el programa + // Limpiar la memoria que se utilizó en el programa [pool drain]; // Fin de @autoreleasepool } - + // Fin del programa return 0; } @@ -42820,29 +42820,29 @@ int main (int argc, const char * argv[]) // @property tipo nombre; <= declaración de propiedades // -/+ (tipo) Declaración de método; <= Declaración de método // @end -@interface MyClass : NSObject // NSObject es la clase de objeto +@interface MyClass : NSObject // NSObject es la clase de objeto // base de Objective-C. { - // Declaraciones de variables de instancia (puede existir en el archivo de - // interfaz o de implementación) - int count; // Acceso protegido por defecto. - @private id data; // Acceso privado (Más conveniente de declarar en el + // Declaraciones de variables de instancia (puede existir en el archivo de + // interfaz o de implementación) + int count; // Acceso protegido por defecto. + @private id data; // Acceso privado (Más conveniente de declarar en el // archivo de implementación) - NSString *name; + NSString *name; } -// Notación conveneinte para acceso público de las variables para generar un +// Notación conveneinte para acceso público de las variables para generar un // método setter -// Por defecto, el nombre del método setter 'set' seguido del nombre de +// Por defecto, el nombre del método setter 'set' seguido del nombre de // variable @property @property int propInt; // Nombre del método 'setter' = 'setPropInt' @property (copy) id copyId; // (copy) => Copia el objeto durante la asignación // (readonly) => No se le puede asignar un valor fuera de @interface -@property (readonly) NSString *roString; // utiliza @synthesize en +@property (readonly) NSString *roString; // utiliza @synthesize en // @implementation para crear un accesor // Puedes personalizar el nombre del getter y del setter en lugar de utilizar // el nombre por defecto "set". @property (getter=lengthGet, setter=lengthSet:) int length; - + // Métodos +/- (return type)methodSignature:(Parameter Type *)parameterName; @@ -42856,22 +42856,22 @@ int main (int argc, const char * argv[]) // Métodos de constructor con argumentos - (id)initWithDistance:(int)defaultDistance; -// Los nombres de los métodos de Objective-C son muy descriptivos. +// Los nombres de los métodos de Objective-C son muy descriptivos. // Siempre nombra los métodos de acuerdo con sus argumentos @end // Define el final de la interfaz -// Para acceder a las variables públicas desde el archivo de implementación, -// @property genera un método setter automáticamente. El nombre del método +// Para acceder a las variables públicas desde el archivo de implementación, +// @property genera un método setter automáticamente. El nombre del método // es 'set' seguido de un nombre de variable @property: -MyClass *myClass = [[MyClass alloc] init]; // Crea una instancia del objeto MyClass -[myClass setCount:10]; +MyClass *myClass = [[MyClass alloc] init]; // Crea una instancia del objeto MyClass +[myClass setCount:10]; NSLog(@"%d", [myClass count]); // imprime => 10 // O utilizando los métodos getter y setter personalizados en @interface: [myClass lengthSet:32]; NSLog(@"%i", [myClass lengthGet]); // imprime => 32 -// Por conveniencia, puedes utilizar la notación de punto para asignar y +// Por conveniencia, puedes utilizar la notación de punto para asignar y // acceder a las variables de una instancia de objeto. myClass.count = 45; NSLog(@"%i", myClass.count); // imprime => 45 @@ -42885,16 +42885,16 @@ MyClass *myClass = [[MyClass alloc] init]; // Crea una instancia de objeto Mycla NSString *stringFromInstanceMethod = [myClass instanceMethodWithParameter:@"Hello"]; // Selectors -// Una forma dinámica de representar métodos. Utilizados para llamar métodos -// de una clase, pasar métodos a través de funciones para avisar a otras clases +// Una forma dinámica de representar métodos. Utilizados para llamar métodos +// de una clase, pasar métodos a través de funciones para avisar a otras clases // para que lo llamen, y para guardar métodos como una variable. -// SEL es el tipo de dato. @selector() devuelve un selector del nombre de -// método proveído methodAparameterAsString:andAParameterAsNumber: es un nombre +// SEL es el tipo de dato. @selector() devuelve un selector del nombre de +// método proveído methodAparameterAsString:andAParameterAsNumber: es un nombre // para un método en MyClass -SEL selectorVar = @selector(methodAParameterAsString:andAParameterAsNumber:); +SEL selectorVar = @selector(methodAParameterAsString:andAParameterAsNumber:); if ([myClass respondsToSelector:selectorVar]) { // Revisa si la clase contiene el método - // Debe de poner todos los argumentos de método en un solo objeto para mandar una - // función performSelector. + // Debe de poner todos los argumentos de método en un solo objeto para mandar una + // función performSelector. NSArray *arguments = [NSArray arrayWithObjects:@"Hello", @4, nil]; [myClass performSelector:selectorVar withObject:arguments]; // Calls the method } else { @@ -42913,12 +42913,12 @@ if ([myClass respondsToSelector:selectorVar]) { // Revisa si la clase contiene e _count = 5; // Hace referencia a "int count" de la interfaz de MyClass // Accede variables definidas en el archivo de implementación: distance = 18; // Hace referencia a "long distance" de la implementación de MyClass -// Para utilizar una variable @property en el archivo de implementación, utiliza +// Para utilizar una variable @property en el archivo de implementación, utiliza // @synthesize para crear una variable de acceso: @synthesize roString = _roString; // _roString ahora está disponible en @implementation // Lamado antes de llamar algún método o instanciar cualquier objeto -+ (void)initialize ++ (void)initialize { if (self == [MyClass class]) { distance = 0; @@ -42929,7 +42929,7 @@ distance = 18; // Hace referencia a "long distance" de la implementación de MyC // del objeto es cero - (void)dealloc { - [height release]; // Si no utilizas ARC, asegúrate de liberar las variables de + [height release]; // Si no utilizas ARC, asegúrate de liberar las variables de // objeto de las clases [super dealloc]; // y llama el método dealloc de la clase padre } @@ -42938,7 +42938,7 @@ distance = 18; // Hace referencia a "long distance" de la implementación de MyC // Este es el constructor por defecto que es llamado cuando el objeto es inicializado. - (id)init { - if ((self = [super init])) // 'super' es utilizado para acceder a los + if ((self = [super init])) // 'super' es utilizado para acceder a los // métodos de la clase padre. { self.count = 1; // 'self' es utilizado para que el objeto se llame a sí mismo. @@ -42946,7 +42946,7 @@ distance = 18; // Hace referencia a "long distance" de la implementación de MyC return self; } // Se pueden crear constructores que contiene argumentos -- (id)initWithDistance:(int)defaultDistance +- (id)initWithDistance:(int)defaultDistance { distance = defaultDistance; return self; @@ -42957,7 +42957,7 @@ distance = 18; // Hace referencia a "long distance" de la implementación de MyC return @"Some string"; } -+ (MyClass *)myClassFromHeight:(NSNumber *)defaultHeight ++ (MyClass *)myClassFromHeight:(NSNumber *)defaultHeight { height = defaultHeight; return [[self alloc] init]; @@ -42991,20 +42991,20 @@ distance = 18; // Hace referencia a "long distance" de la implementación de MyC /////////////////////////////////////// // Categorías /////////////////////////////////////// -// Una categoría es un grupo de métodos diseñados para extender una clase. -// Te permiten agregar nuevos métodos a una clase existente por propósitos -// de organización. Éstos no deben de serconfundidos con subclases. -// Las subclases existen para CAMBIAR la funcionalidad de un objeto mientras +// Una categoría es un grupo de métodos diseñados para extender una clase. +// Te permiten agregar nuevos métodos a una clase existente por propósitos +// de organización. Éstos no deben de serconfundidos con subclases. +// Las subclases existen para CAMBIAR la funcionalidad de un objeto mientras // que las categoríasle AGREGAN funcionalidad de un objeto. // Las categorías te permiten: // -- Agregar métodos a una clase existente por propósitos de oganización. -// -- Extender clases de objetos de Objective-C (ejemplo: NSString) para +// -- Extender clases de objetos de Objective-C (ejemplo: NSString) para // agregar tus propios métodos. // -- Agregar la habilidad de crear métodos protegidos y privados para las clases. -// NOTA: No sobreescribas los métodos de las clases base en una categoría -// aunque tengas la habilidad de poder hacerlo. Sobreescribir métodos puede -// causar errores en la compilación después entre diferentes categorías y -// puede arruinar el propósito de las categorías de solo AGREGAR funcionalidad. +// NOTA: No sobreescribas los métodos de las clases base en una categoría +// aunque tengas la habilidad de poder hacerlo. Sobreescribir métodos puede +// causar errores en la compilación después entre diferentes categorías y +// puede arruinar el propósito de las categorías de solo AGREGAR funcionalidad. // Utiliza subclass para sobreescribir métodos. // Aquí una clase base simple, Car. @@ -43035,19 +43035,19 @@ distance = 18; // Hace referencia a "long distance" de la implementación de MyC @end -// Ahora, si quisieramos crear un objeto Truck (Camión), crearíamos una -// subclase de Car (Carro) como si le cambiaramos de funcionalidad de Car -// para que se comporte como un camión. Pero digamos que únicamente queremos -// agregar funcionalidad al Car (Carro) existente. Un buen ejemplo sería -// limpiar el carro. Así que crearíamos una cateog®iea para agregar los -// métodos de limpieza: +// Ahora, si quisieramos crear un objeto Truck (Camión), crearíamos una +// subclase de Car (Carro) como si le cambiaramos de funcionalidad de Car +// para que se comporte como un camión. Pero digamos que únicamente queremos +// agregar funcionalidad al Car (Carro) existente. Un buen ejemplo sería +// limpiar el carro. Así que crearíamos una cateog®iea para agregar los +// métodos de limpieza: // Archivo @interface: Car+Clean.h (NombreBaseDeClase+NombreDeCategoria.h) #import "Car.h" // Asegúrate de improtar la clase que deseas extener. -@interface Car (Clean) // El nombre de la categoría está dentro de (), +@interface Car (Clean) // El nombre de la categoría está dentro de (), // seguido del nombre de la clase base -- (void)washWindows; // Nombres de los nuevos métodos que le agregamos +- (void)washWindows; // Nombres de los nuevos métodos que le agregamos // a nuestro objeto Car - (void)wax; @@ -43065,14 +43065,14 @@ distance = 18; // Hace referencia a "long distance" de la implementación de MyC NSLog(@"Waxed."); } -@end +@end -// Cualquier instancia del objeto Car tiene la habilidad de utilizar una -// categoría. Todo lo que necesitan es importarlo: -#import "Car+Clean.h" // Importa todas las diferentes categorías que +// Cualquier instancia del objeto Car tiene la habilidad de utilizar una +// categoría. Todo lo que necesitan es importarlo: +#import "Car+Clean.h" // Importa todas las diferentes categorías que // necesites utilizar -#import "Car.h" // También debes de importar la clase base para su - // funcionalidad original +#import "Car.h" // También debes de importar la clase base para su + // funcionalidad original int main (int argc, const char * argv[]) { @autoreleasepool { @@ -43083,29 +43083,29 @@ int main (int argc, const char * argv[]) { [mustang turnOn]; // Utiliza métodos de la clase base Car. [mustang washWindows]; // Utiliza métodos de la categoría Clean de Car. } - return 0; + return 0; } // Objective-C no tiene declaraciones para métodos protegidos, pero los puedes -// simular. Crea una categoría conteniendo todos los métodos protegidos, -// luego importa ÚNICAMENTE al archivo @implementation de una clase que +// simular. Crea una categoría conteniendo todos los métodos protegidos, +// luego importa ÚNICAMENTE al archivo @implementation de una clase que // pertenece a la clase Car. -@interface Car (Protected) // Nombrando la categoría 'Protected' para +@interface Car (Protected) // Nombrando la categoría 'Protected' para // recordar que los métodos están protegidos - -- (void)lockCar; // Los métodos enlistados aquí solo puedens ser creados + +- (void)lockCar; // Los métodos enlistados aquí solo puedens ser creados // por objetos Car @end -// Para utilizar los métodos protegidos, importa la categoría, +// Para utilizar los métodos protegidos, importa la categoría, // luego implementa sus métodos: -#import "Car+Protected.h" // Recuerda, importa únicamente el archivo +#import "Car+Protected.h" // Recuerda, importa únicamente el archivo // de @implementation -@implementation Car +@implementation Car - (void)lockCar { - NSLog(@"Car locked."); // Las instancias de Car no puede utilizar + NSLog(@"Car locked."); // Las instancias de Car no puede utilizar // lockCar porque no se encuentra en @interface } @@ -43114,39 +43114,39 @@ int main (int argc, const char * argv[]) { /////////////////////////////////////// // Extensiones /////////////////////////////////////// -// Las Extensions te permiten sobreescribir atributos de propiedades de +// Las Extensions te permiten sobreescribir atributos de propiedades de // acceso público y métodos de un @interface // Archivo @interface: Shape.h -@interface Shape : NSObject +@interface Shape : NSObject @property (readonly) NSNumber *numOfSides; - (int)getNumOfSides; @end -// Puedes sobreescribir la variable numOfSides o el métodos getNumOfSlides +// Puedes sobreescribir la variable numOfSides o el métodos getNumOfSlides // para modificarlos con una extensión: // Archivo @implementation: Shape.m #import "Shape.h" -// Las extensiones se encuentran en el mismo archivo que el archivo +// Las extensiones se encuentran en el mismo archivo que el archivo // de @implementation -@interface Shape () // () después del nombre de la clase base declara +@interface Shape () // () después del nombre de la clase base declara // una extensión @property (copy) NSNumber *numOfSides; // Hacer numOfSlides copy en lugar // de readonly. --(NSNumber)getNumOfSides; // Hacer que getNumOfSides devuelva un NSNumber +-(NSNumber)getNumOfSides; // Hacer que getNumOfSides devuelva un NSNumber // en lugar de un int. --(void)privateMethod; // También puedes crear una nuevos métodos privados +-(void)privateMethod; // También puedes crear una nuevos métodos privados // dentro de las extensiones @end // @implementation principal: -@implementation Shape +@implementation Shape @synthesize numOfSides = _numOfSides; --(NSNumber)getNumOfSides { // Todas las declaraciones dentro de extensions +-(NSNumber)getNumOfSides { // Todas las declaraciones dentro de extensions // deben de ser dentro de @implementation return _numOfSides; } @@ -43160,13 +43160,13 @@ int main (int argc, const char * argv[]) { // Protocolos /////////////////////////////////////// // Un protocolo declara métodos que pueden ser implementados por cualquier otra -// clase. Los protocolos no son clases. Simplementen define una interfaz que +// clase. Los protocolos no son clases. Simplementen define una interfaz que // otros objetos deben de implementar. // Archivo @protocol: "CarUtilities.h" -@protocol CarUtilities // => Nombre de otro protocolo +@protocol CarUtilities // => Nombre de otro protocolo // que se incluye en éste - @property BOOL engineOn; // La clase que lo adopta debe de utilizar - // @synthesize para todas las @properties definidas + @property BOOL engineOn; // La clase que lo adopta debe de utilizar + // @synthesize para todas las @properties definidas - (void)turnOnEngine; // y todos los métodos definidos @end // A continuación una clase ejemplo que implementa el protcolo @@ -43175,27 +43175,27 @@ int main (int argc, const char * argv[]) { @interface Car : NSObject // El nombre del protocolo dentro de <> // No necesitas los nombres de @property o métodos aquí para CarUtilities. // Estos solo es requerido por @implementation. -- (void)turnOnEngineWithUtilities:(id )car; // También Puedes - // utilizar protocolos +- (void)turnOnEngineWithUtilities:(id )car; // También Puedes + // utilizar protocolos // como datos. @end -// El @implementation necesita que se implementen @properties y métodos +// El @implementation necesita que se implementen @properties y métodos // del protocolo. @implementation Car : NSObject -@synthesize engineOn = _engineOn; // Crear una declaración @synthesize para el +@synthesize engineOn = _engineOn; // Crear una declaración @synthesize para el // @property engineOn. -- (void)turnOnEngine { // Implementa turnOnEngine como quieras. Los +- (void)turnOnEngine { // Implementa turnOnEngine como quieras. Los // protocolos no definen _engineOn = YES; // cómo implementas un método, con tal de que lo implementes. } -// Puedes utilizar un protocolo como data mientras sepas quee métodos y variables +// Puedes utilizar un protocolo como data mientras sepas quee métodos y variables // tiene implementado. -- (void)turnOnEngineWithCarUtilities:(id )objectOfSomeKind { - [objectOfSomeKind engineOn]; // Tienes acceso a las variables +- (void)turnOnEngineWithCarUtilities:(id )objectOfSomeKind { + [objectOfSomeKind engineOn]; // Tienes acceso a las variables [objectOfSomeKind turnOnEngine]; // y los métodos del objeto - [objectOfSomeKind engineOn]; // Puede o no puede ser YES. La clase lo + [objectOfSomeKind engineOn]; // Puede o no puede ser YES. La clase lo // implementa como se quiera. } @@ -43214,15 +43214,15 @@ if ([myClass conformsToProtocol:@protocol(CarUtilities)]) { } else if ([carInstance conformsToProtocol:@protocol(CarUtilities)]) { NSLog(@"This does run as the Car class implements the CarUtilities protocol."); } -// Las categorías también pueden implementar protcolos: @interface Car +// Las categorías también pueden implementar protcolos: @interface Car // (CarCategory) -// Puedes implementar varios protocolos: +// Puedes implementar varios protocolos: // @interface Car : NSObject -// NOTA: Si dos o más protocolos dependen entre sí, asegúrate de declararlos +// NOTA: Si dos o más protocolos dependen entre sí, asegúrate de declararlos // de manera adelantada: #import "Brother.h" -@protocol Brother; // Declaración adelantada. Sin ésto, el compilador +@protocol Brother; // Declaración adelantada. Sin ésto, el compilador // tira un error. @protocol Sister @@ -43231,14 +43231,14 @@ if ([myClass conformsToProtocol:@protocol(CarUtilities)]) { @end -// Ver si el problema es que Sister depende de Brother, +// Ver si el problema es que Sister depende de Brother, // y Brother dependa de Sister. #import "Sister.h" @protocol Sister; // Estas líneas detienen la recursión, resolviendo el problema. @protocol Brother - + - (void)beNiceToSister:(id )sister; @end @@ -43247,21 +43247,21 @@ if ([myClass conformsToProtocol:@protocol(CarUtilities)]) { /////////////////////////////////////// // Bloques /////////////////////////////////////// -// Los bloques son declaraciones de código, tal como una función, pueden +// Los bloques son declaraciones de código, tal como una función, pueden // ser utilizados como data. -// A continuación un bloque simple con un argumento entero que devuelve +// A continuación un bloque simple con un argumento entero que devuelve // un el argumento más 4. int (^addUp)(int n); // Declarar una variable para almacenar el bloque. -void (^noParameterBlockVar)(void); // Ejemplo de una declaración de variable +void (^noParameterBlockVar)(void); // Ejemplo de una declaración de variable // de bloque sin argumentos. -// Los bloques tienen acceso a variables del mismo ámbito. Pero las variables -// son solo readonly y el valor pasado al bloque es el valor de la variable +// Los bloques tienen acceso a variables del mismo ámbito. Pero las variables +// son solo readonly y el valor pasado al bloque es el valor de la variable // cuando el bloque es creado. int outsideVar = 17; // Si modificamos outsideVar después de declarar addUp, // outsideVar AÚN es 17. -__block long mutableVar = 3; // __block hace que las variables se puedan +__block long mutableVar = 3; // __block hace que las variables se puedan // escribir en bloques. -addUp = ^(int n) { // Remueve (int n) para tener un bloque que no recibe +addUp = ^(int n) { // Remueve (int n) para tener un bloque que no recibe // ningún parámetro NSLog(@"You may have as many lines in a block as you would like."); NSSet *blockSet; // También puedes declarar variables locales. @@ -43269,10 +43269,10 @@ addUp = ^(int n) { // Remueve (int n) para tener un bloque que no recibe return n + outsideVar; // Declaraciones de retorno son opcionales. } int addUp = add(10 + 16); // Llama al bloque de código con argumentos. -// Los bloques son usualmente utilizados como argumentos a funciones que +// Los bloques son usualmente utilizados como argumentos a funciones que // son llamados más adelante o para callbacks. -@implementation BlockExample : NSObject - +@implementation BlockExample : NSObject + - (void)runBlock:(void (^)(NSString))block { NSLog(@"Block argument returns nothing and takes in a NSString object."); block(@"Argument given to block to execute."); // Calling block. @@ -43284,71 +43284,71 @@ int addUp = add(10 + 16); // Llama al bloque de código con argumentos. /////////////////////////////////////// // Manejo de memoria /////////////////////////////////////// -/* -Para cada objeto utilizado en una aplicación, la memoria debe de ser alocada -para ese objeto. Cuando la aplicación termina de utilizar ese objeto, la +/* +Para cada objeto utilizado en una aplicación, la memoria debe de ser alocada +para ese objeto. Cuando la aplicación termina de utilizar ese objeto, la memoria debe de ser desalocada para asegurar la eficiencia de la aplicación. -Objetive-C no utiliza garbage collection, y en lugar de eso utiliza conteos -de referencias. Mientras haya al menos una referencia del objeto (también -conocido como tener un objeto de adueñado), entonces el objeto estará +Objetive-C no utiliza garbage collection, y en lugar de eso utiliza conteos +de referencias. Mientras haya al menos una referencia del objeto (también +conocido como tener un objeto de adueñado), entonces el objeto estará disponible para su uso. Cuando una instancia es dueña un objeto, su contador de referencia incrementa -por uno. Cuando el objeto es liberado, el contador de referencia decrementa uno. +por uno. Cuando el objeto es liberado, el contador de referencia decrementa uno. Cuando el conteo de referencia es cero, el objeto es removido de la memoria. Con todas las interacciones de los objetos, sigue el patrón de: (1) Crear e lobjeto, (2) utiliza el objeto, (3) libera el objeto de la memoria. */ -MyClass *classVar = [MyClass alloc]; // 'alloc' asigna uno al conteo de - // referencias de classVar. Devuelve un +MyClass *classVar = [MyClass alloc]; // 'alloc' asigna uno al conteo de + // referencias de classVar. Devuelve un // puntero al objeto [classVar release]; // Decrementa el conteo de referencias de classVar's // 'retain' -// 'retain' adueña la instancia de objeto existente e incrementa el conteo de +// 'retain' adueña la instancia de objeto existente e incrementa el conteo de // referencia por uno. Devuelve un puntero al objeto. -MyClass *newVar = [classVar retain]; // Si classVar es liberado, el objeto +MyClass *newVar = [classVar retain]; // Si classVar es liberado, el objeto // aún se queda en memoria porque newVar // es el dueño. -[classVar autorelease]; // Remueve el adueñamiento de un objeto al final del +[classVar autorelease]; // Remueve el adueñamiento de un objeto al final del // bloque @autoreleasepool. Devuelve un puntero al objeto. -// @property puede utilizar 'retain' y 'assign' también para pequeñas +// @property puede utilizar 'retain' y 'assign' también para pequeñas // definiciones convenientes -@property (retain) MyClass *instance; // Libera el valor viejo y retiene +@property (retain) MyClass *instance; // Libera el valor viejo y retiene // uno nuevo (referencia fuerte) -@property (assign) NSSet *set; // Apunta a un nuevo valor sin retener/liberar +@property (assign) NSSet *set; // Apunta a un nuevo valor sin retener/liberar // una referencia vieja (débil) // Conteo Automático de Referencias (ARC) -// Debido a que el manejo de memoria puede ser un dolor, en Xcode 4.2 y iOS 4 +// Debido a que el manejo de memoria puede ser un dolor, en Xcode 4.2 y iOS 4 // se introdujo el Conteo Automático de Referencias (ARC). // ARC es una funcionalidad del compilador que agrega retain, release y // autorealase automáticamente, así que al // utilizar ARC, no se debe de utilizar retain, release o autorelease. -MyClass *arcMyClass = [[MyClass alloc] init]; +MyClass *arcMyClass = [[MyClass alloc] init]; // ... código utilizando arcMyClass -// Sin ARC, necesitarás llamar: [arcMyClass release] luego de terminar de -// utilizar arcMyClass. Pero con ARC, no hay necesidad. Insertará +// Sin ARC, necesitarás llamar: [arcMyClass release] luego de terminar de +// utilizar arcMyClass. Pero con ARC, no hay necesidad. Insertará // automáticamente la declaración de liberación. -// Mientras que para los atributos de @property 'assign' y 'retain', con ARC +// Mientras que para los atributos de @property 'assign' y 'retain', con ARC // utilizarás 'weak' y 'strong' -@property (weak) MyClass *weakVar; // 'weak' no adueña el objeto. El conteo de +@property (weak) MyClass *weakVar; // 'weak' no adueña el objeto. El conteo de // referencias de la instancia original -// es fijado a ceor, weakVar automáticamente recibe el valor de nil para +// es fijado a ceor, weakVar automáticamente recibe el valor de nil para // evitar cualquier 'crashing'. -@property (strong) MyClass *strongVar; // 'strong' se adueña del objeto. +@property (strong) MyClass *strongVar; // 'strong' se adueña del objeto. // Asegura que el objeto se quede en memoria. // Para variables regulares (no variables de @property), utiliza lo siguiente: -__strong NSString *strongString; // Por defecto. La variables de retenida en +__strong NSString *strongString; // Por defecto. La variables de retenida en // memoria hasta que se salga del ámbito. -__weak NSSet *weakSet; // Referencia débil a un objeto existente. Cuando el +__weak NSSet *weakSet; // Referencia débil a un objeto existente. Cuando el // objeto existente es liberado, weakSet le es asginado // un valor nil -__unsafe_unretained NSArray *unsafeArray; // Como __weak, pero unsafeArray no +__unsafe_unretained NSArray *unsafeArray; // Como __weak, pero unsafeArray no // es asginado a nil cuando el objeto // existente es liberado. @@ -43393,7 +43393,7 @@ Perl 5 corre en más de 100 plataformas, desde portátiles hasta ordenadores cen my $animal = "camello"; my $respuesta = 42; -# Los valores escalares pueden ser cadenas de caracteres, números enteros o +# Los valores escalares pueden ser cadenas de caracteres, números enteros o # de punto flotante; Perl automáticamente los convertirá como sea requerido ## Arreglos @@ -43414,7 +43414,7 @@ my %color_fruta = ( # Los escalares, arreglos y hashes están más documentados en perldata (perldoc perldata) -# Los tipos de datos más complejos se pueden construir utilizando +# Los tipos de datos más complejos se pueden construir utilizando # referencias, las cuales le permiten construir listas y hashes dentro # de listas y hashes @@ -43423,7 +43423,7 @@ my %color_fruta = ( # Perl tiene la mayoría de las estructuras condicionales y de ciclos más comunes if ( $var ) { ...; -} elsif ( $var eq 'bar' ) { +} elsif ( $var eq 'bar' ) { ...; } else { ...; @@ -43460,7 +43460,7 @@ foreach (@array) { #### Expresiones regulares -# El soporte de expresiones regulares en Perl es muy amplio y profundo, y +# El soporte de expresiones regulares en Perl es muy amplio y profundo, y # está sujeto a una extensa documentación en perlrequick, perlretut, entre otros. # Sin embargo, resumiendo: @@ -43475,7 +43475,7 @@ $a =~ s/foo/bar/g; # remplaza TODAS LAS INSTANCIAS de "foo" con "bar" en #### Archivos y E/S -# Puede abrir un archivo para obtener datos o escribirlos utilizando la +# Puede abrir un archivo para obtener datos o escribirlos utilizando la # función "open()" open(my $entrada, "<" "entrada.txt") or die "No es posible abrir entrada.txt: $!"; @@ -43484,7 +43484,7 @@ open(my $log, ">>", "mi.log") or die "No es posible abrir mi.log: $!"; # Es posible leer desde un gestor de archivo abierto utilizando el operador "<>". # En contexto escalar, leer una sola línea desde el gestor de archivo, y -# en contexto de lista, leer el archivo completo en donde asigna +# en contexto de lista, leer el archivo completo en donde asigna # cada línea a un elemento de la lista my $linea = <$entrada>; @@ -43569,13 +43569,13 @@ Composer almacena sus dependencias del proyecto en `composer.json`. Usted puede ```sh # Crear un nuevo proyecto en la carpeta actual composer init -# Este corre un cuestionario interactivo que le pide detalles sobre su proyecto. +# Este corre un cuestionario interactivo que le pide detalles sobre su proyecto. # Dejándolos en blanco está bien a menos que usted está haciendo otros proyectos que dependen de éste. # Si un archivo 'composer.json' ya existe, descargar las dependencias composer install -# Para descargar solo las dependencias de producción, es decir, excluyendo las +# Para descargar solo las dependencias de producción, es decir, excluyendo las # dependencias de desarrollo composer install --no-dev @@ -43585,20 +43585,20 @@ composer require guzzlehttp/guzzle # y finalmente añade la nueva dependencia al campo requerido en 'composer.json'. composer require guzzlehttp/guzzle:6.0.* -# Composer descargará la versión más reciente que coincida con el patrón +# Composer descargará la versión más reciente que coincida con el patrón # (ej 6.0.2) y añade la dependencia al campo requerido en 'composer.json'. composer require --dev phpunit/phpunit:~4.5.0 -# Se requerirá como una dependencia de desarrollo. Se usará la última +# Se requerirá como una dependencia de desarrollo. Se usará la última # versión >= 4.5.0 y < 4.6.0 composer require-dev phpunit/phpunit:^4.5.0 # Se requerirá como una dependencia de desarrollo. Se usará la última versión >= 4.5.0 y < 5.0 -# Para obtener más información sobre las coincidencias de versiones de Composer, +# Para obtener más información sobre las coincidencias de versiones de Composer, ver [La Documentación de Composer\'s Sobre Versiones (EN)](https://getcomposer.org/doc/articles/versions.md) -# Para ver qué opciones están disponibles para instalar y los paquetes instalados actualmente +# Para ver qué opciones están disponibles para instalar y los paquetes instalados actualmente composer show # Para ver qué paquetes están instalados actualmente @@ -44465,7 +44465,7 @@ Pero soy una ClaseHija /********************** * Manejo de errores -* +* */ // Una simple gestión de errores puede ser realizada con un bloque try catch @@ -44541,7 +44541,7 @@ Get-ExecutionPolicy -List Set-ExecutionPolicy AllSigned # Otras opciones de políticas de ejecución son: # - Restricted: Los scripts no correrán. -# - RemoteSigned: Los scripts que se hayan descargado sólo correrán si han sido firmados por un editor de confianza. +# - RemoteSigned: Los scripts que se hayan descargado sólo correrán si han sido firmados por un editor de confianza. # - AllSigned: Los scripts requieren ser firmados por un editor de confianza. # - Unrestricted: Ejecuta cualquier script. help about_Execution_Policies # para obtener más ayuda sobre políticas de ejecución. @@ -44583,15 +44583,15 @@ echo 'Esta es la primer línea'; echo 'Esta es la segunda' # La declaración de una variable se ve así: $unaCadena ="Algún texto" # O así: -$unNumero = 5 -as [double] +$unNumero = 5 -as [double] $unaLista = 1,2,3,4,5 -$unaCadena = $unaLista -join '--' # también existe el parámetro -split +$unaCadena = $unaLista -join '--' # también existe el parámetro -split $unaTablaHash = @{nom1='val1'; nom2='val2'} # Uso de variables: echo $unaCadena echo "Interpolación: $unaCadena" -echo "`$unaCadena tiene longitud de $($unaCadena.Length)" +echo "`$unaCadena tiene longitud de $($unaCadena.Length)" echo '$unaCadena' echo @" Esta es una Here-String @@ -44680,7 +44680,7 @@ Get-PSProvider # Los Cmdlets tienen parámetros que controlan su ejecución: Get-ChildItem -Filter *.txt -Name # Se obtiene sólo el nombre de todos los archivos txt # Sólo se necesita escribir caracteres de un parámetro hasta que deja de ser ambiguo -ls -fi *.txt -n # -f no se puede porque también existe -Force +ls -fi *.txt -n # -f no se puede porque también existe -Force # Use `Get-Help Get-ChildItem -Full` para un tratado más completo # Los results del cmdlet anterior se le pueden pasar como entrada al siguiente. @@ -44751,7 +44751,7 @@ function Crear-SitioWeb() { ### Todo es .NET -# Una cadena PS es, de hecho, una cadena tipo System.String de .NET +# Una cadena PS es, de hecho, una cadena tipo System.String de .NET # Todos los métodos y propiedades de .NET están disponibles 'cadena'.ToUpper().Replace('E', 'eee') # O más powershellezco @@ -44772,7 +44772,7 @@ $writer.Write([Environment]::NewLine) $writer.Dispose() ### Entrada/Salida -# Leyendo una variable +# Leyendo una variable $Nombre = Read-Host "¿Cómo se llama?" echo "¡Hola $Nombre!" [int]$Edad = Read-Host "¿Cuál es su edad?" @@ -44785,7 +44785,7 @@ Get-Command ConvertTo-*,ConvertFrom-* ### Material útil # Actualizar la ruta de ejecuciones (PATH) -$env:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + +$env:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") # Encontrar Python en el path @@ -44819,7 +44819,7 @@ Configurando el shell ``` # $Profile es la ruta completa para su `Microsoft.PowerShell_profile.ps1` -# Todo el código alojado allí será ejecutado cuando se ejecuta una nueva sesión de PS +# Todo el código alojado allí será ejecutado cuando se ejecuta una nueva sesión de PS if (-not (Test-Path $Profile)) { New-Item -Type file -Path $Profile -Force notepad $Profile @@ -44839,10 +44839,10 @@ Proyectos interesantes (EN) * [Jump-Location](https://github.com/tkellogg/Jump-Location) Powershell `cd` que lee su mente -Material no cubierto en esta guía +Material no cubierto en esta guía -* WMI: Windows Management Intrumentation (Get-CimInstance) -* Multitarea: Start-Job -scriptBlock {...}, +* WMI: Windows Management Intrumentation (Get-CimInstance) +* Multitarea: Start-Job -scriptBlock {...}, * Firmas de código * Remoting (Enter-PSSession/Exit-PSSession; Invoke-Command) --- @@ -45349,7 +45349,7 @@ def duplicar_numeros(iterable): # Un generador crea valores sobre la marcha # En vez de generar y devolver todos los valores de una vez, crea un valor -# en cada iteración. En este ejemplo los valores mayores que 15 no serán +# en cada iteración. En este ejemplo los valores mayores que 15 no serán # procesados en duplicar_numeros. # Nota: xrange es un generador que hace lo mismo que range. # Crear una lista de 1 a 900000000 lleva mucho tiempo y ocupa mucho espacio. @@ -46131,26 +46131,26 @@ hre = pd.read_csv(fp) hre.head() """ - Ix Dynasty Name Birth Death Election 1 -0 NaN Carolingian Charles I 2 April 742 28 January 814 NaN -1 NaN Carolingian Louis I 778 20 June 840 NaN -2 NaN Carolingian Lothair I 795 29 September 855 NaN -3 NaN Carolingian Louis II 825 12 August 875 NaN -4 NaN Carolingian Charles II 13 June 823 6 October 877 NaN - - Election 2 Coronation 1 Coronation 2 Ceased to be Emperor -0 NaN 25 December 800 NaN 28 January 814 -1 NaN 11 September 813 5 October 816 20 June 840 -2 NaN 5 April 823 NaN 29 September 855 -3 NaN Easter 850 18 May 872 12 August 875 -4 NaN 29 December 875 NaN 6 October 877 - - Descent from whom 1 Descent how 1 Descent from whom 2 Descent how 2 -0 NaN NaN NaN NaN -1 Charles I son NaN NaN -2 Louis I son NaN NaN -3 Lothair I son NaN NaN -4 Louis I son NaN NaN + Ix Dynasty Name Birth Death Election 1 +0 NaN Carolingian Charles I 2 April 742 28 January 814 NaN +1 NaN Carolingian Louis I 778 20 June 840 NaN +2 NaN Carolingian Lothair I 795 29 September 855 NaN +3 NaN Carolingian Louis II 825 12 August 875 NaN +4 NaN Carolingian Charles II 13 June 823 6 October 877 NaN + + Election 2 Coronation 1 Coronation 2 Ceased to be Emperor +0 NaN 25 December 800 NaN 28 January 814 +1 NaN 11 September 813 5 October 816 20 June 840 +2 NaN 5 April 823 NaN 29 September 855 +3 NaN Easter 850 18 May 872 12 August 875 +4 NaN 29 December 875 NaN 6 October 877 + + Descent from whom 1 Descent how 1 Descent from whom 2 Descent how 2 +0 NaN NaN NaN NaN +1 Charles I son NaN NaN +2 Louis I son NaN NaN +3 Lothair I son NaN NaN +4 Louis I son NaN NaN """ # limpiar las columnas de Nacimiento y Muerte @@ -46222,7 +46222,7 @@ contributors: - ["isomorphismes", "http://twitter.com/isomorphisms"] translators: - ["David Hsieh", "http://github.com/deivuh"] -lang: es-es +lang: es-es filename: learnr-es.r --- @@ -46236,7 +46236,7 @@ LaTeX. # Los comentariso inician con símbolos numéricos. # No puedes hacer comentarios de múltiples líneas -# pero puedes agrupar múltiples comentarios de esta manera. +# pero puedes agrupar múltiples comentarios de esta manera. # En Windows puedes utilizar CTRL-ENTER para ejecutar una línea. # En Mac utilizas COMMAND-ENTER @@ -46247,7 +46247,7 @@ LaTeX. ############################################################################# # En esta sección, mostramos algunas cosas chileras / cool que puedes hacer en -# R sin entender nada de programación. No te preocupes en entender nada +# R sin entender nada de programación. No te preocupes en entender nada # de lo que hace este código. Solo disfruta! data() # Examinar sets de datos pre-cargados @@ -46265,7 +46265,7 @@ summary(rivers) # ¿Cuáles son algunas estadísticas generales? # Generar una gráfica tallo-y-hoja (Visualización de datos tipo histograma) stem(rivers) -# El punto decimal son 2 dígitos a la derecha de | +# El punto decimal son 2 dígitos a la derecha de | # # 0 | 4 # 2 | 011223334555566667778888899900001111223333344455555666688888999 @@ -46357,7 +46357,7 @@ summary(discoveries) # Tirar los dados varias veces round(runif(7, min=.5, max=6.5)) # 1 4 6 1 4 6 4 -# Tus números será diferente de los míos, a menos que tengamos el mismo valor +# Tus números será diferente de los míos, a menos que tengamos el mismo valor # de random.seed(31337) # Dibuja de un Gaussian 9 veces @@ -46398,7 +46398,7 @@ c(3,3,3,2,2,1) # 3 3 3 2 2 1 # También puedes utilizar el notación científica 5e4 # 50000 6.02e23 # Número de Avogadro -1.6e-35 # Logintud Planck +1.6e-35 # Logintud Planck # También puedes tener números infinitamente grandes o pequeños class(Inf) # "numeric" class(-Inf) # "numeric" @@ -46434,7 +46434,7 @@ length(c("Call","me","Ishmael")) # 3 # Puedes hacer operaciones regex en vectores de caracteres: substr("Fortuna multis dat nimis, nulli satis.", 9, 15) # "multis " gsub('u', 'ø', "Fortuna multis dat nimis, nulli satis.") # "Fortøna møltis dat nimis, nølli satis." -# R tiene varios vectores predefinidos de caracteres +# R tiene varios vectores predefinidos de caracteres letters # => # [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" @@ -46465,7 +46465,7 @@ c('Z', 'o', 'r', 'r', 'o') == "Z" # TRUE FALSE FALSE FALSE FALSE # FACTORES # La clase factor es para datos de categoría -# Los factores pueden ser ordenados (como las calificaciones de los niños) +# Los factores pueden ser ordenados (como las calificaciones de los niños) # o sin orden (como el género) factor(c("female", "female", "male", NA, "female")) # female female male female @@ -46478,7 +46478,7 @@ levels(factor(c("male", "male", "female", NA, "female"))) # "female" "male" length(factor("male")) # 1 length(levels(factor("male"))) # 1 -# Los factores son comúnmente vistos en marcos de dato, y una estructura de +# Los factores son comúnmente vistos en marcos de dato, y una estructura de # datos que cubriremos después data(infert) # "Infertility after Spontaneous and Induced Abortion" levels(infert$education) # "0-5yrs" "6-11yrs" "12+ yrs" @@ -46617,7 +46617,7 @@ mat # [1,] 1 4 # [2,] 2 5 # [3,] 3 6 -# A diferencia de un vector, una clase matriz es una 'matriz', +# A diferencia de un vector, una clase matriz es una 'matriz', # sin importar qué contiene class(mat) # => "matrix" # Consulta la primera fila @@ -46692,7 +46692,7 @@ class(students[,3]) # "factor" nrow(students) # 6 ncol(students) # 3 dim(students) # 6 3 -# La función data.frame() convierte vectores de caracteres en vectores +# La función data.frame() convierte vectores de caracteres en vectores # de factores por defecto; deshabilita este atributo # stringsAsFactors = FALSE cuando vayas a crear el data.frame ?data.frame @@ -46703,7 +46703,7 @@ students[,2] # 3 2 2 1 0 -1 students[,"year"] # 3 2 2 1 0 -1 # Una versión aumentada de la estructura data.frame es el data.table -# Si estás trabajando huge o panel data, o necesitas unificar algunos +# Si estás trabajando huge o panel data, o necesitas unificar algunos # subconjuntos de datos, data.table puede ser una buena elección. # Aquí un tour: install.packages("data.table") # Descarga el paquete de CRAN @@ -46761,7 +46761,7 @@ students[,sum(year),by=house] # 3: R 1 # 4: S 0 -# Para eliminar una columna de un data.frame o data.table, +# Para eliminar una columna de un data.frame o data.table, # asignarle el valor NULL. students$houseFounderName <- NULL students @@ -46838,7 +46838,7 @@ list1$price[4] # Las listas no son la estructura de datos más eficiente para trabajar en R; # a menos de que tengas una buena razón, deberías de quedarte con data.frames -# Las listas son usualmente devueltas por funciones que realizan regresiones +# Las listas son usualmente devueltas por funciones que realizan regresiones # lineales ################################################## @@ -46921,7 +46921,7 @@ pp + geom_histogram() ll <- as.data.table(list1) pp <- ggplot(ll, aes(x=time,price)) pp + geom_point() -# ggplot2 tiene una excelente documentación +# ggplot2 tiene una excelente documentación # (disponible en http://docs.ggplot2.org/current/) @@ -46980,7 +46980,7 @@ Racket es un lenguaje de propósito general, multiparadigma que hace parte de la 1+2i ; numeros complejos ;; La aplicación de funciones es escrita de la siguiente forma: (f x y z ...) -;; donde f es una función y “x, y, z” son sus operandos +;; donde f es una función y “x, y, z” son sus operandos ;; Si quieres crear una lista de literales debes agregar ' al inicio ;; para que no sean evaluados '(+ 1 2) ; => (+ 1 2) @@ -47217,7 +47217,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- no 'd' (= 3 3.0) ; => #t (= 2 1) ; => #f -;; 'eq?' retorna #t si 2 argumentos refieren al mismo objeto en memoria +;; 'eq?' retorna #t si 2 argumentos refieren al mismo objeto en memoria ;; #f de lo contrario. ;; En otras palabras, es una simple comparación de punteros. (eq? '() '()) ; => #t, Debido a que existe solo una lista vacia en memoria @@ -47252,7 +47252,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- no 'd' (eqv? (string-append "foo" "bar") (string-append "foo" "bar")) ; => #f ;; 'equal?' permite comparar los siguientes tipos de datos: -;; strings, byte strings, pairs, mutable pairs, vectors, boxes, +;; strings, byte strings, pairs, mutable pairs, vectors, boxes, ;; hash tables, and inspectable estructuras. ;; para otros tipos de datos, 'equal?' y 'eqv?' devuelven el mismo resultado. (equal? 3 3.0) ; => #f @@ -47449,7 +47449,7 @@ vec ; => #(1 2 3 4) (show " | ~a | " n #\space) (show "---~a---" n #\-)) - (define (show fmt n ch) ; función interna + (define (show fmt n ch) ; función interna (printf fmt (make-string n ch)) (newline))) @@ -49423,7 +49423,7 @@ language: swift contributors: - ["Grant Timmerman", "http://github.com/grant"] - ["Christopher Bess", "http://github.com/cbess"] - - ["Joey Huang", "http://github.com/kamidox"] + - ["Joey Huang", "http://github.com/kamidox"] - ["Anthony Nguyen", "http://github.com/anthonyn60"] translators: - ["David Hsieh", "http://github.com/deivuh"] @@ -49544,7 +49544,7 @@ anyObjectVar = "Cambiado a un valor string, no es buena práctica, pero posible. /* Tipos Array (arreglo) y Dictionary (diccionario) son structs (estructuras). Así que `let` y `var` también indican si son mudables (var) o - inmutables (let) durante la declaración de sus tipos. + inmutables (let) durante la declaración de sus tipos. */ // Array (arreglo) @@ -49781,7 +49781,7 @@ internal class Rect: Shape { // Si no necesitas un getter y setter personalizado // pero aún quieres ejecutar código antes y después de hacer get o set - // a una propiedad, puedes utilizar `willSet` y `didSet` + // a una propiedad, puedes utilizar `willSet` y `didSet` var identifier: String = "defaultID" { // El argumento `willSet` será el nombre de variable para el nuevo valor willSet(someIdentifier) { @@ -49835,7 +49835,7 @@ class Circle: Shape { } // Un signo de interrogación como sufijo después de `init` es un init opcional - // que puede devolver nil + // que puede devolver nil init?(radius: Int) { self.radius = radius super.init() @@ -49941,7 +49941,7 @@ class MyShape: Rect { // Pon un signo de interrogación después de la propiedad opcional, // método, o subscript para ignorar un valor nil y devolver nil // en lugar de tirar un error de tiempo de ejecución - // ("optional chaining") + // ("optional chaining") if let allow = self.delegate?.canReshape?() { // test for delegate then for method self.delegate?.reshaped?() @@ -50026,9 +50026,9 @@ filename: learntcl-es.tcl Tcl fue creado por [John Ousterhout](https://wiki.tcl.tk/John%20Ousterout) como un lenguaje reutilizable de scripting para herramientas de diseño de circuitos -de las que él era autor. En 1997 recibió el -[ACM Software System Award](https://en.wikipedia.org/wiki/ACM_Software_System_Award) -por Tcl. Tcl puede ser utilizado tanto como lenguaje de scripting embebido, +de las que él era autor. En 1997 recibió el +[ACM Software System Award](https://en.wikipedia.org/wiki/ACM_Software_System_Award) +por Tcl. Tcl puede ser utilizado tanto como lenguaje de scripting embebido, como lenguaje de programación general. Puede ser utilizado también como una biblioteca portable de C, incluso en casos donde no se requieren capacidades de scripting, ya que provee de estructuras de datos tales como cadenas (*string*) @@ -50087,7 +50087,7 @@ incluso más simple que la de lisp, simplemente se quita de en medio. # Las llaves son un mecanismo de entrecomillado, no de sintaxis para la construcción # de bloques de código o listas. Tcl no tiene ninguna de ellas. Las llaves se -# usan para escapar caracteres especiales, lo que las hace apropiadas para +# usan para escapar caracteres especiales, lo que las hace apropiadas para # entrecomillar cuerpos de procedimientos y cadenas que deberían ser interpretadas # como listas. @@ -50134,7 +50134,7 @@ set action pu # los siguientes tres comandos son equivalentes: puts $greeting -${action}ts $greeting +${action}ts $greeting [set action]ts $greeting @@ -50469,7 +50469,7 @@ try { set replacement {Archibald Sorbisol} set command {set name $replacement} -set command [subst $command] +set command [subst $command] try { eval $command ;# El mismo error que antes: demasiados argumentos a "set" en \ {set name Archibald Sorbisol} @@ -50556,15 +50556,15 @@ proc countdown count { } coroutine countdown1 countdown 3 coroutine countdown2 countdown 5 -puts [countdown1] ;# -> 2 -puts [countdown2] ;# -> 4 -puts [countdown1] ;# -> 1 -puts [countdown1] ;# -> 0 +puts [countdown1] ;# -> 2 +puts [countdown2] ;# -> 4 +puts [countdown1] ;# -> 1 +puts [countdown1] ;# -> 0 catch { puts [coundown1] ;# -> invalid command name "countdown1" -} cres copts +} cres copts puts $cres -puts [countdown2] ;# -> 3 +puts [countdown2] ;# -> 3 # Pilas de corrutinas pueden cederse el control entre sí: @@ -50641,7 +50641,7 @@ y luego ser insertado nuevamente. new # Crea una nueva sesión -s "Session" # Crea sesión con nombre -n "Window" # Crea ventana con nombre - -c "/dir" # Comienza en el directorio destino + -c "/dir" # Comienza en el directorio destino attach # Adjunta sesión última/disponible -t "#" # Adjunta sesión destino @@ -51296,7 +51296,7 @@ filename: LearnVim-es.txt [Vim](http://www.vim.org) (Vi IMproved) es un clón del popular editor vi para UNIX. Es un editor de texto diseñado para ser veloz e incrementar la productividad, es ubicuo en la mayoría -de los sistemas basados en UNIX. Cuenta con numerosas combinaciones de teclas +de los sistemas basados en UNIX. Cuenta con numerosas combinaciones de teclas para la navegación rápida a puntos especificos en un archivo y para rápida edición. @@ -51320,7 +51320,7 @@ para la navegación rápida a puntos especificos en un archivo y para rápida ed k # Desplazarse una línea hacía arriba l # Desplazarse un carácter hacía la derecha - # Desplazarse dentro de la línea + # Desplazarse dentro de la línea 0 # Desplazarse hacia el inicio de la línea $ # Desplazarse al final de la línea @@ -51344,7 +51344,7 @@ para la navegación rápida a puntos especificos en un archivo y para rápida ed # Por ejemplo, f< # Salta adelante y aterriza en < t< # Salta adelante y aterriza justo antes de < - + # Desplazarse por palabras w # Desplazarse hacia adelante por una palabra @@ -51366,9 +51366,9 @@ para la navegación rápida a puntos especificos en un archivo y para rápida ed Vim se basa en el concepto de **modos**. -Modo Comando - Vim se pone en marcha en éste modo, se usa para navegar y escribir comandos -Modo Inserción - Utilizado para realizar cambios en el archivo -Modo Visual - Utilizado para resaltar texto y operar en ellos +Modo Comando - Vim se pone en marcha en éste modo, se usa para navegar y escribir comandos +Modo Inserción - Utilizado para realizar cambios en el archivo +Modo Visual - Utilizado para resaltar texto y operar en ellos Modo Ex - Utilizado para ir hacia la parte inferior con ':' para introducir comandos @@ -51395,15 +51395,15 @@ Modo Ex - Utilizado para ir hacia la parte inferior con ':' para introdu Vim puede ser pensado como un conjunto de comandos en un formato "verbo-sustantivo-modificador ', donde: -Verbo - La acción a realizar -Modificador - Como vas hacer la acción +Verbo - La acción a realizar +Modificador - Como vas hacer la acción Sustantivo - el objeto al que se le va a aplicar la acción Algunos ejemplos importantes de "Verbos", "Modificadores" y "Sustantivos": ``` # 'Verbos' - + d # Eliminar c # Cambiar y # Copiar @@ -51425,7 +51425,7 @@ Algunos ejemplos importantes de "Verbos", "Modificadores" y "Sustantivos": s # Oración p # Párrafo b # Bloque - + # "Frases" de ejemplo o comandos d2w # Elimina 2 palabras @@ -51469,7 +51469,7 @@ Aquí está un ejemplo de un archivo ~ / .vimrc: ``` " Ejemplo ~/.vimrc -" 2015.10 +" 2015.10 " Se requiere para que vim sea 'mejor' set nocompatible @@ -51546,7 +51546,7 @@ Module Module1 ' Dicho sistema se explicará a medida que avancemos en este ' tutorial; gradualmente entenderás lo que significa todo. Console.Title = ("Aprende X en Y minutos") - Console.WriteLine("NAVEGACIÓN") 'Mostrar + Console.WriteLine("NAVEGACIÓN") 'Mostrar Console.WriteLine("") Console.ForegroundColor = ConsoleColor.Green Console.WriteLine("1. Salida «Hola, mundo»") @@ -51568,7 +51568,7 @@ Module Module1 Case "2" 'Entrada «hola, mundo» Console.Clear() EntradaHolaMundo() - Case "3" 'Calcular números enteros + Case "3" 'Calcular números enteros Console.Clear() CalcularNumerosEnteros() Case "4" 'Calcular números decimales @@ -51603,7 +51603,7 @@ Module Module1 'Uno - He usado números para guiarme por el sistema de navegación anterior 'cuando regrese posteriormente a implementarlo. - 'Usamos subrutinas privadas para separar distintas secciones del programa. + 'Usamos subrutinas privadas para separar distintas secciones del programa. Private Sub SalidaHolaMundo() 'Título de la aplicación de consola Console.Title = "Salida «Hola, mundo» | Aprende X en Y minutos" @@ -51738,7 +51738,7 @@ Module Module1 Console.Title = "Uso de bucles «For» | Aprende X en Y minutos" 'Declarar Variable y desde qué número debe contar en Step -1, 'Step -2, Step -3, etc. - For i As Integer = 10 To 0 Step -1 + For i As Integer = 10 To 0 Step -1 Console.WriteLine(i.ToString) 'Muestra el valor del contador Next i 'Calcular el valor nuevo Console.WriteLine("Iniciar") '¡¡Comencemos el programa, nene!! @@ -51807,7 +51807,7 @@ Aprendí Visual Basic en la aplicación de consola. Esta me permitió entender l He creado un tutorial de Visual Basic más exhaustivo para quienes quieran saber más. -Toda la sintaxis es válida. Copia el código y pégalo en el compilador de Visual Basic y ejecuta (F5) el programa. +Toda la sintaxis es válida. Copia el código y pégalo en el compilador de Visual Basic y ejecuta (F5) el programa. --- language: whip contributors: @@ -51916,7 +51916,7 @@ undefined; usado para indicar un valor que aún no está definido. ; Las variables que aún no son asignadas tendrán el valor `undefined`. (def mi_variable 5) ; `def` asignará la variable al contexto global. -; `let` asignará la variable al contexto local, +; `let` asignará la variable al contexto local, ; y tiene una sintaxis distinta. (let ((mi_variable 5)) (+ mi_variable 5)) ; => 10 (+ mi_variable 5) ; = undefined + 5 => undefined @@ -52244,12 +52244,12 @@ sólo la guarda. @@ -52261,8 +52261,8 @@ sólo la guarda. 2 - Elementos -> Ese es el dato puro. Eso es lo que el parseador recuperará del archivo XML. Los elementos aparecen entre las tags que abren y cierran.--> - - + + computer.gif @@ -52276,13 +52276,13 @@ Aún esto, es posible inyectar más restricciones en el documento, usando definiciones de documento, así como DTD o XML Schemas. Un documento XML que sigue a una definición de documento (un esquema) es -válida. +válida. Con esta herramienta puedes validar datos XML fuera de la aplicación ```xml - @@ -52308,11 +52308,11 @@ Con esta herramienta puedes validar datos XML fuera de la aplicación @@ -52994,7 +52994,7 @@ import java.security.*; // as the file. public class LearnJava { - // In order to run a java program, it must have a main method as an entry + // In order to run a java program, it must have a main method as an entry // point. public static void main (String[] args) { @@ -53055,7 +53055,7 @@ public class LearnJava { */ // Declare a variable using int fooInt; - // Declare multiple variables of the same + // Declare multiple variables of the same // type , , int fooInt1, fooInt2, fooInt3; @@ -53065,7 +53065,7 @@ public class LearnJava { // Initialize a variable using = int barInt = 1; - // Initialize multiple variables of same type with same + // Initialize multiple variables of same type with same // value , , = int barInt1, barInt2, barInt3; barInt1 = barInt2 = barInt3 = 1; @@ -53076,7 +53076,7 @@ public class LearnJava { // Byte - 8-bit signed two's complement integer // (-128 <= byte <= 127) byte fooByte = 100; - + // If you would like to interpret a byte as an unsigned integer // then this simple operation can help int unsignedIntLessThan256 = 0xff & fooByte; @@ -53130,12 +53130,12 @@ public class LearnJava { // integers longer than 64-bits. Integers are stored as an array of // of bytes and are manipulated using functions built into BigInteger // - // BigInteger can be initialized using an array of bytes or a string. + // BigInteger can be initialized using an array of bytes or a string. BigInteger fooBigInteger = new BigInteger(fooByteArray); // BigDecimal - Immutable, arbitrary-precision signed decimal number // - // A BigDecimal takes two parts: an arbitrary precision integer + // A BigDecimal takes two parts: an arbitrary precision integer // unscaled value and a 32-bit integer scale // // BigDecimal allows the programmer complete control over decimal @@ -53145,7 +53145,7 @@ public class LearnJava { // BigDecimal can be initialized with an int, long, double or String // or by initializing the unscaled value (BigInteger) and scale (int). BigDecimal fooBigDecimal = new BigDecimal(fooBigInteger, fooInt); - + // Be wary of the constructor that takes a float or double as // the inaccuracy of the float/double will be copied in BigDecimal. // Prefer the String constructor when you need an exact value. @@ -53177,9 +53177,9 @@ public class LearnJava { builderConcatenated.append("You "); builderConcatenated.append("can use "); builderConcatenated.append("the StringBuilder class."); - System.out.println(builderConcatenated.toString()); // only now is the string built + System.out.println(builderConcatenated.toString()); // only now is the string built // Output: You can use the StringBuilder class. - + // StringBuilder is efficient when the fully constructed String is not required until the end of some processing. StringBuilder stringBuilder = new StringBuilder(); String inefficientString = ""; @@ -53192,12 +53192,12 @@ public class LearnJava { // inefficientString requires a lot more work to produce, as it generates a String on every loop iteration. // Simple concatenation with + is compiled to a StringBuilder and toString() // Avoid string concatenation in loops. - + // #3 - with String formatter // Another alternative way to create strings. Fast and readable. String.format("%s may prefer %s.", "Or you", "String.format()"); // Output: Or you may prefer String.format(). - + // Arrays // The array size must be decided upon instantiation // The following formats work for declaring an array @@ -53333,7 +53333,7 @@ public class LearnJava { // Iterated 10 times, fooFor 0->9 } System.out.println("fooFor Value: " + fooFor); - + // Nested For Loop Exit with Label outer: for (int i = 0; i < 10; i++) { @@ -53344,7 +53344,7 @@ public class LearnJava { } } } - + // For Each Loop // The for loop is also able to iterate over arrays as well as objects // that implement the Iterable interface. @@ -53375,7 +53375,7 @@ public class LearnJava { break; } System.out.println("Switch Case Result: " + monthString); - + // Starting in Java 7 and above, switching Strings works like this: String myAnswer = "maybe"; switch(myAnswer) { @@ -53392,21 +53392,21 @@ public class LearnJava { System.out.println("You answered " + myAnswer); break; } - - + + // Try-with-resources (Java 7+) // Try-catch-finally statements work as expected in Java but in Java 7+ // the try-with-resources statement is also available. Try-with-resources // simplifies try-catch-finally statements be closing resources // automatically. - + // In order to use a try-with-resources, include a an instance of a class // in the try statement. The class must implement java.lang.AutoCloseable. try(BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) { // You can attempt to do something that could throw an exception. System.out.println(br.readLine()); // In Java 7, the resource will always be closed, even if it throws - // an Exception. + // an Exception. } catch (Exception ex) { //The resource will be closed before the catch statement executes. System.out.println("readLine() failed."); @@ -53416,8 +53416,8 @@ public class LearnJava { // a finally statement might not be called. // To learn more: // https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html - - + + // Conditional Shorthand // You can use the '?' operator for quick assignments or logic forks. // Reads as "If (statement) is true, use , otherwise, use @@ -53512,10 +53512,10 @@ class Bicycle { String name; // default: Only accessible from within this package static String className; // Static class variable - // Static block + // Static block // Java has no implementation of static constructors, but - // has a static block that can be used to initialize class variables - // (static variables). + // has a static block that can be used to initialize class variables + // (static variables). // This block will be called when the class is loaded. static { className = "Bicycle"; @@ -53680,7 +53680,7 @@ public abstract class Animal public void printAge() { - System.out.println(age); + System.out.println(age); } // Abstract classes can have main function. @@ -53762,18 +53762,18 @@ public abstract class Mammal() // you would specify a days-of-the-week enum type as: public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, - THURSDAY, FRIDAY, SATURDAY + THURSDAY, FRIDAY, SATURDAY } // We can use our enum Day like that: public class EnumTest { // Variable Enum Day day; - + public EnumTest(Day day) { this.day = day; } - + public void tellItLikeItIs() { switch (day) { case MONDAY: @@ -53781,17 +53781,17 @@ public class EnumTest { break; case FRIDAY: System.out.println("Fridays are better."); - break; - case SATURDAY: + break; + case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); - break; + break; default: System.out.println("Midweek days are so-so."); break; } } - + public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); // => Mondays are bad. @@ -53800,7 +53800,7 @@ public class EnumTest { } } -// Enum types are much more powerful than we show above. +// Enum types are much more powerful than we show above. // The enum body can include methods and other fields. // You can see more at https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html @@ -53892,7 +53892,7 @@ lang: fa-ir doStuff(); ```

    -ولی لزومی به این کار نیست. نقطه ویرگول به صورت خودکار در نظر گرفته میشوند. +ولی لزومی به این کار نیست. نقطه ویرگول به صورت خودکار در نظر گرفته میشوند.

    وقتی که خط جدیدی شروع میشود. مگر در موارد خاص. @@ -54384,7 +54384,7 @@ if (Object.create === undefined){ // don't overwrite it if it exists

    منابع دیگر

    The [Mozilla Developer -Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript) +Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript)

    مرجعی بسیار خوب برای جاوااسکریپت به شکلی که در مرورگر ها مورد استفاده قرار گرفته است.

    از آنجایی که این منبع یک ویکی میباشد همانطور که مطالب بیشتری یاد میگیرید میتوانید به دیگران نیز در یادگیری آن کمک کنید.

    @@ -54395,7 +54395,7 @@ JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introdu [Document Object Model](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core) -[Javascript Garden](http://bonsaiden.github.io/JavaScript-Garden/) +[Javascript Garden](http://bonsaiden.github.io/JavaScript-Garden/)

    راهنمای دقیقی از قسمت های غیر ملموس زبان.

    اضافه بر این در ویرایش این مقاله، قسمت هایی از سایت زیر مورد استفاده قرار گرفته است.

    @@ -54516,7 +54516,7 @@ f [ . ] when* ! No output, empty stack, f is consumed because it's false { 2 4 6 8 } [ 1 + ] map ! Leaves { 3 5 7 9 } on stack ! Loop reducing or building lists: -{ 1 2 3 4 5 } [ 2 mod 0 = ] filter ! Keeps only list members for which quotation yields true: { 2 4 } +{ 1 2 3 4 5 } [ 2 mod 0 = ] filter ! Keeps only list members for which quotation yields true: { 2 4 } { 2 4 6 8 } 0 [ + ] reduce . ! Like "fold" in functional languages: prints 20 (0+2+4+6+8) { 2 4 6 8 } 0 [ + ] accumulate . . ! Like reduce but keeps the intermediate values in a list: prints { 0 2 6 12 } then 20 1 5 [ 2 * dup ] replicate . ! Loops the quotation 5 times and collects the results in a list: { 2 4 8 16 32 } @@ -54534,7 +54534,7 @@ f [ . ] when* ! No output, empty stack, f is consumed because it's false SYMBOL: name ! Creates name as an identifying word "Bob" name set-global ! No output -name get-global . ! "Bob" +name get-global . ! "Bob" ! Named local variables are considered an extension but are available ! In a quotation.. @@ -54611,7 +54611,7 @@ samanaikaisten komentojen suorittamisen nykyaikaisten moniytimisten prosessoreiden hyödyntämiseksi ja antaa käyttäjälle ominaisuuksia suurten projektien käsittelemiseksi. -Go tuo mukanaan loistavan oletuskirjaston sekä innokkaan yhteisön. +Go tuo mukanaan loistavan oletuskirjaston sekä innokkaan yhteisön. ```go // Yhden rivin kommentti @@ -55096,7 +55096,7 @@ Olen kolmannessa kappaleessa! -Päätän tämän kahteen välilyöntiin (maalaa minut nähdäksesi ne). +Päätän tämän kahteen välilyöntiin (maalaa minut nähdäksesi ne). There's a
    above me! @@ -56124,8 +56124,8 @@ contributors: filename: learnfortran.f95 --- -Fortran is one of the oldest computer languages. It was developed in the 1950s -by IBM for numeric calculations (Fortran is an abbreviation of "Formula +Fortran is one of the oldest computer languages. It was developed in the 1950s +by IBM for numeric calculations (Fortran is an abbreviation of "Formula Translation"). Despite its age, it is still used for high-performance computing such as weather prediction. However, the language has changed considerably over the years, although mostly maintaining backwards compatibility; well known @@ -56149,29 +56149,29 @@ program example !declare a program called example. ! Declaring Variables ! =================== - + ! All declarations must come before statements and expressions. - + implicit none !prevents dynamic declaration of variables (recommended!) ! Implicit none must be redeclared in every function/program/module... - + ! IMPORTANT - Fortran is case insensitive. real z REAL Z2 - real :: v,x ! WARNING: default initial values are compiler dependent! + real :: v,x ! WARNING: default initial values are compiler dependent! real :: a = 3, b=2E12, c = 0.01 integer :: i, j, k=1, m real, parameter :: PI = 3.1415926535897931 !declare a constant. logical :: y = .TRUE. , n = .FALSE. !boolean type. complex :: w = (0,1) !sqrt(-1) character (len=3) :: month !string of 3 characters. - + real :: array(6) !declare an array of 6 reals. real, dimension(4) :: arrayb !another way to declare an array. integer :: arrayc(-10:10) !an array with a custom index. real :: array2d(3,2) !multidimensional array. - + ! The '::' separators are not always necessary but are recommended. ! many other variable attributes also exist: @@ -56184,8 +56184,8 @@ program example !declare a program called example. ! in functions since this automatically implies the 'save' attribute ! whereby values are saved between function calls. In general, separate ! declaration and initialisation code except for constants! - - + + ! Strings ! ======= @@ -56194,7 +56194,7 @@ program example !declare a program called example. character (len = 30) :: str_b character (len = *), parameter :: a_long_str = "This is a long string." !can have automatic counting of length using (len=*) but only for constants. - + str_b = a_str // " keyboard" !concatenate strings using // operator. @@ -56217,7 +56217,7 @@ program example !declare a program called example. ! Other symbolic comparisons are < > <= >= == /= b = 4 else if (z .GT. a) then !z greater than a - ! Text equivalents to symbol operators are .LT. .GT. .LE. .GE. .EQ. .NE. + ! Text equivalents to symbol operators are .LT. .GT. .LE. .GE. .EQ. .NE. b = 6 else if (z < a) then !'then' must be on this line. b = 5 !execution block must be on a new line. @@ -56264,32 +56264,32 @@ program example !declare a program called example. cycle !jump to next loop iteration. enddo - + ! Goto statement exists but it is heavily discouraged though. - goto 10 + goto 10 stop 1 !stops code immediately (returning specified condition code). 10 j = 201 !this line is labeled as line 10 - - + + ! Arrays ! ====== array = (/1,2,3,4,5,6/) array = [1,2,3,4,5,6] !using Fortran 2003 notation. arrayb = [10.2,3e3,0.41,4e-5] array2d = reshape([1.0,2.0,3.0,4.0,5.0,6.0], [3,2]) - + ! Fortran array indexing starts from 1. ! (by default but can be defined differently for specific arrays). v = array(1) !take first element of array. v = array2d(2,2) - + print *, array(3:5) !print all elements from 3rd to 5th (inclusive). print *, array2d(1,:) !print first column of 2d array. - + array = array*3 + 2 !can apply mathematical expressions to arrays. array = array*array !array operations occur element-wise. !array = array*array2d !these arrays would not be compatible. - + ! There are many built-in functions that operate on arrays. c = dot_product(array,array) !this is the dot product. ! Use matmul() for matrix maths. @@ -56299,13 +56299,13 @@ program example !declare a program called example. c = size(array) print *, shape(array) m = count(array > 0) - + ! Loop over an array (could have used Product() function normally). v = 1 do i = 1, size(array) v = v*array(i) end do - + ! Conditionally execute element-wise assignments. array = [1,2,3,4,5,6] where (array > 3) @@ -56315,30 +56315,30 @@ program example !declare a program called example. elsewhere array = 0 end where - + ! Implied-DO loops are a compact way to create arrays. array = [ (i, i = 1,6) ] !creates an array of [1,2,3,4,5,6] array = [ (i, i = 1,12,2) ] !creates an array of [1,3,5,7,9,11] array = [ (i**2, i = 1,6) ] !creates an array of [1,4,9,16,25,36] array = [ (4,5, i = 1,3) ] !creates an array of [4,5,4,5,4,5] - + ! Input/Output ! ============ - + print *, b !print the variable 'b' to the command line ! We can format our printed output. print "(I6)", 320 !prints ' 320' - print "(I6.4)", 3 !prints ' 0003' + print "(I6.4)", 3 !prints ' 0003' print "(F6.3)", 4.32 !prints ' 4.320' - - ! The letter indicates the expected type and the number afterwards gives + + ! The letter indicates the expected type and the number afterwards gives ! the number of characters to use for printing the value. - ! Letters can be I (integer), F (real), E (engineering format), + ! Letters can be I (integer), F (real), E (engineering format), ! L (logical), A (characters) ... print "(I3)", 3200 !print '***' since the number doesn't fit. - + ! we can have multiple format specifications. print "(I5,F6.2,E6.2)", 120, 43.41, 43.41 print "(3I5)", 10, 20, 30 !3 repeats of integers (field width = 5). @@ -56349,7 +56349,7 @@ program example !declare a program called example. read "(2F6.2)", v, x !read two numbers ! To read a file. - open(unit=11, file="records.txt", status="old") + open(unit=11, file="records.txt", status="old") ! The file is referred to by a 'unit number', an integer that you pick in ! the range 9:99. Status can be one of {'old','replace','new'}. read(unit=11, fmt="(3F10.2)") a, b, c @@ -56360,39 +56360,39 @@ program example !declare a program called example. write(12, "(F10.2,F10.2,F10.2)") c, b, a close(12) - ! There are more features available than discussed here and alternative + ! There are more features available than discussed here and alternative ! variants due to backwards compatibility with older Fortran versions. - - + + ! Built-in Functions ! ================== ! Fortran has around 200 functions/subroutines intrinsic to the language. - ! Examples - + ! Examples - call cpu_time(v) !sets 'v' to a time in seconds. k = ior(i,j) !bitwise OR of 2 integers. v = log10(x) !log base 10. i = floor(b) !returns the closest integer less than or equal to x. v = aimag(w) !imaginary part of a complex number. - + ! Functions & Subroutines ! ======================= - + ! A subroutine runs some code on some input values and can cause ! side-effects or modify the input values. - + call routine(a,c,v) !subroutine call. - + ! A function takes a list of input parameters and returns a single value. - ! However the input parameters may still be modified and side effects + ! However the input parameters may still be modified and side effects ! executed. - + m = func(3,2,k) !function call. - + ! Function calls can also be evoked within expressions. - Print *, func2(3,2,k) - + Print *, func2(3,2,k) + ! A pure function is a function that doesn't modify its input parameters ! or cause any side-effects. m = func3(3,2,k) @@ -56416,7 +56416,7 @@ contains ! Zone for defining sub-programs internal to the program. function func2(a,b,c) result(f) !return variable declared to be 'f'. implicit none - integer, intent(in) :: a,b !can declare and enforce that variables + integer, intent(in) :: a,b !can declare and enforce that variables !are not modified by the function. integer, intent(inout) :: c integer :: f !function return type declared inside the function. @@ -56447,14 +56447,14 @@ contains ! Zone for defining sub-programs internal to the program. end program example ! End of Program Definition ----------------------- -! Functions and Subroutines declared externally to the program listing need +! Functions and Subroutines declared externally to the program listing need ! to be declared to the program using an Interface declaration (even if they ! are in the same source file!) (see below). It is easier to define them within ! the 'contains' section of a module or program. elemental real function func4(a) result(res) ! An elemental function is a Pure function that takes a scalar input variable -! but can also be used on an array where it will be separately applied to all +! but can also be used on an array where it will be separately applied to all ! of the elements of an array and return a new array. real, intent(in) :: a res = a**2 + 1.0 @@ -56464,7 +56464,7 @@ end function func4 ! Modules ! ======= -! A module is a useful way to collect related declarations, functions and +! A module is a useful way to collect related declarations, functions and ! subroutines together for reusability. module fruit @@ -56477,7 +56477,7 @@ end module fruit module fruity ! Declarations must be in the order: modules, interfaces, variables. ! (can declare modules and interfaces in programs too). - + use fruit, only: apple, pear ! use apple and pear from fruit module. implicit none !comes after module imports. @@ -56486,7 +56486,7 @@ module fruity public :: apple,mycar,create_mycar ! Declare some variables/functions private to the module (redundant here). private :: func4 - + ! Interfaces ! ========== ! Explicitly declare an external function/procedure within the module @@ -56496,14 +56496,14 @@ module fruity real, intent(in) :: a end function func4 end interface - + ! Overloaded functions can be defined using named interfaces. interface myabs ! Can use 'module procedure' keyword to include functions already ! defined within the module. module procedure real_abs, complex_abs - end interface - + end interface + ! Derived Data Types ! ================== ! Can create custom structured data collections. @@ -56513,19 +56513,19 @@ module fruity real :: dimensions(3) !i.e. length-width-height (metres). character :: colour end type car - + type(car) :: mycar !declare a variable of your custom type. ! See create_mycar() routine for usage. - + ! Note: There are no executable statements in modules. - + contains subroutine create_mycar(mycar) ! Demonstrates usage of a derived data type. implicit none type(car),intent(out) :: mycar - + ! Access type elements using '%' operator. mycar%model = "Ford Prefect" mycar%colour = 'r' @@ -56533,7 +56533,7 @@ contains mycar%dimensions(1) = 5.0 !default indexing starts from 1! mycar%dimensions(2) = 3.0 mycar%dimensions(3) = 1.5 - + end subroutine real function real_abs(x) @@ -56544,7 +56544,7 @@ contains real_abs = x end if end function real_abs - + real function complex_abs(z) complex :: z ! long lines can be continued using the continuation character '&' @@ -56577,29 +56577,29 @@ contributors: - ["Divay Prakash", "http://github.com/divayprakash"] translators: - ["Agathe Begault", "https://github.com/begault"] -lang: fr-fr +lang: fr-fr --- # Notations Asymptotiques ## Qu'est ce que c'est? -Les notations asymptotiques sont des langages qui nous permettent d'analyser l'ordre de grandeur du temps d'exécution d'un algorithme en identifiant son comportement à mesure que les données d'entrée de l'algorithme augmentent. On appelle également cela le taux de croissance d'un algorithme. +Les notations asymptotiques sont des langages qui nous permettent d'analyser l'ordre de grandeur du temps d'exécution d'un algorithme en identifiant son comportement à mesure que les données d'entrée de l'algorithme augmentent. On appelle également cela le taux de croissance d'un algorithme. -Est ce que l'algorithme devient soudainement extrêmement lent si on augmente sa taille d'entrée ? Est ce qu'il arrive à maintenir un temps d'exécution rapide ? La notation asymptotique nous permet simplement de répondre à ces questions et d'ainsi comparer différents algorithmes. +Est ce que l'algorithme devient soudainement extrêmement lent si on augmente sa taille d'entrée ? Est ce qu'il arrive à maintenir un temps d'exécution rapide ? La notation asymptotique nous permet simplement de répondre à ces questions et d'ainsi comparer différents algorithmes. -## Y a t-il des alternatives pour répondre à ces problématiques ? +## Y a t-il des alternatives pour répondre à ces problématiques ? -Une première solution serait de compter le nombre d'opérations primitives, en fonction de la taille d'entrée. -Cette méthode est viable mais nécessite une quantité de travail trop importante par rapport à son utilisation, même sur des algorithmes simples. +Une première solution serait de compter le nombre d'opérations primitives, en fonction de la taille d'entrée. +Cette méthode est viable mais nécessite une quantité de travail trop importante par rapport à son utilisation, même sur des algorithmes simples. -Une autre approche serait de mesurer physiquement le temps qu'un algorithme met pour traiter différentes quantités de données. Cependant, la précision et la relativité de cette méthode (les temps obtenus n'étant relatifs qu'à la machine sur laquelle ils ont été calculés) est liée à des variables environnementales comme les spécifications du matériel informatique utilisé, la puissance de traitement de la machine, etc. +Une autre approche serait de mesurer physiquement le temps qu'un algorithme met pour traiter différentes quantités de données. Cependant, la précision et la relativité de cette méthode (les temps obtenus n'étant relatifs qu'à la machine sur laquelle ils ont été calculés) est liée à des variables environnementales comme les spécifications du matériel informatique utilisé, la puissance de traitement de la machine, etc. ## Les types de Notations asymptotiques -En première partie de ce document, nous avons décris comment une notation asymptotique identifie le comportement d'un algorithme à mesure que la taille des données d'entrée change. Imaginons un algorithme comme une fonction f, ayant comme taille de donnée d'entrée n, et f(n) étant le temps d'exécution. Ainsi, pour un algorithme donné f, avec une taille d'entrée n, nous obtenons en résultat un temps d'exécution f(n). Cela nous fournit un graphique où l'axe Y est le temps d'exécution, l'axe X est la taille d'entrée et la courbe tracée est le résultat du temps utilisé pour traiter chaque quantité de données. +En première partie de ce document, nous avons décris comment une notation asymptotique identifie le comportement d'un algorithme à mesure que la taille des données d'entrée change. Imaginons un algorithme comme une fonction f, ayant comme taille de donnée d'entrée n, et f(n) étant le temps d'exécution. Ainsi, pour un algorithme donné f, avec une taille d'entrée n, nous obtenons en résultat un temps d'exécution f(n). Cela nous fournit un graphique où l'axe Y est le temps d'exécution, l'axe X est la taille d'entrée et la courbe tracée est le résultat du temps utilisé pour traiter chaque quantité de données. -Vous pouvez décrire une fonction ou un algorithme avec une notation asymptotique de plusieurs manières. Par exemple, vous pouvez décrire un algorithme en partant du meilleur des cas, du pire ou d'un cas intermédiaire. Le plus courant est de commencer à analyser un algorithme avec le pire cas. Le meilleur cas n'est pas nécessaire car ce ne sont pas les conditions que vous envisagez. L'algorithme de tri est un très bon exemple, particulièrement en ajoutant des éléments à une structure arborescente. Le meilleur cas pour la plupart des algorithmes ne nécessite qu'une simple opération alors que dans la plupart des cas, l'élément à ajouter aura besoin d'être trié de manière appropriée à travers l'arbre de données. Cette action pourrait signifier l'examen d'une branche entière de l'arbre. C'est d'ailleurs le pire cas et celui que nous prévoyons. +Vous pouvez décrire une fonction ou un algorithme avec une notation asymptotique de plusieurs manières. Par exemple, vous pouvez décrire un algorithme en partant du meilleur des cas, du pire ou d'un cas intermédiaire. Le plus courant est de commencer à analyser un algorithme avec le pire cas. Le meilleur cas n'est pas nécessaire car ce ne sont pas les conditions que vous envisagez. L'algorithme de tri est un très bon exemple, particulièrement en ajoutant des éléments à une structure arborescente. Le meilleur cas pour la plupart des algorithmes ne nécessite qu'une simple opération alors que dans la plupart des cas, l'élément à ajouter aura besoin d'être trié de manière appropriée à travers l'arbre de données. Cette action pourrait signifier l'examen d'une branche entière de l'arbre. C'est d'ailleurs le pire cas et celui que nous prévoyons. ### Les types de fonctions, limites et simplifications @@ -56608,26 +56608,26 @@ Fonction logarithmique - log n Fonction linéaire - an + b Fonction quadratique - an^2 + bn + c Fonction polynomiale - an^z + . . . + an^2 + a*n^1 + a*n^0, où z est une constante -Fonction exponentielle - a^n, où a est une constante +Fonction exponentielle - a^n, où a est une constante ``` -Voici une classification de fonctions croissantes de base, utilisées dans de nombreuses notations. La liste commence par la plus lente des fonctions croissantes (logarithmique, le temps d'exécution le plus rapide) et finit avec la plus croissante des fonctions (exponentielle, le temps d'exécution le plus lent). Notez que lorsque 'n' ou les données d'entrée augmentent pour chacune de ces fonctions, le résultat augmente clairement plus rapidement avec les fonctions quadratique, polynomiale et exponentielle qu'avec les fonctions logarithmique et linéaire. +Voici une classification de fonctions croissantes de base, utilisées dans de nombreuses notations. La liste commence par la plus lente des fonctions croissantes (logarithmique, le temps d'exécution le plus rapide) et finit avec la plus croissante des fonctions (exponentielle, le temps d'exécution le plus lent). Notez que lorsque 'n' ou les données d'entrée augmentent pour chacune de ces fonctions, le résultat augmente clairement plus rapidement avec les fonctions quadratique, polynomiale et exponentielle qu'avec les fonctions logarithmique et linéaire. -Il est important de noter que les notations suivantes doivent être utilisées avec les termes les plus simples. Cela signifie d'ignorer les constantes et termes de l'ordre inférieur. En effet, puisque la taille d'entrée (ou n dans notre exemple f(n)) peut augmenter à l'infini (limites mathématiques), les termes et constantes de l'ordre inférieur sont insignifiants. Ceci dit, si vous avez une constante égale à 2^9001, ou toute autre valeur ridicule et inimaginable, dans ce cas la simplification nuira à votre précision de notation. +Il est important de noter que les notations suivantes doivent être utilisées avec les termes les plus simples. Cela signifie d'ignorer les constantes et termes de l'ordre inférieur. En effet, puisque la taille d'entrée (ou n dans notre exemple f(n)) peut augmenter à l'infini (limites mathématiques), les termes et constantes de l'ordre inférieur sont insignifiants. Ceci dit, si vous avez une constante égale à 2^9001, ou toute autre valeur ridicule et inimaginable, dans ce cas la simplification nuira à votre précision de notation. -Puisque nous voulons la forme la plus simple, modifions un peu notre table... +Puisque nous voulons la forme la plus simple, modifions un peu notre table... ``` Logarithmique - log n Linéaire - n Quadratique - n^2 Polynomiale - n^z, où z est une constante -Exponentielle - a^n, où a est une constante +Exponentielle - a^n, où a est une constante ``` ### Big-O -Big-O, couramment écris **O**, est une notation asymptotique pour le cas le plus mauvais (ou plafond de croissance) d'une fonction donnée. Il nous fournit une _**limite supérieure asymptotique**_ pour le taux de croissance du temps d'exécution d'un algorithme. +Big-O, couramment écris **O**, est une notation asymptotique pour le cas le plus mauvais (ou plafond de croissance) d'une fonction donnée. Il nous fournit une _**limite supérieure asymptotique**_ pour le taux de croissance du temps d'exécution d'un algorithme. Prenons 'f(n)' comme temps d'exécution de notre algorithme et 'g(n)' comme complexité de temps arbitraire que nous essayons d'appliquer à notre algorithme. 'f(n)' est O(g(n)), si pour certaines constantes c (c > 0) et n0, 'f(n)' <= 'c g(n)' pour toute taille d'entrée n (n > n0). @@ -56674,18 +56674,18 @@ Non, il n'en existe pas. `f(n)` n'est pas égal à O(g(n)). ### Big-Omega -Big-Omega, courrament écris **Ω**, est une notation asymptotique pour le meilleur cas (ou limite de croissance basse) d'une fonction donnée. Il nous fournit une _**limite inférieure asymptotique**_ pour le taux de croissance du temps d'exécution d'un algorithme. +Big-Omega, courrament écris **Ω**, est une notation asymptotique pour le meilleur cas (ou limite de croissance basse) d'une fonction donnée. Il nous fournit une _**limite inférieure asymptotique**_ pour le taux de croissance du temps d'exécution d'un algorithme. Prenons 'f(n)' comme temps d'exécution de notre algorithme et 'g(n)' comme complexité de temps arbitraire que nous essayons d'appliquer à notre algorithme. 'f(n)' est Ω(g(n)), si pour certaines constantes c (c > 0) et n0, 'f(n)' >= 'c g(n)' pour toute taille d'entrée n (n > n0). ### Remarque -Les taux de croissance asymptotiques fournis par les notations big-O et big-omega peuvent ou non être asymptotiquement serrés. Nous utilisons ainsi les notations small-o et small-omega pour désigner des limites qui ne sont pas asymptotiquement serrées. +Les taux de croissance asymptotiques fournis par les notations big-O et big-omega peuvent ou non être asymptotiquement serrés. Nous utilisons ainsi les notations small-o et small-omega pour désigner des limites qui ne sont pas asymptotiquement serrées. ### Small-o -Small-o, couramment écris **o**, est une notation asymptotique pour désigner la limite supérieure (ce qui n'est pas asymptotiquement serré) du taux de croissance du temps d'exécution d'un algorithme. +Small-o, couramment écris **o**, est une notation asymptotique pour désigner la limite supérieure (ce qui n'est pas asymptotiquement serré) du taux de croissance du temps d'exécution d'un algorithme. -`f(n)` est o(g(n)), si pour certaines constantes c (c > 0) et n0 (n0 > 0), `f(n)` < `c g(n)` +`f(n)` est o(g(n)), si pour certaines constantes c (c > 0) et n0 (n0 > 0), `f(n)` < `c g(n)` pour toute taille d'entrée n (n > n0). Les définitions de O-notation et o-notation sont similaires. La principale différence est visible quand f(n) = O(g(n)). Dans ce cas, la limite f(n) <= g(n) est appliquée pour _**quelques**_ constantes c > 0. Lorsque f(n) = o(g(n)), la limite f(n) < c g(n) est appliquée pour _**toute**_ constante c > 0. @@ -56693,23 +56693,23 @@ Les définitions de O-notation et o-notation sont similaires. La principale diff ### Small-omega Small-omega, couramment écris **ω**, est une notation asymptotique pour désigner la limite inférieure (ce qui n'est pas asymptotiquement serré) du taux de croissance du temps d'exécution d'un algorithme. -`f(n)` est ω(g(n)), si pour certaines constantes c (c > 0) et n0 (n0 > 0), `f(n)` > `c g(n)` +`f(n)` est ω(g(n)), si pour certaines constantes c (c > 0) et n0 (n0 > 0), `f(n)` > `c g(n)` pour toute taille d'entrée n (n > n0). Les définitions de Ω-notation et ω-notation sont similaires. La principale différence est visible quand f(n) = Ω(g(n)). Dans ce cas, la limite f(n) >= g(n) est appliquée pour _**quelques**_ constantes c > 0. Lorsque f(n) = ω(g(n)), la limite f(n) > c g(n) est appliquée pour _**toute**_ constante c > 0. ### Theta -Theta, couramment écris **Θ**, est une notation asymptotique pour désigner la _**borne asymptotique sous contrainte**_ du taux de croissance du temps d'exécution d'un algorithme. +Theta, couramment écris **Θ**, est une notation asymptotique pour désigner la _**borne asymptotique sous contrainte**_ du taux de croissance du temps d'exécution d'un algorithme. `f(n)` est Θ(g(n)), si pour certaines constantes réelles c1, c2 et n0 (c1 > 0, c2 > 0, n0 > 0), `c1 g(n)` < `f(n)` < `c2 g(n)` pour toute taille d'entrée n (n > n0). ∴ `f(n)` est Θ(g(n)) implique que `f(n)` est égal à O(g(n)) autant que `f(n)` est égal à Ω(g(n)). -N'hésitez pas à trouver de plus amples informations à ce sujet. Big-O est la notation la plus couramment utilisée pour le calcul de complexité du temps d'un algorithme. +N'hésitez pas à trouver de plus amples informations à ce sujet. Big-O est la notation la plus couramment utilisée pour le calcul de complexité du temps d'un algorithme. ### Notes de fin -Il est difficile de traiter ce type de sujets dans un article court tant les exemples, méthodes et informations sont nombreuses. C'est pourquoi nous vous invitons à jeter un oeil aux livres et liens listés ci-dessous. -Ces ressources apportent plus de détails avec des exemples et des définitions. +Il est difficile de traiter ce type de sujets dans un article court tant les exemples, méthodes et informations sont nombreuses. C'est pourquoi nous vous invitons à jeter un oeil aux livres et liens listés ci-dessous. +Ces ressources apportent plus de détails avec des exemples et des définitions. ## Livres @@ -58306,7 +58306,7 @@ ressemblent à toutes les autres formes: ; de la transformation, la forme courante en la seconde position ; de la forme suivante, constituant à chaque fois un nouvel étage ; de transformation. Par exemple: -(-> +(-> {:a 1 :b 2} (assoc :c 3) ;=> Génère ici (assoc {:a 1 :b 2} :c 3) (dissoc :b)) ;=> Génère ici (dissoc (assoc {:a 1 :b 2} :c 3) :b) @@ -58325,7 +58325,7 @@ ressemblent à toutes les autres formes: (into [])) ;=> Génère ici (into [] (filter odd? (map inc (range 10))), ce qui est évalué au final à; ; [1 3 5 7 9] -; Quand vous êtes dans une situation où vous voulez plus de liberté pour choisir +; Quand vous êtes dans une situation où vous voulez plus de liberté pour choisir ; où mettre le résultat des étages précédents, vous pouvez utiliser la ; macro as->. Avec cette macro, donnez un nom spécifique au résultat de la transformation ; précédente pour le placer, à votre guise, où bon vous semble dans l'étage courant: @@ -59111,13 +59111,13 @@ using System.Threading.Tasks; // Définit la portée du code pour une meilleure organisation namespace Learning { - // Chaque fichier .cs devrait au moins contenir une classe avec le même nom - // que celui du fichier. Ce n'est pas une obligation mais c'est mieux ! + // Chaque fichier .cs devrait au moins contenir une classe avec le même nom + // que celui du fichier. Ce n'est pas une obligation mais c'est mieux ! public class LearnCSharp { // LES BASES - si vous avez déjà de l'expérience en Java ou C++ - // passez directement à la partie FONCTIONNALITÉS INTERÉSSANTES - public static void Syntax() + // passez directement à la partie FONCTIONNALITÉS INTERÉSSANTES + public static void Syntax() { // Utilisez Console.WriteLine pour écrire sur la sortie Console.WriteLine("Hello World"); @@ -59159,15 +59159,15 @@ namespace Learning // Par défaut le type d'un littéral entier est int ou uint // on ajoute 'L' pour spécifier la création d'un long - // Double - Réel sur 64 bits en virgule flottante (norme IEEE 754) + // Double - Réel sur 64 bits en virgule flottante (norme IEEE 754) double fooDouble = 123.4; // Precision : 15-16 chiffres - // Float - Réel sur 32 bits en virgule flottante (norme IEEE 754) + // Float - Réel sur 32 bits en virgule flottante (norme IEEE 754) float fooFloat = 234.5f; // Precision : 7 chiffres // Par défaut le type d'un littéral réel est double // on ajoute 'f' pour spécifier la création d'un float - // Decimal - Type de donnée numérique sur 128 bits, fournit une plus + // Decimal - Type de donnée numérique sur 128 bits, fournit une plus // grande précision et une plage de valeurs réduite. // Approprié aux calculs financiers et monétaires decimal fooDecimal = 150.3m; @@ -59231,7 +59231,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; List intList = new List(); List stringList = new List(); List z = new List { 9000, 1000, 1337 }; // intialisation - // Les <> indiquent un type générique + // Les <> indiquent un type générique // Pus d'info dans la partie FONCTIONNALITÉS INTERÉSSANTES // Les éléments d'une liste ne sont pas null par défaut @@ -59327,7 +59327,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; fooDoWhile++; } while (fooDoWhile < 100); - // Boucle for + // Boucle for // Structure : for(; ; ) for (int fooFor = 0; fooFor < 10; fooFor++) { @@ -59431,10 +59431,10 @@ sur une nouvelle ligne! ""Wow!"", quel style"; // // FONCTIONNALITÉS INTÉRÉSSANTES // - + // SIGNATURE DE METHODE public // Visibilité - static // Permet un appel direct par la classe (sans instanciation) + static // Permet un appel direct par la classe (sans instanciation) int // Type de retour, MethodSignatures( int maxCount, // Premier paramètre, de type int @@ -59442,7 +59442,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; int another = 3, params string[] otherParams // Capture tous les arguments passés à la méthode ) - { + { return -1; } @@ -59452,12 +59452,12 @@ sur une nouvelle ligne! ""Wow!"", quel style"; } // TYPE GÉNÉRIQUE - + // Les types TKey et TValue sont spécifiés par l'utilisateur lors de l'appel de la fonction // Cette méthode émule SetDefaut de Python public static TValue SetDefault( - IDictionary dictionary, - TKey key, + IDictionary dictionary, + TKey key, TValue defaultItem) { TValue result; @@ -59479,7 +59479,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; { // PARAMÈTERES OPTIONNELS MethodSignatures(3, 1, 3, "Des", "Paramètres", "En plus"); - MethodSignatures(3, another: 3); // affectation explicite, les autres + MethodSignatures(3, another: 3); // affectation explicite, les autres // paramètres ont la valeur par défaut // MÉTHODE D'EXTENSION @@ -59502,7 +59502,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; // magic = 9; // ne fonctionnera pas car magic est désormais une chaîne de caractères // TYPES GÉNÉRIQUES - var agenda = new Dictionary() { + var agenda = new Dictionary() { {"Sarah", "212 555 5555"} // Ajout d'une entrée à notre agenda }; @@ -59524,19 +59524,19 @@ sur une nouvelle ligne! ""Wow!"", quel style"; writer.WriteLine("Rien à signaler"); // À la fin de cette portée les ressources seront libérées. // Même si une exception est levée. - } + } // BIBLIOTHÈQUE DE TÂCHES PARALLÈLES (TPL) // http://msdn.microsoft.com/fr-fr/library/dd460717.aspx - var websites = new string[] { - "http://www.google.com", "http://www.reddit.com", + var websites = new string[] { + "http://www.google.com", "http://www.reddit.com", "http://www.shaunmccarthy.com" }; var responses = new Dictionary(); - + // L'exemple suivant exécutera chaque requête dans un thread séparé, // et attendra la fin de chacun d'entre eux avant de continuer - Parallel.ForEach(websites, + Parallel.ForEach(websites, new ParallelOptions() {MaxDegreeOfParallelism = 3}, // maximum de 3 threads website => { @@ -59561,7 +59561,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; Console.WriteLine(student.Introduce("Beth")); // IQUERYABLE - quasiment toutes les collections implémentent cette interface - // ce qui permet d'utiliser des méthodes de style 'Filter' / 'Map' / 'Reduce' + // ce qui permet d'utiliser des méthodes de style 'Filter' / 'Map' / 'Reduce' var bikes = new List(); bikes.Sort(); // Trie le tableau sur place bikes.Sort((b1, b2) => b1.Wheels.CompareTo(b2.Wheels)); // Trie en se basant sur la propriété Wheels @@ -59575,7 +59575,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; // Creation d'une liste d'objet anonymes basés sur des paramètres de la classe Bike var bikeSummaries = bikes.Select(b=>new { Name = b.Name, IsAwesome = !b.IsBroken && b.HasTassles }); - // Le compilateur peut inférer le type de ces objets anonymes, permettant à certains IDE d'effectuer + // Le compilateur peut inférer le type de ces objets anonymes, permettant à certains IDE d'effectuer // des autos-complétion. foreach (var bikeSummary in bikeSummaries.Where(b => b.IsAwesome)) Console.WriteLine(bikeSummary.Name); @@ -59585,7 +59585,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; // C'est ici que les choses se compliquent - un mélange de LINQ et de TPL var threeWheelers = bikes.AsParallel().Where(b => b.Wheels == 3).Select(b => b.Name); // La ligne précédente s'exécute en parallèle ! Des threads seront gérés automatiquement - // et les données y seront réparties. Idéal sur de grosses données (et si votre + // et les données y seront réparties. Idéal sur de grosses données (et si votre // machine dispose de plusieurs coeurs) @@ -59604,9 +59604,9 @@ sur une nouvelle ligne! ""Wow!"", quel style"; .Select(b => b.Name); // toujours pas de requête exécutée // Maintenant la requête est exécutée, mais retourne des données uniquement au fil de l'itération - foreach (string bike in query) + foreach (string bike in query) Console.WriteLine(result); - + } } // Fin de la classe LearnCSharp @@ -59689,7 +59689,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; // Les constructeurs sont un moyen de créer des objets // Voici un constructeur par défaut (pas d'arguments) - public Bicycle() + public Bicycle() { this.Gear = 1; // accès aux membres de la classe via le mot clé this Cadence = 50; // qui est souvent implicite @@ -59701,13 +59701,13 @@ sur une nouvelle ligne! ""Wow!"", quel style"; // Voici un constructeur spécifique (qui prend des arguments) public Bicycle(int startCadence, int startSpeed, int startGear, - string name, bool hasCardsInSpokes, BikeBrand brand) + string name, bool hasCardsInSpokes, BikeBrand brand) : base() // possibilité d'appeler le constructeur de la classe mère (ici Object) { - Gear = startGear; + Gear = startGear; Cadence = startCadence; _speed = startSpeed; - Name = name; + Name = name; _hasCardsInSpokes = hasCardsInSpokes; Brand = brand; } @@ -59775,7 +59775,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; { // À l'intérieur d'une méthode statique on ne peut que référencer des membres statiques ! return BicyclesCreated > 9000; - } // Si votre classe n'a que des membres statiques, marquez la comme statique + } // Si votre classe n'a que des membres statiques, marquez la comme statique } // fin de la classe Bicycle @@ -59817,7 +59817,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; interface IBreakable { - bool Broken { get; } // Les interfaces peuvent contenir des propriétés, + bool Broken { get; } // Les interfaces peuvent contenir des propriétés, // des méthodes et des évènements } @@ -59842,7 +59842,7 @@ sur une nouvelle ligne! ""Wow!"", quel style"; /// /// Utilisé pour illustrer la connexion à une base donnée dans l'exemple LinqToSql - /// L'approche code first d'EntityFramework est très pratique (un peu comme ActiveRecord de Ruby) + /// L'approche code first d'EntityFramework est très pratique (un peu comme ActiveRecord de Ruby) /// http://msdn.microsoft.com/fr-fr/data/jj193542.aspx /// public class BikeRespository : DbSet @@ -60082,9 +60082,9 @@ et le code HTML: Les priorités de style sont : Attention, les priorités s'appliquent aux **propriétés**, pas aux blocs entiers. -* `E` a la priorité grâce à `!important`. +* `E` a la priorité grâce à `!important`. * `F` vient ensuite, car le code se trouve directement dans le HTML. -* `A` vient ensuite, car il est le plus spécifique. +* `A` vient ensuite, car il est le plus spécifique. plus spécifique veut dire, celui qui cible le plus l'élément * `C` vient ensuite. Il est aussi spécifique que `B`, mais est écrit après. * Puis `B` @@ -60392,12 +60392,12 @@ La programmation dynamique est une technique très efficace pour résoudre une c ## Exemple de Programmation Dynamique Le problème de la plus grande sous-chaîne croissante est de trouver la plus grande sous-chaîne croissante dans une chaîne. Soit la chaîne `S = {a1, a2, a3, a4, ............., an-1, an}`, nous avons à trouver la plus grande chaîne telle que pour tout `j` et `i`, `j '#', :class => 'machin', :title => 'Titre machin'} -/ Pour affecter une valeur à un booléen, utilisez 'true' +/ Pour affecter une valeur à un booléen, utilisez 'true' %input{:selected => true} / Pour écrire des data-attributes, utilisez le :data avec la valeur d'un hash @@ -62894,7 +62894,7 @@ $ haml fichier_entree.haml fichier_sortie.html / Ceci vous permet de faire des choses géniales comme des blocs Ruby - livre.shuffle.each_with_index do |livre, index| - %h1= livre + %h1= livre if livre do %p Ceci est un livre @@ -62935,7 +62935,7 @@ language: Haskell contributors: - ["Adit Bhargava", "http://adit.io"] translators: - - ["David Baumgartner", "http://davidbaumgartner.ch"] + - ["David Baumgartner", "http://davidbaumgartner.ch"] lang: fr-fr filename: learnhaskell-fr.hs --- @@ -63016,10 +63016,10 @@ not False -- True [1..] !! 999 -- 1000 -- Et là, Haskell a évalué les éléments 1 à 1000 de la liste... mais le reste --- de cette liste « infinie » n'existe pas encore ! En fait, Haskell ne va jamais +-- de cette liste « infinie » n'existe pas encore ! En fait, Haskell ne va jamais -- le faire à moins qu'il ne le doive. --- Adjoindre deux listes +-- Adjoindre deux listes [1..5] ++ [6..10] -- ajouter au début de la liste @@ -63067,7 +63067,7 @@ add 1 2 -- 3 1 `add` 2 -- 3 -- Vous pouvez également définir des fonctions qui n'ont pas de --- lettres ! Ça vous laisse créer vos propres opérateurs ! Voilà +-- lettres ! Ça vous laisse créer vos propres opérateurs ! Voilà -- un opérateur qui fait une division entière : (//) a b = a `div` b 35 // 4 -- 8 @@ -63077,7 +63077,7 @@ fib x | x < 2 = x | otherwise = fib (x - 1) + fib (x - 2) --- Le filtrage par motif est similaire. Là, on a donné trois +-- Le filtrage par motif est similaire. Là, on a donné trois -- définitions différentes de `fib`. Haskell appellera automatiquement -- la première fonction qui correspond au motif de la valeur. fib 1 = 1 @@ -63093,7 +63093,7 @@ foo (x, y) = (x + 1, y + 2) myMap func [] = [] myMap func (x:xs) = func x:(myMap func xs) --- Les fonctions anonymes sont créées avec des barres obliques +-- Les fonctions anonymes sont créées avec des barres obliques -- inverses, suivies de tous les arguments. myMap (\x -> x + 2) [1..5] -- [3, 4, 5, 6, 7] @@ -63130,8 +63130,8 @@ foo 5 -- 75 -- fixation de priorité -- Haskell a une autre fonction appelée `$`. Elle peut changer la priorité --- de sorte que tout ce qu'il y a à sa gauche est calculé d'abord et ensuite --- appliqué à tout ce qu'il y a à droite. Vous pouvez utiliser `.` et `$` +-- de sorte que tout ce qu'il y a à sa gauche est calculé d'abord et ensuite +-- appliqué à tout ce qu'il y a à droite. Vous pouvez utiliser `.` et `$` -- pour vous débarrasser de beaucoup de parenthèses : -- avant @@ -63175,7 +63175,7 @@ haskell = if 1 == 1 then "awesome" else "awful" --- les structures case : voilà comment vous pourriez analyser les arguments de +-- les structures case : voilà comment vous pourriez analyser les arguments de -- ligne de commande case args of "help" -> printHelp @@ -63197,12 +63197,12 @@ for [0..5] $ \i -> show i -- nous aurions pu l'écrire également ainsi for [0..5] show --- vous pouvez utiliser foldl et foldr pour +-- vous pouvez utiliser foldl et foldr pour -- réduire une liste -- foldl foldl (\x y -> 2*x + y) 4 [1,2,3] -- 43 --- C'est donc la même chose que +-- C'est donc la même chose que (2 * (2 * (2 * 4 + 1) + 2) + 3) -- foldl évalue de gauche à droite, foldr @@ -63250,10 +63250,10 @@ Nothing -- of type `Maybe a` for any `a` -- Par exemple : main :: IO () -main = putStrLn $ "Bonjour, le ciel ! " ++ (say Blue) +main = putStrLn $ "Bonjour, le ciel ! " ++ (say Blue) -- putStrLn a comme type String -> IO () --- La façon la plus simple pour faire de l'IO est de faire un programme +-- La façon la plus simple pour faire de l'IO est de faire un programme -- fonction de String vers String. La fonction -- interact :: (String -> String) -> IO () -- prend un texte, applique une fonction et affiche le résultat. @@ -63264,26 +63264,26 @@ countLines = show . length . lines main' = interact countLines -- Vous pouvez considérer qu'une valeur de type `IO ()` représente --- une séquence d'actions que l'ordinateur exécute, un peu comme --- dans un langage impératif. On peut utiliser la structure `do` +-- une séquence d'actions que l'ordinateur exécute, un peu comme +-- dans un langage impératif. On peut utiliser la structure `do` -- pour enchaîner des actions. Par exemple : sayHello :: IO () -sayHello = do +sayHello = do putStrLn "Quel est ton nom ?" name <- getLine -- prend une ligne et assigne sa valeur à `name` putStrLn $ "Salut, " ++ name - --- Exercice : écrire votre propre version d'`interact` qui ne fait + +-- Exercice : écrire votre propre version d'`interact` qui ne fait -- que de lire une ligne d'entrée. - + -- Le code de `sayHello` ne sera jamais exécuté, cependant. La seule -- action qui sera exécutée est la valeur de `main`. -- Pour lancer `sayHello`, commentez l'ancienne définition de `main` -- et remplacez-le par : -- main = sayHello --- Essaions de mieux comprendre comment la fonction `getLine` que +-- Essaions de mieux comprendre comment la fonction `getLine` que -- nous venons d'utiliser. Son type est : -- getLine :: IO String -- vous pouvez considérer le type `IO a` comme un programme que @@ -63295,7 +63295,7 @@ sayHello = do action :: IO String action = do putStrLn "C'est une ligne. Heu" - input1 <- getLine + input1 <- getLine input2 <- getLine -- Le type de la structure `do` est celui de sa dernière ligne. -- `return` n'est pas un mot clef, mais simplement une fonction. @@ -63306,7 +63306,7 @@ action = do main'' = do putStrLn "Je vais afficher deux lignes !" - result <- action + result <- action putStrLn result putStrLn "C'était tout !" @@ -63317,7 +63317,7 @@ main'' = do -- quelles fonctions sont « pures » (n'interagissent pas avec le monde extérieur -- ou ne changent pas d'état) et quelles fonctions ne le sont pas. --- C'est une fonctionnalité très puissante, car il est facile d'exécuter +-- C'est une fonctionnalité très puissante, car il est facile d'exécuter -- des fonctions pures simultanément, et donc la concurrence en Haskell -- est très facile. @@ -63328,7 +63328,7 @@ main'' = do -- Lancer le REPL en tapant `ghci`. -- Vous pouvez maintenant taper du code Haskell. --- Toutes les nouvelles valeurs peuvent être crées +-- Toutes les nouvelles valeurs peuvent être crées -- avec `let` : let foo = 5 @@ -63369,11 +63369,11 @@ contributors: lang: fr-fr --- -HTML signifie HyperText Markup Language. +HTML signifie HyperText Markup Language. C'est un langage (format de fichiers) qui permet d'écrire des pages internet. C’est un langage de balisage, il nous permet d'écrire des pages HTML au moyen de balises (Markup, en anglais). Les fichiers HTML sont en réalité de simple fichier texte. -Qu'est-ce que le balisage ? C'est une façon de hiérarchiser ses données en les entourant par une balise ouvrante et une balise fermante. +Qu'est-ce que le balisage ? C'est une façon de hiérarchiser ses données en les entourant par une balise ouvrante et une balise fermante. Ce balisage sert à donner une signification au texte ainsi entouré. Comme tous les autres langages, HTML a plusieurs versions. Ici, nous allons parlons de HTML5. @@ -63385,9 +63385,9 @@ Cet article porte principalement sur la syntaxe et quelques astuces. - + - + @@ -63475,7 +63475,7 @@ Cet article porte principalement sur la syntaxe et quelques astuces. Le HTML s'écrit dans des fichiers `.html`. -## En savoir plus +## En savoir plus * [Tutoriel HTML](http://slaout.linux62.org/html_css/html.html) * [W3School](http://www.w3schools.com/html/html_intro.asp) @@ -64392,7 +64392,7 @@ filename: jquery-fr.js lang: fr-fr --- -jQuery est une bibliothèque JavaScript dont le but est de permettre de "faire plus en écrivant moins" (do more, write less). Elle facilite l'écriture de nombreuses fonctions, notamment au niveau d'AJAX, de la gestion d'événements, ou encore de la manipulation de documents. +jQuery est une bibliothèque JavaScript dont le but est de permettre de "faire plus en écrivant moins" (do more, write less). Elle facilite l'écriture de nombreuses fonctions, notamment au niveau d'AJAX, de la gestion d'événements, ou encore de la manipulation de documents. C'est pourquoi aujourd'hui, jQuery est utilisée par de nombreuses grandes entreprises et par des développeurs du monde entier. Étant donné que jQuery est une bibliothèque JavaScript, vous devriez d'abord [apprendre le JavaScript](https://learnxinyminutes.com/docs/fr-fr/javascript-fr/) @@ -64462,7 +64462,7 @@ $('#btn').on( // On peut déplacer et cacher des éléments grâce à des fonctions d'effets $('.table').hide(); // Cache le(s) élément(s) -// Note: même avec un appel à une fonction dans ces méthodes +// Note: même avec un appel à une fonction dans ces méthodes // cache quand même l'élément $('.table').hide(function(){ // L'élément est caché, puis la fonction est exécutée @@ -64483,7 +64483,7 @@ tables.slideUp(); // Cache l'élément avec un effet de glissement vers le haut tables.slideDown(); // Fait apparaître l'élément avec un glissement vers le bas tables.slideToggle(); // Cache/Montre l'élément avec un effet de glissement -// Les méthodes ci-dessus prennent en arguments +// Les méthodes ci-dessus prennent en arguments // une vitesse (millisecondes) et une function callback tables.hide(1000, myFunction); // Animation d'une seconde, puis appel à la fonction @@ -64500,7 +64500,7 @@ tables.animate({margin-top:"+=50", height: "100px"}, 500, myFunction); // 3. Manipulation // Ces méthodes sont similaires aux effets mais permettent d'aller plus loin -$('div').addClass('taming-slim-20'); // Ajoute la classe taming-slim-20 aux div +$('div').addClass('taming-slim-20'); // Ajoute la classe taming-slim-20 aux div // Méthodes ordinaires de manipulation $('p').append('Hello world'); // Ajoute à la fin de l'élément @@ -64545,7 +64545,7 @@ tout sera du JSON 100% valide. Heureusement, il s'explique par lui-même. ```json { "Clé": "valeur", - + "Clés": "devront toujours être entourées par des guillemets", "nombres": 0, "chaînes de caractères": "Hellø, wørld. Tous les caractères Unicode sont autorisés, accompagné d'un \"caractère d'échappement\".", @@ -64575,7 +64575,7 @@ tout sera du JSON 100% valide. Heureusement, il s'explique par lui-même. [0, 0, 0, 1] ] ], - + "style alternatif": { "commentaire": "regarde ça !" , "position de la virgule": "n'a pas d'importance - aussi longtemps qu'elle est avant la valeur, alors elle est valide." @@ -64595,11 +64595,11 @@ translators: lang: fr-fr --- -LiveScript est un langage qui compile en JavaScript. Il a un rapport direct -avec JavaScript, et vous permet d'écrire du JavaScript plus simplement, plus -efficacement et sans répétitivité. LiveScript ajoute non seulement des -fonctionnalités pour écrire du code fonctionnel, mais possède aussi nombre -d'améliorations pour la programmation orientée objet et la programmation +LiveScript est un langage qui compile en JavaScript. Il a un rapport direct +avec JavaScript, et vous permet d'écrire du JavaScript plus simplement, plus +efficacement et sans répétitivité. LiveScript ajoute non seulement des +fonctionnalités pour écrire du code fonctionnel, mais possède aussi nombre +d'améliorations pour la programmation orientée objet et la programmation impérative. LiveScript est un descendant direct de [Coco][], indirect de [CoffeeScript][], @@ -64613,7 +64613,7 @@ Vous pouvez contacter l'auteur du guide original en anglais ici : ```coffeescript -# Comme son cousin CoffeeScript, LiveScript utilise le symbole dièse pour les +# Comme son cousin CoffeeScript, LiveScript utilise le symbole dièse pour les # commentaires sur une ligne. /* @@ -64622,8 +64622,8 @@ Vous pouvez contacter l'auteur du guide original en anglais ici : */ ``` ```coffeescript -# LiveScript utilise l'indentation pour délimiter les blocs de code plutôt que -# les accolades, et les espaces pour appliquer les fonctions (bien que les +# LiveScript utilise l'indentation pour délimiter les blocs de code plutôt que +# les accolades, et les espaces pour appliquer les fonctions (bien que les # parenthèses soient utilisables). @@ -64652,7 +64652,7 @@ yes; no 10 0.4 # Notez que le `0` est requis -# Dans un souci de lisibilité, vous pouvez utiliser les tirets bas et les +# Dans un souci de lisibilité, vous pouvez utiliser les tirets bas et les # suffixes sur les nombres. Il seront ignorés à la compilation. 12_344km @@ -64665,7 +64665,7 @@ yes; no okay too.""" -# De temps à autre, vous voulez encoder un mot clé; la notation en backslash +# De temps à autre, vous voulez encoder un mot clé; la notation en backslash # rend cela facile: \keyword # => 'keyword' @@ -64679,14 +64679,14 @@ fruits = # Il peuvent être écrits de manière plus consises à l'aide des crochets: fruits = [ \apple, \orange, \pear ] -# Vous pouvez également utiliser la syntaxe suivante, à l'aide d'espaces, pour +# Vous pouvez également utiliser la syntaxe suivante, à l'aide d'espaces, pour # créer votre liste de valeurs: fruits = <[ apple orange pear ]> # Vous pouvez récupérer une entrée à l'aide de son index: fruits[0] # => "apple" -# Les objets sont une collection non ordonnées de paires clé/valeur, et +# Les objets sont une collection non ordonnées de paires clé/valeur, et # d'autres choses (que nous verrons plus tard). person = name: "Christina" @@ -64694,7 +64694,7 @@ person = * "kittens" * "and other cute stuff" -# A nouveau, vous pouvez utiliser une expression plus consise à l'aide des +# A nouveau, vous pouvez utiliser une expression plus consise à l'aide des # accolades: person = {name: "Christina", likes: ["kittens", "and other cute stuff"]} @@ -64729,8 +64729,8 @@ funRE = // # Les comparaisons sont presque identiques, à l'exception que `==` équivaut au -# `===` de JS, là où le `==` de JS est `~=` en LiveScript, et `===` active la -# comparaison d'objets et de tableaux, ainsi que les comparaisons strictes +# `===` de JS, là où le `==` de JS est `~=` en LiveScript, et `===` active la +# comparaison d'objets et de tableaux, ainsi que les comparaisons strictes # (sans conversion de type) 2 == 2 # => true 2 == "2" # => false @@ -64745,7 +64745,7 @@ funRE = // # Les opérateurs suivants sont également disponibles: <, <=, > et >= -# Les valeurs logiques peuvent être combinéees grâce aux opérateurs logiques +# Les valeurs logiques peuvent être combinéees grâce aux opérateurs logiques # `or`, `and` et `not` true and false # => false false or true # => true @@ -64760,30 +64760,30 @@ not false # => true ######################################################################## ## 3. Fonctions -######################################################################## +######################################################################## -# Puisque LiveScript est fonctionnel, vous vous attendez à une bonne prise en -# charge des fonctions. En LiveScript, il est encore plus évident que les +# Puisque LiveScript est fonctionnel, vous vous attendez à une bonne prise en +# charge des fonctions. En LiveScript, il est encore plus évident que les # fonctions sont de premier ordre: add = (left, right) -> left + right add 1, 2 # => 3 -# Les fonctions qui ne prennent pas d'arguments peuvent être appelées avec un +# Les fonctions qui ne prennent pas d'arguments peuvent être appelées avec un # point d'exclamation! two = -> 2 two! # LiveScript utilise l'environnement de la fonction, comme JavaScript. -# A l'inverse de JavaScript, le `=` fonctionne comme un opérateur de +# A l'inverse de JavaScript, le `=` fonctionne comme un opérateur de # déclaration, et il déclarera toujours la variable située à gauche (sauf si -# la variable a été déclarée dans l'environnement parent). +# la variable a été déclarée dans l'environnement parent). -# L'opérateur `:=` est disponible pour réutiliser un nom provenant de +# L'opérateur `:=` est disponible pour réutiliser un nom provenant de # l'environnement parent. -# Vous pouvez extraire les arguments d'une fonction pour récupérer -# rapidement les valeurs qui vous intéressent dans une structure de données +# Vous pouvez extraire les arguments d'une fonction pour récupérer +# rapidement les valeurs qui vous intéressent dans une structure de données # complexe: tail = ([head, ...rest]) -> rest tail [1, 2, 3] # => [2, 3] @@ -64793,7 +64793,7 @@ tail [1, 2, 3] # => [2, 3] foo = (a = 1, b = 2) -> a + b foo! # => 3 -# You pouvez utiliser cela pour cloner un argument en particulier pour éviter +# You pouvez utiliser cela pour cloner un argument en particulier pour éviter # les effets secondaires. Par exemple: copy = (^^target, source) -> for k,v of source => target[k] = v @@ -64813,17 +64813,17 @@ add1 2 # => 3 identity = -> it identity 1 # => 1 -# Les opérateurs ne sont pas des fonctions en LiveScript, mais vous pouvez +# Les opérateurs ne sont pas des fonctions en LiveScript, mais vous pouvez # facilement les transformer en fonction: divide-by-two = (/ 2) [2, 4, 8, 16].map(divide-by-two).reduce (+) -# Comme dans tout bon langage fonctionnel, vous pouvez créer des fonctions +# Comme dans tout bon langage fonctionnel, vous pouvez créer des fonctions # composées d'autres fonctions: double-minus-one = (- 1) . (* 2) # En plus de la formule mathématique `f . g`, vous avez les opérateurs `>>` -# et `<<`, qui décrivent l'ordre d'application des fonctions composées. +# et `<<`, qui décrivent l'ordre d'application des fonctions composées. double-minus-one = (* 2) >> (- 1) double-minus-one = (- 1) << (* 2) @@ -64836,7 +64836,7 @@ map = (f, xs) --> xs.map f # La version sans pipe correspond à: ((map (* 2)) [1, 2, 3]) -# You pouvez aussi choisir où vous voulez que la valeur soit placée, en +# You pouvez aussi choisir où vous voulez que la valeur soit placée, en # marquant la position avec un tiret bas (_): reduce = (f, xs, initial) --> xs.reduce f, initial [1 2 3] |> reduce (+), _, 0 # => 6 @@ -64850,7 +64850,7 @@ div-by-two 4 # => 2 # Pour conclure, LiveScript vous permet d'utiliser les fonctions de rappel. -# (mais vous devriez essayer des approches plus fonctionnelles, comme +# (mais vous devriez essayer des approches plus fonctionnelles, comme # Promises). # Un fonction de rappel est une fonction qui est passée en argument à une autre # fonction: @@ -64883,7 +64883,7 @@ x = switch | otherwise => \object # `otherwise` et `_` correspondent. # Le corps des fonctions, les déclarations et les assignements disposent d'un -# `switch` implicite, donc vous n'avez pas besoin de le réécrire: +# `switch` implicite, donc vous n'avez pas besoin de le réécrire: take = (n, [x, ...xs]) --> | n == 0 => [] | _ => [x] ++ take (n - 1), xs @@ -64894,7 +64894,7 @@ take = (n, [x, ...xs]) --> ######################################################################## # Comme en python, vous allez pouvoir utiliser les listes en compréhension, -# ce qui permet de générer rapidement et de manière élégante une liste de +# ce qui permet de générer rapidement et de manière élégante une liste de # valeurs: oneToTwenty = [1 to 20] evens = [x for x in oneToTwenty when x % 2 == 0] @@ -64938,7 +64938,7 @@ kitten.hug! # => "*Mei (a cat) is hugged*" ## Lectures complémentaires -Il y a beaucoup plus de choses à dire sur LiveScript, mais ce guide devrait +Il y a beaucoup plus de choses à dire sur LiveScript, mais ce guide devrait suffire pour démarrer l'écriture de petites fonctionnalités. Le [site officiel](http://livescript.net/) dispose de beaucoup d'information, ainsi que d'un compilateur en ligne vous permettant de tester le langage! @@ -64959,7 +64959,7 @@ lang: fr-fr -- Les commentaires unilignes commencent par un double tiret. --[[ - Les doubles crochets à la suite du double tiret + Les doubles crochets à la suite du double tiret permettent d'insérer des commentaires multilignes. --]] @@ -65070,7 +65070,7 @@ end x, y = bar('zaphod') --> affiche "zaphod nil nil" -- x = 4, y = 8, les valeurs 15 à 42 sont ignorées. --- Les fonctions sont des valeurs de première classe +-- Les fonctions sont des valeurs de première classe -- et peuvent être locales/globales. -- Les déclarations suivantes sont identiques: function f(x) return x * x end @@ -65086,7 +65086,7 @@ local g = function(x) return math.sin(x) end -- À moins de déclarer la fonction auparavant: local g; g = function (x) return math.sin(x) end --- À propos, les fonctions trigonométriques interprètent +-- À propos, les fonctions trigonométriques interprètent -- leurs arguments en radians. print(math.cos(math.pi)) -- affiche "-1" print(math.sin(math.pi)) -- affiche "0" @@ -65197,7 +65197,7 @@ myFavs = {food = 'pizza'} setmetatable(myFavs, {__index = defaultFavs}) eatenBy = myFavs.animal -- Affiche "gru"! merci à la métatable! --- Ainsi donc, un accès direct à une valeur dans une table via une clé +-- Ainsi donc, un accès direct à une valeur dans une table via une clé -- inexistante (ce qui normalement retourne "nil") conduira à exploiter -- le champ __index de la métatable. Cela peut être récursif. @@ -65228,7 +65228,7 @@ eatenBy = myFavs.animal -- Affiche "gru"! merci à la métatable! ---------------------------------------------------- -- Lua n'implémente pas d'orienté objet par défaut. --- Mais il reste possible d'imiter de plusieurs manières +-- Mais il reste possible d'imiter de plusieurs manières -- le concept de "classe" grâce aux tables et aux métatables. -- L'explication pour l'exemple qui suit vient juste après. @@ -65249,9 +65249,9 @@ mrDog = Dog:new() -- 7. mrDog:makeSound() -- 'Je dis: woof! -- 8. -- 1. Dog agit comme une classe; c'est une simple table. --- 2. L'expression tbl:fn(...) est identique à +-- 2. L'expression tbl:fn(...) est identique à -- tbl.fn(self, ...) --- La notation : permet de passer par défaut un premier +-- La notation : permet de passer par défaut un premier -- argument appelé "self" à la fonction tbl.fn -- Voir 7 & 8 ci-après pour comprendre comment self prend -- sa valeur. @@ -65335,7 +65335,7 @@ local mod = (function () end)() -- Comme si le contenu de mod.lua était enveloppé dans le corps d'une fonction, --- si bien que les variables locales contenues dans mod.lua sont +-- si bien que les variables locales contenues dans mod.lua sont -- inaccessibles en dehors de ce module. -- Le code suivant fonctionne car mod = M (dans mod.lua): @@ -65370,7 +65370,7 @@ g() -- Affiche 343; Rien n'est affiché avant cet appel. *Les références qui suivent sont en Anglais.* -Les sujets non abordés dans ce tutoriel sont couverts en intégralité par +Les sujets non abordés dans ce tutoriel sont couverts en intégralité par les librairies standard: * La librairie string @@ -65389,7 +65389,7 @@ Autres références complémentaires: A propos, ce fichier est exécutable. Sauvegardez-le sous le nom *learn.lua* et exécutez-le avec la commande `lua learn.lua` ! -Ce tutoriel a été originalement écrit pour tylerneylon.com et est aussi +Ce tutoriel a été originalement écrit pour tylerneylon.com et est aussi disponible en tant que gist. Il a été traduit en français par Roland Yonaba (voir son github). @@ -65674,21 +65674,21 @@ 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). -Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" +Faites moi autant de retours que vous voulez! Sentez vous libre de "forker" et envoyer des pull request! ```markdown - - @@ -65703,8 +65703,8 @@ spécifiques à un parser. --> ##### Ceci est un
    ###### Ceci est un
    - Ceci est un h1 @@ -65726,12 +65726,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? @@ -65742,20 +65742,20 @@ Je suis toujours dans le paragraphe 2! Puis là, eh oui, le paragraphe 3! - -J'ai deux espaces vides à la fin (sélectionnez moi pour les voir). +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 `>`. @@ -65765,7 +65765,7 @@ Bigre, il y a un
    au dessus de moi! > Classe et facile, pas vrai? - * Item @@ -65790,7 +65790,7 @@ ou 2. Item deux 3. Item trois - 1. Item un @@ -65807,10 +65807,10 @@ les bons chiffres. Ceci dit, cette variante perd en clarté.--> * Sub-item 4. Item quatre - -Les [ ] ci dessous, n'ayant pas de [ x ], +Les [ ] ci dessous, n'ayant pas de [ x ], deviendront des cases à cocher HTML non-cochées. - [ ] Première tache à réaliser. @@ -65819,13 +65819,13 @@ La case suivante sera une case à cocher HTML cochée. - [x] Ça ... c'est fait! - echo "Ça, c'est du Code!"; var Ça = "aussi !"; - my_array.each do |item| @@ -65836,22 +65836,22 @@ fonctionne aussi à l'intérieur du bloc de code --> La fonction `run()` ne vous oblige pas à aller courir! - -\`\`\`ruby - def foobar puts "Hello world!" end \`\`\` -<-- Pas besoin d'indentation pour le code juste au dessus, de plus, GitHub +<-- 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 ``` --> - *** @@ -65860,15 +65860,15 @@ avec ou sans espaces entre chaque un. --> **************** - [Clic moi!](http://test.com/) - [Clic moi!](http://test.com/ "Lien vers Test.com") @@ -65885,9 +65885,9 @@ Pour ajouter un attribut Title, collez le entre guillemets, avec le lien. [link1]: http://test.com/ "Cool!" [foobar]: http://foobar.biz/ "Alright!" - 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 : +Pour taper *ce texte* entouré d'astérisques mais pas en italique : Tapez \*ce texte\*. @@ -65949,7 +65949,7 @@ 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, + 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. --- language: Objective-C @@ -66000,16 +66000,16 @@ int main (int argc, const char * argv[]) // NSLog() permet d'afficher une chaine de caractères dans la console // Affiche la chaine de caractères "Bonjour Tous Le Monde !" - NSLog(@"Bonjour tous le Monde !"); - + NSLog(@"Bonjour tous le Monde !"); + /////////////////////////////////////// // Les Types & Les Variables /////////////////////////////////////// - + // La déclaration de primitive int maPrimitive1 = 1; long maPrimitive2 = 234554664565; - + // La déclaration d'objet // Il faut mettre un astérisque devant la déclaration d'objet fortement typé MaClasse *monObject1 = nil; // Typage fort @@ -66017,15 +66017,15 @@ int main (int argc, const char * argv[]) // 'description' est une méthode qui permet de retourner un aperçut de l'objet sous forme textuelle // La méthode 'description' est appelée par défaut quand on utilise le paramètre '%@' NSLog(@"%@ and %@", monObject1, [monObject2 description]); // Affiche "(null) et (null)" - + // Les chaines de caractères NSString *chaineMonde = @"Monde"; - NSLog(@"Bonjour tous le %@ !", chaineMonde); // affiche => "Bonjour Tous Le Monde !" + NSLog(@"Bonjour tous le %@ !", chaineMonde); // affiche => "Bonjour Tous Le Monde !" // NSMutableString est une chaine mutable NSMutableString *chaineMutable = [NSMutableString stringWithString:@"Bonjour tous le"]; [chaineMutable appendString:@" Monde !"]; NSLog(@"%@", chaineMutable); // affiche => "Bonjour Tous Le Monde !" - + // Les caractères NSNumber *laLettreZSousFormeDeNombre = @'Z'; char laLettreZ = [laLettreZSousFormeDeNombre charValue]; // ou 'Z' @@ -66035,15 +66035,15 @@ int main (int argc, const char * argv[]) NSNumber *nombreQuaranteDeux = @42; int quaranteDeux = [nombreQuaranteDeux intValue]; // ou 42 NSLog(@"%i", quaranteDeux); - + NSNumber *nombreQuaranteDeuxnonSigne = @42U; unsigned int quaranteDeuxnonSigne = [nombreQuaranteDeuxnonSigne unsignedIntValue]; NSLog(@"%u", fortyTwoUnsigned); - + NSNumber *nombreQuaranteDeuxCourt = [NSNumber numberWithShort:42]; short quaranteDeuxCourt = [nombreQuaranteDeuxCourt shortValue]; // ou 42 NSLog(@"%hi", fortyTwoShort); - + NSNumber *nombreQuaranteDeuxLong = @42L; long quaranteDeuxLong = [nombreQuaranteDeuxLong longValue]; // ou 42 NSLog(@"%li", fortyTwoLong); @@ -66053,7 +66053,7 @@ int main (int argc, const char * argv[]) float piFlottant = [nombrePiFlottant floatValue]; // ou 3.141592654f NSLog(@"%f", piFlottant); // affiche => 3.141592654 NSLog(@"%5.2f", piFlottant); // affiche => " 3.14" - + NSNumber *nombrePiDouble = @3.1415926535; double piDouble = [nombrePiDouble doubleValue]; // ou 3.1415926535 NSLog(@"%f", piDouble); @@ -66065,7 +66065,7 @@ int main (int argc, const char * argv[]) NSDecimalNumber *decNumDeux = [NSDecimalNumber decimalNumberWithString:@"5.002"]; // NSDecimalNumber ne permet pas d'utiliser les opérations standards (+, -, *, /) // Il faut utiliser les méthodes suivantes à la place : - [decNumUn decimalNumberByAdding:decNumDeux]; + [decNumUn decimalNumberByAdding:decNumDeux]; [decNumUn decimalNumberBySubtracting:decNumDeux]; [decNumUn decimalNumberByMultiplyingBy:decNumDeux]; [decNumUn decimalNumberByDividingBy:decNumDeux]; @@ -66109,7 +66109,7 @@ int main (int argc, const char * argv[]) // Un ensemble ne peut contenir de duplicatas contrairement aux NSArray NSSet *ensemble = [NSSet setWithObjects:@"Salut", @"Salut", @"Monde", nil]; NSLog(@"%@", ensemble); // affiche => {(Salut, Monde)} (Pas forcément dans le même ordre) - // NSMutableSet est un ensemble mutable + // NSMutableSet est un ensemble mutable NSMutableSet *ensembleMutable = [NSMutableSet setWithCapacity:2]; [ensembleMutable addObject:@"Salut"]; [ensembleMutable addObject:@"Salut"]; @@ -66118,7 +66118,7 @@ int main (int argc, const char * argv[]) /////////////////////////////////////// // Les Operateurs /////////////////////////////////////// - + // Les opérateurs sont pareil qu'en C // Par exemple : 2 + 5; // => 7 @@ -66135,7 +66135,7 @@ int main (int argc, const char * argv[]) // Les Structures de Contrôle /////////////////////////////////////// - // Structure "Si-Sinon" (If-Else) + // Structure "Si-Sinon" (If-Else) if (NO) { NSLog(@"Je ne suis jamais affiché"); @@ -66163,13 +66163,13 @@ int main (int argc, const char * argv[]) NSLog(@"Je suis affiché"); } break; } - + // Structure de boucle "Tant Que" (While) int ii = 0; while (ii < 4) { NSLog(@"%d,", ii++); // ii++ incrémente ii après avoir utilisé sa valeur - } // => affiche "0," + } // => affiche "0," // "1," // "2," // "3," @@ -66179,17 +66179,17 @@ int main (int argc, const char * argv[]) for (jj=0; jj < 4; jj++) { NSLog(@"%d,", jj); - } // => affiche "0," + } // => affiche "0," // "1," // "2," // "3," - + // Structure de boucle "Pour Chaque" (Foreach) NSArray *valeurs = @[@0, @1, @2, @3]; for (NSNumber *valeur in valeurs) { NSLog(@"%@,", valeur); - } // => affiche "0," + } // => affiche "0," // "1," // "2," // "3," @@ -66207,16 +66207,16 @@ int main (int argc, const char * argv[]) NSLog(@"Finalement"); } // => affiche "Une exception est survenue : Fichier non trouvé" // "Finalement" - + /////////////////////////////////////// // Les Objets /////////////////////////////////////// - + // Définis et créé une instance d'objet en allouant un espace mémoire puis en // l'initialisant. Un objet n'est pas complétement fonctionnel tant que les deux // étapes précédentes ne sont pas terminées MaClass *monObjet = [[MaClass alloc] init]; - + // L'Objet en Objective-C est basé sur le principe d'envoie de message et non sur // celui d'appel de méthode comme la plupart des autres langages // C'est un détail important car cela veut dire que l'on peut envoyer un message @@ -66229,7 +66229,7 @@ int main (int argc, const char * argv[]) // Fin de l'@autoreleasepool } - + // Fin du programme return 0; } @@ -66252,7 +66252,7 @@ int main (int argc, const char * argv[]) { int nombre; // Accès protégé par défaut (équivalent à '@protected int nombre;') @private id donnee; // Accès privé (il est plus pratique de le faire dans l'implémentation) - NSString *nom; + NSString *nom; } // Les propriétés permettent de générer les accésseurs/affecteurs publiques à la compilation // Par défaut, le nom de l'affecteur est la chaine 'set' suivi par le nom de la @property @@ -66263,7 +66263,7 @@ int main (int argc, const char * argv[]) @property (readonly) NSString *roString; // Vous pouvez aussi personnaliser les noms des accésseurs ou des affecteurs @property (getter=longeurGet, setter=longeurSet:) int longeur; - + // Methodes +/- (TypeDeRetour)signatureDeLaMethode:(TypeDuParametre *)nomDuParametre; @@ -66284,11 +66284,11 @@ int main (int argc, const char * argv[]) // Voici un exemple d'utilisation de MaClasse MaClasse *maClasse = [[MaClasse alloc] init]; // créer une instance de MaClasse -[maClasse setNombre:10]; +[maClasse setNombre:10]; NSLog(@"%d", [maClasse nombre]); // affiche => 10 [myClass longeurSet:32]; NSLog(@"%i", [maClasse longeurGet]); // affiche => 32 -// Pour des raisons pratiques vous pouvez aussi utiliser la notation en point pour accéder aux +// Pour des raisons pratiques vous pouvez aussi utiliser la notation en point pour accéder aux // variables d'instances : maClasse.nombre = 45; NSLog(@"%i", maClasse.nombre); // maClasse => 45 @@ -66305,10 +66305,10 @@ NSString *stringDepuisUneInstanceDeMethode = [maClasse methodeInstanceAvecUnPara // Ils sont utilisés pour appeler des méthodes de classe et avoir des pointeurs de fonctions // facilement manipulable // SEL est un type de donnée et @selector retourne un selecteur à partir d'un nom de methode -SEL selecteur = @selector(methodeInstanceAvecUnParametre:puisUnDeuxieme:); +SEL selecteur = @selector(methodeInstanceAvecUnParametre:puisUnDeuxieme:); if ([maClasse respondsToSelector:selecteur]) { // Vérifie si la classe possède la méthode // Met les arguments de la méthode dans un seul objet pour l'envoyer via la fonction - // performSelector:withObject: + // performSelector:withObject: NSArray *arguments = [NSArray arrayWithObjects:@"Hello", @4, nil]; [myClass performSelector:selectorVar withObject:arguments]; // Appele la méthode via le sélecteur } @@ -66328,16 +66328,16 @@ else { _nombre = 5; // Accès d'une variable définie dans le fichier d'implémentation : distance = 18; -// Pour utiliser la variable définie par l'intermédiaire de @property, il faut utiliser @synthesize +// Pour utiliser la variable définie par l'intermédiaire de @property, il faut utiliser @synthesize // qui permet de créer les affecteurs et les accésseurs correspondants : @synthesize roString = _roString; // _roString est maintenant disponible dans l'implementation -// A l'inverse dela méthode 'init' qui est appelée lors de la création d'un objet, la fonction +// A l'inverse dela méthode 'init' qui est appelée lors de la création d'un objet, la fonction // 'dealloc' est appelée quand l'objet est supprimé - (void)dealloc { - [hauteur release]; // Si vous n'utilisez pas ARC, pensez bien à supprimer l'objet - [super dealloc]; // et à appeler la méthode 'dealloc' de la classe parent + [hauteur release]; // Si vous n'utilisez pas ARC, pensez bien à supprimer l'objet + [super dealloc]; // et à appeler la méthode 'dealloc' de la classe parent } // Les constructeurs sont des fonctions qui permettent d'instancier un objet @@ -66353,7 +66353,7 @@ distance = 18; // Vous pouvez aussi créer des constructeurs avec des arguments // Attention : chaque nom de constructeur doit absolument commencer par 'init' -- (id)initAvecUneDistance:(int)distanceParDefault +- (id)initAvecUneDistance:(int)distanceParDefault { if ((self = [super init])) { @@ -66385,7 +66385,7 @@ distance = 18; return @42; } -// Pour créer une méthode privée, il faut la définir dans l'implementation et non pas dans +// Pour créer une méthode privée, il faut la définir dans l'implementation et non pas dans // l'interface - (NSNumber *)methodePrivee { @@ -66415,7 +66415,7 @@ distance = 18; /////////////////////////////////////// // Gestion de la mémoire /////////////////////////////////////// -/* +/* À chaque fois qu'un objet est créé dans l'application, un bloc mémoire doit être alloué. Quand l'application en a fini avec cet objet, la mémoire doit être libérée afin d'éviter les fuites mémoires @@ -66439,7 +66439,7 @@ MaClasse *classeVar = [MyClass alloc]; // 'alloc' incrémente le compteur de ré MaClasse *nouvelleVar = [classVar retain]; [classeVar autorelease]; // Supprime l'appartenance de l'objet à la fin du bloc -// Les @property peuvent utiliser 'retain' et 'assign' +// Les @property peuvent utiliser 'retain' et 'assign' @property (retain) MaClasse *instance; // Libère l'ancienne valeur et retient la nouvelle @property (assign) NSSet *set; // Pointeur vers la valeur sans retenir/libérer l'ancienne valeur @@ -66448,7 +66448,7 @@ MaClasse *nouvelleVar = [classVar retain]; // référence automatique (Automatic Reference Counting en anglais) // ARC est une fonctionnalité du compilateur qui permet d'ajouter les 'retain', 'release' et 'autorelease' // automatiquement. Cela veut dire que lorsque vous utilisez ARC vous ne devez plus utiliser ces mot-clés -MaClasse *arcMaClasse = [[MaClasse alloc] init]; +MaClasse *arcMaClasse = [[MaClasse alloc] init]; // ... code utilisant arcMaClasse // Sans ARC, vous auriez dû appeler [arcMaClasse release] après avoir utilisé l'objet. Mais avec ARC // activé il n'est plus nécessaire de le faire car le compilateur ajoutera l'expréssion automatiquement @@ -66585,7 +66585,7 @@ for my $element (@elements) { # de la plupart des fonctions pour en simplifier l'écriture. # Dans l'exemple suivant, $_ prends successivement la valeur de -# chaque élément de la liste. +# chaque élément de la liste. for (@elements) { print; # affiche le contenu de $_ @@ -67764,7 +67764,7 @@ class Human(object): def get_species(cls): return cls.species - # Une méthode statique est appellée sans référence à une classe ou à une instance + # Une méthode statique est appellée sans référence à une classe ou à une instance @staticmethod def grunt(): return "*grunt*" @@ -67850,7 +67850,7 @@ filename: learnpython3-fr.py lang: fr-fr --- -Python a été créé par Guido Van Rossum au début des années 90. C'est maintenant un des +Python a été créé par Guido Van Rossum au début des années 90. C'est maintenant un des langages les populaires. Je suis tombé amoureux de Python pour la clarté de sa syntaxe. C'est tout simplement du pseudo-code exécutable. @@ -68112,7 +68112,7 @@ filled_dict["one"] # => 1 list(filled_dict.keys()) # => ["three", "two", "one"] -# On obtient toutes les valeurs sous forme d'un itérable avec "values()". +# On obtient toutes les valeurs sous forme d'un itérable avec "values()". # Là aussi, il faut utiliser list() pour avoir une liste. # Note : l'ordre n'est toujours pas garanti. list(filled_dict.values()) # => [3, 2, 1] @@ -68343,7 +68343,7 @@ all_the_args(1, 2, a=3, b=4) affiche: """ # En appelant des fonctions, on peut aussi faire l'inverse : -# utiliser * pour étendre un tuple de paramètres +# utiliser * pour étendre un tuple de paramètres # et ** pour étendre un dictionnaire d'arguments. args = (1, 2, 3, 4) kwargs = {"a": 3, "b": 4} @@ -68503,7 +68503,7 @@ def double_numbers(iterable): # Au lieu de générer et retourner toutes les valeurs en une fois, il en crée une à chaque # itération. Cela signifie que les valeurs supérieures à 15 ne seront pas traîtées par # double_numbers. -# Note : range est un générateur aussi. +# Note : range est un générateur aussi. # Créer une liste 1-900000000 prendrait beaucoup de temps # On met un underscore à la fin d'un nom de variable normalement réservé par Python. range_ = range(1, 900000000) @@ -70569,7 +70569,7 @@ fn main() {     let f: f64 = 1.3f64;     // Inférence de type -    // La plupart du temps, le compilateur Rust peut déduire quel est le type +    // La plupart du temps, le compilateur Rust peut déduire quel est le type // de variable, donc vous n'avez pas à écrire une annotation de type explicite.     // Tout au long de ce tutoriel, les types sont explicitement annotées dans // de nombreux endroits, mais seulement à des fins de démonstration. @@ -71620,7 +71620,7 @@ interface Person { move(): void; } -// Un objet implémentant l'interface "Person" peut être traité comme +// Un objet implémentant l'interface "Person" peut être traité comme // une Person car il a les propriétés "name" et "move" var p: Person = { name: "Bobby", move: () => {} }; // Des objets implémentants la propriété optionnelle : @@ -71742,7 +71742,7 @@ lang: fr-fr [Vim](http://www.vim.org) (Vi IMproved) est le clone le plus populaire de l'éditeur de texte vi sous Unix. Vim est un éditeur de texte omniprésent sur les systèmes de type Unix, et a pour -objectif la rapidité ainsi que l'augmentation de la productivité. Il a de +objectif la rapidité ainsi que l'augmentation de la productivité. Il a de nombreux raccourcis claviers pour une navigation et une édition plus rapide. ## Navigation basique avec Vim @@ -71753,7 +71753,7 @@ nombreux raccourcis claviers pour une navigation et une édition plus rapide. :w # Sauvegarde le fichier actuel :wq # Sauvegarde le fichier actuel et quitte vim :q! # Quitte vim sans sauvegarder - # ! *force* l'exécution de :q, ce qui par conséquent + # ! *force* l'exécution de :q, ce qui par conséquent # oblige vim à quitter sans sauvegarder :x # Sauvegarde le fichier et quitte vim (raccourcis de :wq) @@ -71789,7 +71789,7 @@ nombreux raccourcis claviers pour une navigation et une édition plus rapide. # Par exemple f< # Se déplace en avant jusqu'à < t< # Se déplace en avant juste avant < - + # Se déplacer dans un mot w # Avance d'un mot @@ -71846,7 +71846,7 @@ Quelques exemples importants de 'Verbes', 'Modificateurs', et de 'Noms' : ``` # 'Verbes' - + d # Supprime c # Transforme y # Copie @@ -71868,7 +71868,7 @@ Quelques exemples importants de 'Verbes', 'Modificateurs', et de 'Noms' : s # Phrase p # Paragraphe b # Bloc - + # Exemple de 'phrases' ou commandes d2w # Supprime 2 mots @@ -71894,7 +71894,7 @@ Quelques exemples importants de 'Verbes', 'Modificateurs', et de 'Noms' : Les macros sont des actions enregistrables. Quand on commence à enregistrer une macro, Vim enregistre **toutes** les actions et les commandes que vous utilisez, jusqu'à ce que vous arrêtiez d'enregistrer. -Lorsque vous appelez une macro, elle applique exactement les mêmes actions et +Lorsque vous appelez une macro, elle applique exactement les mêmes actions et commandes sur le texte sélectionné. ``` @@ -71911,7 +71911,7 @@ Voici un exemple de fichier ~/.vimrc : ``` " Exemple de ~/.vimrc -" 2015.10 +" 2015.10 " Nécessaire à Vim pour être 'iMproved' set nocompatible @@ -71980,7 +71980,7 @@ Le langage Wolfram est utilisé dans les programmes suivants : * La ligne de commandes interactive noyau du Raspberry Pi, mais elle ne peut pas gérer des éléments graphiques. * _Mathematica_, un éditeur de texte riche spécialisé pour les mathématiques : -appuyer sur `Shift + Entrée` dans une cellule de code crée un nouvelle cellule +appuyer sur `Shift + Entrée` dans une cellule de code crée un nouvelle cellule contenant le résultat. * _Wolfram Wokbench_, une variante d'Eclipse spécialisée pour le langage Wolfram. @@ -72106,7 +72106,7 @@ FoldList[Plus, 0, liste] (* {0, 1, 3, 6, 10}, variante de la fonction précédente qui donne aussi les résultats intermédiaires *) Append[liste, 5] (* {1, 2, 3, 4, 5}, liste n'est pas modifiée... *) -Prepend[liste, 5] (* {5, 1, 2, 3, 4}, ... mais elle peut l'être en +Prepend[liste, 5] (* {5, 1, 2, 3, 4}, ... mais elle peut l'être en écrivant "liste = " *) Join[liste, {3, 4}] (* {1, 2, 3, 4, 3, 4} *) liste[[2]] = 5 (* {1, 5, 3, 4}, ceci modifie bien la liste *) @@ -72177,10 +72177,10 @@ Contrairement à HTML, XML ne spécifie pas comment afficher ou formater les inf @@ -72190,8 +72190,8 @@ On crée les nœuds avec des balises d'ouverture / fermeture, et les enfants son 2 - Les éléments -> les informations pures. C'est ce que l'analyseur retrouvera du fichier XML. Les éléments apparaissent entre les balises d'ouverture et de fermeture, sans parenthèses. --> - - + + ordinateur.gif @@ -72200,18 +72200,18 @@ On crée les nœuds avec des balises d'ouverture / fermeture, et les enfants son * Un document bien formaté & le validation -Un document XML est bien formaté s'il est syntaxiquement correct. -Cependant, il est possible d'injecter plus de contraintes dans le document, +Un document XML est bien formaté s'il est syntaxiquement correct. +Cependant, il est possible d'injecter plus de contraintes dans le document, en utilisant les définitions de documents, tels que les schémas DTD et XML. -Un document XML qui suit une définition de document est dit valide, +Un document XML qui suit une définition de document est dit valide, en ce qui concerne ce document. Avec cet outil, vous pouvez vérifier les données XML en dehors de la logique de l'application. ```xml - @@ -72235,9 +72235,9 @@ Avec cet outil, vous pouvez vérifier les données XML en dehors de la logique d ]> @@ -72269,8 +72269,8 @@ contributors: lang: fr-fr --- -Proposé à l'origine par Clark Evans en Mai 2001, YAML est un un format de -représentation de données par sérialisation, conçu pour être aisément +Proposé à l'origine par Clark Evans en Mai 2001, YAML est un un format de +représentation de données par sérialisation, conçu pour être aisément modifiable et lisible par nous-mêmes, les humains. YAML est plus concis que le XML auquel il est parfois comparé par ceux qui le @@ -72308,7 +72308,7 @@ toutefois: "Une chaîne, peut être contenue entre guillemets." # Les chaînes couvrant plusieurs lignes, peuvent être écrites au choix, # comme un "bloc littéral" (avec '|') ou bien un "bloc replié" (avec '>'). bloc_littéral: | - Tout ce bloc de texte sera la valeur de la clé "bloc_littéral", + Tout ce bloc de texte sera la valeur de la clé "bloc_littéral", avec préservation des retours à la ligne. Le littéral continue jusqu'à ce que l'indentation soit annulée. @@ -72316,7 +72316,7 @@ bloc_littéral: | Toutes lignes qui seraient "davantage indentées" conservent leur indentation, constituée de 4 espaces. bloc_replié: > - Tout ce bloc de texte sera la valeur de la clé "bloc_replié", mais + Tout ce bloc de texte sera la valeur de la clé "bloc_replié", mais cette fois-ci, toutes les nouvelles lignes deviendront un simple espace. Les lignes vides, comme ci-dessus, seront converties en caractère de @@ -73087,11 +73087,11 @@ Version control is a system that records changes to a file(s), over time. ### Centralized Versioning vs. Distributed Versioning -* Centralized version control focuses on synchronizing, tracking, and backing +* Centralized version control focuses on synchronizing, tracking, and backing up files. -* Distributed version control focuses on sharing changes. Every change has a +* Distributed version control focuses on sharing changes. Every change has a unique id. -* Distributed systems have no defined structure. You could easily have a SVN +* Distributed systems have no defined structure. You could easily have a SVN style, centralized system, with git. [Additional Information](http://git-scm.com/book/en/Getting-Started-About-Version-Control) @@ -73118,7 +73118,7 @@ A git repository is comprised of the .git directory & working tree. ### .git Directory (component of repository) -The .git directory contains all the configurations, logs, branches, HEAD, and +The .git directory contains all the configurations, logs, branches, HEAD, and more. [Detailed List.](http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html) @@ -73129,15 +73129,15 @@ referred to as your working directory. ### Index (component of .git dir) -The Index is the staging area in git. It's basically a layer that separates -your working tree from the Git repository. This gives developers more power +The Index is the staging area in git. It's basically a layer that separates +your working tree from the Git repository. This gives developers more power over what gets sent to the Git repository. ### Commit -A git commit is a snapshot of a set of changes, or manipulations to your -Working Tree. For example, if you added 5 files, and removed 2 others, these -changes will be contained in a commit (or snapshot). This commit can then be +A git commit is a snapshot of a set of changes, or manipulations to your +Working Tree. For example, if you added 5 files, and removed 2 others, these +changes will be contained in a commit (or snapshot). This commit can then be pushed to other repositories, or not! ### Branch @@ -73152,13 +73152,13 @@ functionality to mark release points (v1.0, and so on) ### HEAD and head (component of .git dir) -HEAD is a pointer that points to the current branch. A repository only has 1 -*active* HEAD. -head is a pointer that points to any commit. A repository can have any number +HEAD is a pointer that points to the current branch. A repository only has 1 +*active* HEAD. +head is a pointer that points to any commit. A repository can have any number of heads. ### Stages of Git -* Modified - Changes have been made to a file but file has not been committed +* Modified - Changes have been made to a file but file has not been committed to Git Database yet * Staged - Marks a modified file to go into your next commit snapshot * Committed - Files have been committed to the Git Database @@ -73172,7 +73172,7 @@ to Git Database yet ### init -Create an empty Git repository. The Git repository's settings, stored +Create an empty Git repository. The Git repository's settings, stored information, and more is stored in a directory (a folder) named ".git". ```bash @@ -73240,7 +73240,7 @@ $ git help status ### add -To add files to the staging area/index. If you do not `git add` new files to +To add files to the staging area/index. If you do not `git add` new files to the staging area/index, they will not be included in commits! ```bash @@ -73262,7 +73262,7 @@ working directory/repo. ### branch -Manage your branches. You can view, edit, create, delete branches using this +Manage your branches. You can view, edit, create, delete branches using this command. ```bash @@ -73311,7 +73311,7 @@ $ git push origin --tags ### checkout -Updates all files in the working tree to match the version in the index, or +Updates all files in the working tree to match the version in the index, or specified tree. ```bash @@ -73330,7 +73330,7 @@ $ git checkout -b newBranch ### clone Clones, or copies, an existing repository into a new directory. It also adds -remote-tracking branches for each branch in the cloned repo, which allows you +remote-tracking branches for each branch in the cloned repo, which allows you to push to a remote branch. ```bash @@ -73346,7 +73346,7 @@ $ git clone -b master-cn https://github.com/adambard/learnxinyminutes-docs.git - ### commit -Stores the current contents of the index in a new "commit." This commit +Stores the current contents of the index in a new "commit." This commit contains the changes made and a message created by the user. ```bash @@ -73458,11 +73458,11 @@ Pulls from a repository and merges it with another branch. $ git pull origin master # By default, git pull will update your current branch -# by merging in new changes from its remote-tracking branch +# by merging in new changes from its remote-tracking branch $ git pull # Merge in changes from remote branch and rebase -# branch commits onto your local repo, like: "git fetch , git +# branch commits onto your local repo, like: "git fetch , git # rebase /" $ git pull origin master --rebase ``` @@ -73478,7 +73478,7 @@ Push and merge changes from a branch to a remote & branch. $ git push origin master # By default, git push will push and merge changes from -# the current branch to its remote-tracking branch +# the current branch to its remote-tracking branch $ git push # To link up current local branch with a remote branch, add -u flag: @@ -73489,7 +73489,7 @@ $ git push ### stash -Stashing takes the dirty state of your working directory and saves it on a +Stashing takes the dirty state of your working directory and saves it on a stack of unfinished changes that you can reapply at any time. Let's say you've been doing some work in your git repo, but you want to pull @@ -73521,7 +73521,7 @@ nothing to commit, working directory clean ``` You can see what "hunks" you've stashed so far using `git stash list`. -Since the "hunks" are stored in a Last-In-First-Out stack, our most recent +Since the "hunks" are stored in a Last-In-First-Out stack, our most recent change will be at top. ```bash @@ -73552,7 +73552,7 @@ Now you're ready to get back to work on your stuff! ### rebase (caution) -Take all changes that were committed on one branch, and replay them onto +Take all changes that were committed on one branch, and replay them onto another branch. *Do not rebase commits that you have pushed to a public repo*. @@ -73567,7 +73567,7 @@ $ git rebase master experimentBranch ### reset (caution) Reset the current HEAD to the specified state. This allows you to undo merges, -pulls, commits, adds, and more. It's a great command but also dangerous if you +pulls, commits, adds, and more. It's a great command but also dangerous if you don't know what you are doing. ```bash @@ -73592,7 +73592,7 @@ $ git reset --hard 31f2bb1 Reflog will list most of the git commands you have done for a given time period, default 90 days. -This give you the chance to reverse any git commands that have gone wrong +This give you the chance to reverse any git commands that have gone wrong (for instance, if a rebase has broken your application). You can do this: @@ -73615,8 +73615,8 @@ ed8ddf2 HEAD@{4}: rebase -i (pick): pythonstatcomp spanish translation (#1748) ### revert -Revert can be used to undo a commit. It should not be confused with reset which -restores the state of a project to a previous point. Revert will add a new +Revert can be used to undo a commit. It should not be confused with reset which +restores the state of a project to a previous point. Revert will add a new commit which is the inverse of the specified commit, thus reverting it. ```bash @@ -73805,7 +73805,7 @@ can include line breaks.` // Same string type. file, _ := os.Create("output.txt") fmt.Fprint(file, "This is how you write to a file, by the way") file.Close() - + // Output of course counts as using a variable. fmt.Println(s, c, a4, s3, d2, m) @@ -74968,7 +74968,7 @@ $ haml input_file.haml output_file.html if book do %p This is a book - + / Adding ordered / unordered list %ul %li @@ -74988,11 +74988,11 @@ $ haml input_file.haml output_file.html %tr %th Header 1 %th Header 2 - + %tr %td Value1 %td value2 - + %tfoot %tr %td @@ -75229,9 +75229,9 @@ foo = (4*) . (10+) foo 5 -- 60 -- fixing precedence --- Haskell has an operator called `$`. This operator applies a function --- to a given parameter. In contrast to standard function application, which --- has highest possible priority of 10 and is left-associative, the `$` operator +-- Haskell has an operator called `$`. This operator applies a function +-- to a given parameter. In contrast to standard function application, which +-- has highest possible priority of 10 and is left-associative, the `$` operator -- has priority of 0 and is right-associative. Such a low priority means that -- the expression on its right is applied as the parameter to the function on its left. @@ -75249,7 +75249,7 @@ even . fib $ 7 -- false -- 5. Type signatures ---------------------------------------------------- --- Haskell has a very strong type system, and every valid expression has a type. +-- Haskell has a very strong type system, and every valid expression has a type. -- Some basic types: 5 :: Integer @@ -76771,12 +76771,12 @@ translators: - ["Robert Steed", "https://github.com/robochat"] --- -HTML stands for HyperText Markup Language. +HTML stands for HyperText Markup Language. It is a language which allows us to write pages for the world wide web. It is a markup language, it enables us to write webpages using code to indicate how text and data should be displayed. In fact, html files are simple text files. What is this markup? It is a method of organising the page's data by surrounding it with opening tags and closing tags. -This markup serves to give significance to the text that it encloses. +This markup serves to give significance to the text that it encloses. Like other computer languages, HTML has many versions. Here we will talk about HTML5. **NOTE :** You can test the different tags and elements as you progress through the tutorial on a site like [codepen](http://codepen.io/pen/) in order to see their effects, understand how they work and familiarise yourself with the language. @@ -76787,7 +76787,7 @@ This article is concerned principally with HTML syntax and some useful tips. - + @@ -76877,7 +76877,7 @@ This article is concerned principally with HTML syntax and some useful tips. HTML is written in files ending with `.html`. -## To Learn More +## To Learn More * [wikipedia](https://en.wikipedia.org/wiki/HTML) * [HTML tutorial](https://developer.mozilla.org/en-US/docs/Web/HTML) @@ -77063,7 +77063,7 @@ func learnMultiple(x, y int) (sum, prod int) { prod = x * y return Ez ugyanezzel az eredménnyel járt volna, mint a fenti sor. - Üres return esetén, az elnevezett visszatérési változók + Üres return esetén, az elnevezett visszatérési változók aktuális értékeikkel térnek vissza. */ } @@ -77161,7 +77161,7 @@ func learnFlowControl() { // ez nem fog lefutni, nincs szükség break-ekre. } // A for ciklus sem használ zárójeleket - for x := 0; x < 3; x++ { + for x := 0; x < 3; x++ { fmt.Println("iteráció", x) } // itt az x == 1. @@ -77172,8 +77172,8 @@ func learnFlowControl() { continue // soha nem fut le } - //Akárcsak a for-nál, az if-nél is lehet rövid deklarálással egy lokális változót létrehozni, - //ami a blokk összes if/else szerkezetén keresztül érvényes marad. + //Akárcsak a for-nál, az if-nél is lehet rövid deklarálással egy lokális változót létrehozni, + //ami a blokk összes if/else szerkezetén keresztül érvényes marad. if y := expensiveComputation(); y > x { x = y } @@ -77262,7 +77262,7 @@ func learnConcurrency() { // Ugyanaz a make függvény, amivel korábban szeleteket hoztunk létre. // A make allokál map-eket, szeleteket és csatornákat. c := make(chan int) - // Indítsunk három konkurens goroutine-t. A számok konkurensen lesznek + // Indítsunk három konkurens goroutine-t. A számok konkurensen lesznek // megnövelve, ha a számítógép képes rá és jól be van állítva, akkor pedig // paralellizálva/egymás mellett. Mind a 3 ugyanabba a csatornába küldi az // eredményeket. @@ -77271,7 +77271,7 @@ func learnConcurrency() { go inc(-805, c) // Beolvassuk 3x a csatornából az eredményeket és kiírjuk őket a kimenetre. // Nem lehet tudni milyen sorrendben fognak érkezni az eredmények! - fmt.Println(<-c, <-c, <-c) // hogyha a jobb oldalon csatorna van, akkor a + fmt.Println(<-c, <-c, <-c) // hogyha a jobb oldalon csatorna van, akkor a // "<-" a beolvasó/kapó operátor cs := make(chan string) // még egy csatorna, ez stringekkel kommunikál @@ -77936,11 +77936,11 @@ var f2 = function(i: number) { return i * i; } var f3 = (i: number): number => { return i * i; } // Következtetett visszatérési értékkel var f4 = (i: number) => { return i * i; } -// Következtetett visszatérési értékkel, +// Következtetett visszatérési értékkel, // ebben az egysoros formában nem szükséges a return kulcsszó var f5 = (i: number) => i * i; -// Az interfészek szerkezeti alapon működnek, vagyis minden objektum, ahol +// Az interfészek szerkezeti alapon működnek, vagyis minden objektum, ahol // jelen vannak a megfelelő mezők kompatibilis az interfésszel interface Person { name: string; @@ -77975,7 +77975,7 @@ class Point { // Konstruktor - a public/private kulcsszavak ebben a kontextusban // legenerálják a mezőkhöz szükséges kódot a konstruktorban. - // Ebben a példában az "y" ugyanúgy definiálva lesz, mint az "x", csak + // Ebben a példában az "y" ugyanúgy definiálva lesz, mint az "x", csak // kevesebb kóddal. // Alapértelmezett (default) értékek is megadhatóak. @@ -78066,7 +78066,7 @@ translators: lang: hu-hu --- -A YAML egy adat sorosító nyelv, amit úgy terveztek, hogy közvetlenül is +A YAML egy adat sorosító nyelv, amit úgy terveztek, hogy közvetlenül is olvasható és írható legyen emberi szemmel. A JSON formátum egy szigorú befoglaló halmazát alkotja, kiegészítve azt @@ -78106,7 +78106,7 @@ literal_block: | Az ilyen sztringet az indentáció visszahúzása zárja le, a behúzás pedig eltávolításra kerül. - A 'még jobban' behúzott részek megtartják a behúzásukat - + A 'még jobban' behúzott részek megtartják a behúzásukat - ezeknek a soroknak 4 szóköz behúzása lesz. folded_style: > Az az egész szöveg-blokk lesz az értéke a 'folded_style' kulcsnak, de @@ -78301,7 +78301,7 @@ True ; => True (print "And it also has:" props)) (something-fancy "My horse" "amazing" :mane "spectacular") - + ; you use apply instead of the splat operators: (apply something-fancy ["My horse" "amazing"] { "mane" "spectacular" }) @@ -78430,7 +78430,7 @@ Kepala Dokumen Kepala Dokumen adalah opsional dan tidak dapat berisi baris kosong. Harus diimbangi konten, setidaknya satu baris kosong. -Hanya Judul +Hanya Judul ``` = Judul Dokumen @@ -78551,7 +78551,7 @@ lang: id-id --- CoffeeScript adalah bahasa sederhana yang diterjemahkan saat kompilasi ke dalam JavaScript, -dan bukan diterjemahkan pada saat *runtime*. +dan bukan diterjemahkan pada saat *runtime*. CoffeeScript mencoba agar kode JavaScript yang dihasilkan tetap mudah dibaca dan kompatibel dengan semua *runtime* JavaScript. @@ -78774,7 +78774,7 @@ berdasarkan perilaku lamannya (bukan struktur lamannya) */ ####################*/ selektor { - + /* Unit */ width: 50%; /* dalam persen */ font-size: 2em; /* angka kali jumlah font-size saat ini */ @@ -78783,7 +78783,7 @@ selektor { width: 5cm; /* dalam centimeter */ width: 50mm; /* dalam milimeter */ width: 5in; /* dalam inci */ - + /* Warna */ background-color: #F6E; /* dalam short hex */ background-color: #F262E2; /* dalam format long hex */ @@ -78791,10 +78791,10 @@ selektor { background-color: rgb(255, 255, 255); /* dalam rgb */ background-color: rgb(10%, 20%, 50%); /* dalam persen rgb */ background-color: rgba(255, 0, 0, 0.3); /* dalam rgb semi-transparan*/ - + /* Gambar */ background-image: url(/folder-gambar/image.jpg); - + /* Font */ font-family: Arial; font-family: "Courier New"; /* jika nama font memiliki spasi, @@ -78820,7 +78820,7 @@ Namun, sebisa mungkin metode ini dihindari. --> selektor { properti:nilai; } -
    @@ -78829,7 +78829,7 @@ Metode ini harus dihindari sebisa mungkin. --> ## Prioritas -Kita tahu bahwa sebuah elemen bisa dipilih dengan lebih dari satu selektor, +Kita tahu bahwa sebuah elemen bisa dipilih dengan lebih dari satu selektor, serta bisa diberi lebih dari satu properti. Dalam kasus seperti ini, hanya salah satu properti saja yang akan diterapkan pada elemen dengan prioritas tertentu. @@ -78862,14 +78862,14 @@ dan susunan markup:

    ``` -Maka prioritas penerapan style-nya ialah sbb.: +Maka prioritas penerapan style-nya ialah sbb.: Ingat, penerapan ini untuk masing-masing **properti**, bukan keseluruhan larik. -* `E` prioritas pertama sebab ada kata `!important`. +* `E` prioritas pertama sebab ada kata `!important`. Dianjurkan untuk menghindari kata ini jika tidak benar-benar perlu. * `F` prioritas kedua sebab ia diketik secara inline. -* `A` prioritas ketiga sebab selektor ini lebih spesifik dibanding yang lain. +* `A` prioritas ketiga sebab selektor ini lebih spesifik dibanding yang lain. lebih spesifik = lebih banyak unsur selektor. contoh ini punya 3 unsur: 1 tagname `p` + 1 nama class `class1` + 1 attribute `attr='nilai'` * `C` prioritas berikutnya sebab meski sama spesifik dengan `B` namun @@ -79022,7 +79022,7 @@ public class BelajarJava { // pada BigInteger // // BigInteger dapat diinisialisasi menggunakan kumpulan byte atau teks. - + BigInteger nilaiBigInteger = new BigInteger(kumpulanByte); @@ -79036,23 +79036,23 @@ public class BelajarJava { // dimana sangat mementingkan presisi nilai desimal. // // BigDecimal dapat diinisialisasi dengan int, long, double, String, - // atau dengan melakukan inisialisasi nilai tanpa skala (BigInteger) - // dan nilai dengan skala (int). + // atau dengan melakukan inisialisasi nilai tanpa skala (BigInteger) + // dan nilai dengan skala (int). BigDecimal nilaiBigDecimal = new BigDecimal(nilaiBigInteger, nilaiInt); - + // Perlu diperhatikan konstruktor yang digunakan apakah float atau double // karena dapat mengakibatkan ketidak-akurasian float/double yang akan digunakan // dalam BigDecimal. Sebaiknya gunakan nilai String pada konstruktor // jika membutuhkan nilai pasti. - + BigDecimal sepuluhSen = new BigDecimal("0.1"); // Strings String nilaiString1 = "Ini adalah contoh String!"; - // Karakter \n berfungsi untuk membuat baris baru + // Karakter \n berfungsi untuk membuat baris baru String nilaiString2 = "Menampilkan baris baru?\nTidak masalah!"; // Karakter \t berfungsi untuk membuat tab antar karakter String nilaiString3 = "Ingin menambahkan sebuah tab?\tTidak masalah!"; @@ -79188,18 +79188,18 @@ public class BelajarJava { // 10 kali iterasi, foofor 0-9 } System.out.println("Nilai fooFor: " + fooFor); - + // Perulangan "for" bertingkat dengan label "exit" outer: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (i == 5 && j ==5) { break outer; - // Menghentikan semua perulangan, tidak hanya perulangan bagian dalam saja + // Menghentikan semua perulangan, tidak hanya perulangan bagian dalam saja } } } - + // Perulangan "for each" // Perulangan "for" juga dapat melakukan iterasi terhadap larik (array) dari objek // yang mana mengimplementasikan interface Ieterable. @@ -79231,7 +79231,7 @@ public class BelajarJava { break; } System.out.println("Hasil switch case: " + bulanString); - + // Mulai dari Java 7 keatas, "switch" memiliki format: String jawabanSaya = "mungkin"; switch(jawabanSaya) { @@ -79461,7 +79461,7 @@ public interface dapatDicerna { // Membuat kelas dengan mengimplementasikan dua interface dalam satu waktu. public class Buah implements dapatDimakan, dapatDicerna { - + @Override public void makan() { // ... @@ -79516,12 +79516,12 @@ public abstract class Hewan } // Tidak perlu dilakukan inisialisasi, berbeda dengan Interface - // sebuah variabel adalah final dan harus dilakukan inisialisasi. + // sebuah variabel adalah final dan harus dilakukan inisialisasi. protected int umur; public void tampilkanUmur() { - System.out.println(umur); + System.out.println(umur); } // Kelas abstrak dapat memiliki fungsi utama (main). @@ -79542,7 +79542,7 @@ class Kucing extends Hewan // umur = 30; ==> ERROR! umur merupakan variabel private pada abstrak Hewan } - // CATATAN: Akan muncul error jika menggunakan + // CATATAN: Akan muncul error jika menggunakan // keterangan @Override pada method utama (main), // Java tidak mengizinkan hal tersebut. // Kejadian ini sering disebut sebagai METHOD HIDING. @@ -79603,41 +79603,41 @@ public abstract class Mamalia() public enum Hari { SENIN, SELASA, RABU, KAMIS, - JUMAT, SABTU, MUNGGU + JUMAT, SABTU, MUNGGU } // Cara menggunakan Enum: public class CobaEnum { - + // Variabel Enum Hari hari; - + // Konstruktor public CobaEnum(Hari hari) { this.hari = hari; } - + public void tampilkanKeterangan() { switch (day) { case SENIN: System.out.println("Senin adalah hari yang menyebalkan."); break; - + case JUMAT: System.out.println("Jumat adalah hari yang singkat."); break; - - case SABTU: + + case SABTU: case MINGGU: System.out.println("Akhir pekan adalah hari yang menyenangkan."); break; - + default: System.out.println("Hari kerja yang biasa saja."); break; } } - + public static void main(String[] args) { CobaEnum hariPertama = new CobaEnum(Hari.SENIN); hariPertama.tampilkanKeterangan(); // Senin adalah hari yang menyebalkan. @@ -79654,8 +79654,8 @@ public class CobaEnum { ## Referensi Lainnya -Link-link berikut hanya menyediakan pemahaman lebih lanjut mengenai topik diatas. -Tip, trik, dan contoh lainnya dapat melakukan pencarian melalui Google atau mesin pencari yang lain. +Link-link berikut hanya menyediakan pemahaman lebih lanjut mengenai topik diatas. +Tip, trik, dan contoh lainnya dapat melakukan pencarian melalui Google atau mesin pencari yang lain. **Panduan resmi Oracle** @@ -79725,7 +79725,7 @@ Tipe data yang didukung oleh JSON: ```json { "kunci": "nilai", - + "kunci": "harus selalu diapit tanda kutip", "angka": 0, "strings": "Halø, dunia. Semua karaktor unicode diperbolehkan, terumasuk \"escaping\".", @@ -79755,7 +79755,7 @@ Tipe data yang didukung oleh JSON: [0, 0, 0, 1] ] ], - + "gaya alternatif": { "komentar": "lihat ini!" , "posisi tanda koma": "tak masalah. selama sebelum nilai berikutnya, valid-valid saja" @@ -80390,7 +80390,7 @@ echo "\n"; $roda = ['sepeda' => 2, 'mobil' => 4]; -// Perulangan "foreach" dapat melakukan iterasi pada larik (array) +// Perulangan "foreach" dapat melakukan iterasi pada larik (array) foreach ($roda as $jumlah_roda) { echo $jumlah_roda; } // Menampilkan "24" @@ -80487,7 +80487,7 @@ function parameter() { parameter('Halo', 'Dunia'); // Halo | 0 - Halo | 1 - Dunia | -// Sejak PHP 5.6, mendapatkan jumlah variabel yang ada pada parameter +// Sejak PHP 5.6, mendapatkan jumlah variabel yang ada pada parameter function variabel($kata, ...$daftar) { echo $kata . " || "; foreach ($daftar as $item) { @@ -80495,7 +80495,7 @@ function variabel($kata, ...$daftar) { } } -variable("Pemisah", "Halo", "Dunia") // Pemisah || Halo | Dunia | +variable("Pemisah", "Halo", "Dunia") // Pemisah || Halo | Dunia | /******************************** * Penyertaan ("include") @@ -80510,12 +80510,12 @@ include 'dokumen-saya.php'; include_once 'dokumen-saya.php'; // Jika dokumen-saya telah disertakan (include) oleh perintah sebelumnya, maka -// dokumen tersebut tidak akan disertakan lagi. Ini bertujuan untuk menghindari kesalahan +// dokumen tersebut tidak akan disertakan lagi. Ini bertujuan untuk menghindari kesalahan // yang diakibatkan oleh deklarasi ganda. require 'dokumen-saya.php'; require_once 'dokumen-saya.php'; -// Memiliki fungsi yang sama dengan "include", namun jika dokumen tidak ditemukan +// Memiliki fungsi yang sama dengan "include", namun jika dokumen tidak ditemukan // atau tidak dapat disertakan maka akan menghasilkan pesan kesalahan fatal. // Isi dari dokumen-saya.php: @@ -80800,7 +80800,7 @@ Tapi ini adalah KelasAnak /********************** * Magic constants -* +* */ // Mendapatkan nama dari suatu kelas. Harus dideklarasikan didalam kelas tersebut. @@ -80824,7 +80824,7 @@ echo "Nomor baris perintah ini adalah " . __LINE__; // Mendapatkan nama method. Hanya mengembalikan sebuah nilai jika berada didalam trait atau deklarasi objek. echo "Nama method ini adalah " . __METHOD__; -// Mendapatkan nama namespace +// Mendapatkan nama namespace echo "Namespace saat ini adalah " . __NAMESPACE__; // Mendapatkan nama dari trait. Hanya mengembalikan sebuah nilai jika berada didalam trait atau deklarasi objek. @@ -80832,7 +80832,7 @@ echo "Namespace saat ini adalah " . __TRAIT__; /********************** * Penanganan Kesalahan (Error) -* +* */ // Penanganan error sederhana menggunakan "try...catch" @@ -80873,7 +80873,7 @@ try { Kunjungi [Dokumentasi resmi PHP](http://www.php.net/manual/) untuk referensi dan masukan komunitas. -Jika anda tertarik untuk belajar lebih dalam, kunjungi +Jika anda tertarik untuk belajar lebih dalam, kunjungi [PHP The Right Way](http://www.phptherightway.com/). Jika anda terbiasa dengan manajemen paket, kunjungi @@ -80901,7 +80901,7 @@ Tulisan ini diadaptasi dari **Intro Qt untuk C++** oleh [Aleksey Kholovchuk](htt ```Python import sys from PyQt4 import QtGui - + def window(): # Buat objek aplikasi app = QtGui.QApplication(sys.argv) @@ -80928,7 +80928,7 @@ if __name__ == '__main__': Untuk menunjukkan beberapa fitur yang lebih canggih di **PyQt**, kita akan membangun elemen tambahan. Di sini, kita akan membuat Kotak Popup Dialog, yang berguna untuk meminta pengguna untuk mengkonfirmasi keputusan atau untuk menampilkan informasi. -```Python +```Python import sys from PyQt4.QtGui import * from PyQt4.QtCore import * @@ -81122,7 +81122,7 @@ path = '/bad/name/' # Simbol (adalah objek) # Simbol adalah konstanta yang dapat didaur ulang yang tidak dapat diubah -# (immutable), secara internal diwakili oleh nilai integer. Seringkali +# (immutable), secara internal diwakili oleh nilai integer. Seringkali # digunakan sebagai pengganti string untuk menyampaikan nilai yang mengandung # makna spesifik secara efisien. @@ -81735,11 +81735,11 @@ XML adalah bahasa markup yang dirancang untuk menyimpan dan mengirim data. XML m Tidak seperti HTML, XML tidak menentukan bagaimana menampilkan atau format data, hanya membawanya. Terdapat perbedaan antara **konten** dan **markup**. Singkatnya, konten dapat berupa apapun dan markup adalah sebagai penentu. - + ## Definisi dan Pendahuluan - + Dokumen XML pada dasarnya disusun oleh *elemen* yang dapat memiliki *atribut* untuk menjelaskan elemen tersebut dan dapat memiliki beberapa konten tekstual atau beberapa elemen sebagai anak-nya. Setiap dokumen XML hendaknya memiliki satu elemen akar, yang menjadi induk dari semua elemen dalam dokumen XML. - + Pengurai XML dirancang menjadi sangat ketat, dan akan berhenti melakukan penguraian terhadap dokumen yang cacat. Oleh karena itu semua dokumen XML harus mengikuti [Aturan Sintaks XML](http://www.w3schools.com/xml/xml_syntax.asp). ```xml @@ -81789,7 +81789,7 @@ Pengurai XML dirancang menjadi sangat ketat, dan akan berhenti melakukan pengura Teks ``` - + ## Dokumen XML @@ -81835,8 +81835,8 @@ Pengurai XML dirancang menjadi sangat ketat, dan akan berhenti melakukan pengura    2 - Elemen -> Itu data yang murni.        Itulah yang parser akan mengambil dari file XML.        Elemen muncul antara tag membuka dan menutup.--> - - + + komputer.gif @@ -81934,12 +81934,12 @@ Inform 7 is a natural language based language created by Graham Nelson and Emily [This is a comment.] [Inform 7 is a language designed for building text adventures. -It can be used for other purposes too, although the default +It can be used for other purposes too, although the default library builds a text adventure. Inform 7 is object oriented.] [This creates a class by subclassing. "Value" is the universal subclass, but "object" is the most basic that behaves like an OO object.] -A datablock is a kind of object. +A datablock is a kind of object. [Classes can have properties.] A datablock can be broken. [This creates a boolean property.] @@ -81958,18 +81958,18 @@ The name of Block1 is "Block One." [Functions and procedures are defined as "phrases".] To do the thing everyone does with their first program: say "Hello World.". [Full stop indicates the end, indent indicates the scope.] - + To dump (the block - a datablock): [That's how we create a parameter.] say the sequence number of the block; say the name of the block; if the block is broken, say "(Broken)". - + To toggle (the block - a datablock): if the block is broken: [Conditional.] now the block is not broken; [Updating a property.] else: now the block is broken. - + [Multiple parameters.] To fix (the broken block - a datablock) using (the repair block - a datablock): if the broken block is not broken, stop; [Comma for a non indented single command.] @@ -81978,8 +81978,8 @@ To fix (the broken block - a datablock) using (the repair block - a datablock): now the broken block is not broken. [Because of its text adventure origins, Inform 7 doesn't generally allow objects -to be created dynamically, although there's a language extension that enables it.] -Block2 is a datablock. +to be created dynamically, although there's a language extension that enables it.] +Block2 is a datablock. Block2 is broken. The sequence number of Block2 is 2. The name of Block2 is "Block two." @@ -81988,8 +81988,8 @@ To demonstrate calling a phrase with two parameters: Let the second block be block2; [Local pointer variable.] fix the second block using Block1; say the sequence number of the second block. [1.] - -[Lists.] + +[Lists.] To show how to use list types: let the list be a list of datablocks; add Block1 to the list; @@ -82006,7 +82006,7 @@ To show how to use list types: dump X; ["1 Block two."] remove X from the list; say the list. [Block1] - + [Here's how we define a function and do arithmetic.] To decide which number is the sum of all numbers up to (X - a number) (this is summing up): @@ -82014,7 +82014,7 @@ To decide which number is the sum of all numbers up to (X - a number) (this is s repeat with the current number running from 1 to X: now the total so far is the total so far + the current number; decide on the total so far. [This is the return statement.] - + [ We have higher order functions too. ] To demonstrate a higher order function: @@ -82024,7 +82024,7 @@ To decide which number is the result of applying (phrase - phrase A -> A) twice let b1 be phrase applied to B; let b2 be phrase applied to b1; decide on b2. - + To demonstrate defining a higher order function: let X be 5; say the result of applying summing up twice to X. @@ -82034,14 +82034,14 @@ To demonstrate defining a higher order function: Datablock validation rules is a datablock based rulebook. A datablock validation rule for a broken datablock: rule fails. -A datablock validation rule for a datablock (called the block): +A datablock validation rule for a datablock (called the block): dump the block; rule succeeds. - + To demonstrate invoking a rulebook: follow datablock validation rules for Block1; follow datablock validation rules for Block2. - + [ Objects can also have relations, which resemble those in a relational database. ] A dog is a kind of thing. Rover is a dog. @@ -82058,7 +82058,7 @@ Friendship relates various people to various people. [Many-to-many.] The verb to own means the property ownership relation. The verb to be the guide dog of means the guide dog ownership relation. -The verb to be guided by means the reversed guide dog ownership relation. +The verb to be guided by means the reversed guide dog ownership relation. The verb to be friends with means the friendship relation. Edward is a person. A person can be blind. Edward is blind. @@ -82078,18 +82078,18 @@ The verb to be helpful to means the helpfulness relation. To demonstrate using a procedural relation: repeat with the helper running through people that are helpful to Edward: say the helper. - + [ Interface to the text adventure harness to allow the above code to be run. ] -Tutorial room is a room. +Tutorial room is a room. "A rather strange room full of buttons. Push them to run the exercises, or turn on the robot to run them all." -A button is a kind of thing. A button is fixed in place. +A button is a kind of thing. A button is fixed in place. -The red button is a button in tutorial room. +The red button is a button in tutorial room. Instead of pushing the red button, do the thing everyone does with their first program. -The green button is a button in tutorial room. +The green button is a button in tutorial room. Instead of pushing the green button, demonstrate calling a phrase with two parameters. -The blue button is a button in tutorial room. +The blue button is a button in tutorial room. Instead of pushing the blue button, show how to use list types. The cyan button is a button in tutorial room. Instead of pushing the cyan button, say the sum of all numbers up to 5. @@ -82128,7 +82128,7 @@ contributors: - ["Rahil Momin", "https://github.com/iamrahil"] - ["Gregrory Kielian", "https://github.com/gskielian"] - ["Etan Reisner", "https://github.com/deryni"] - - ["Jonathan Wang", "https://github.com/Jonathansw"] + - ["Jonathan Wang", "https://github.com/Jonathansw"] - ["Leo Rudberg", "https://github.com/LOZORD"] - ["Betsy Lorton", "https://github.com/schbetsy"] - ["John Detter", "https://github.com/jdetter"] @@ -82365,7 +82365,7 @@ echo "Ci sono $(ls | wc -l) oggetti qui." echo "Ci sono `ls | wc -l` oggetti qui." # Bash utilizza uno statemente case che funziona in maniera simile allo switch in Java e C++: -case "$Variabile" in +case "$Variabile" in #Lista di pattern per le condizioni che vuoi soddisfare 0) echo "C'è uno zero.";; 1) echo "C'è un uno.";; @@ -83230,7 +83230,7 @@ void stampaMessaggio<10>() { } printMessage<20>(); // Stampa "impara il C++ in 20 minuti!" -printMessage<10>(); // Stampa "Impara il C++ più velocemente in soli 10 minuti!" +printMessage<10>(); // Stampa "Impara il C++ più velocemente in soli 10 minuti!" //////////////////////////// // Gestione delle eccezioni @@ -83729,11 +83729,11 @@ lang: it-it --- CoffeeScript è un piccolo linguaggio che compila direttamente nell'equivalente -JavaScript, non c'è nessuna interpretazione a runtime. Come possibile -successore di Javascript, CoffeeScript fa il suo meglio per restituire +JavaScript, non c'è nessuna interpretazione a runtime. Come possibile +successore di Javascript, CoffeeScript fa il suo meglio per restituire un codice leggibile, ben stampato e performante in ogni ambiente JavaScript. -Guarda anche [il sito di CoffeeScript](http://coffeescript.org/), che ha una +Guarda anche [il sito di CoffeeScript](http://coffeescript.org/), che ha una guida completa a CoffeeScript. ```coffeescript @@ -83742,7 +83742,7 @@ guida completa a CoffeeScript. # Quindi i commenti sono come quelli di Ruby e Python, usano il cancelletto. ### -I blocchi di commenti sono definiti con tre cancelletti, che vengono tradotti +I blocchi di commenti sono definiti con tre cancelletti, che vengono tradotti direttamente in `/*` e `*/` nel codice JavaScript risultante. Prima di continuare devi conoscere la maggior parte @@ -83851,7 +83851,7 @@ e molte altre funzionalità. # Per usare la shell di elixir usa il comando `iex`. # Compila i tuoi moduli con il comando `elixirc`. -# Entrambi i comandi dovrebbero già essere nel tuo PATH se hai installato +# Entrambi i comandi dovrebbero già essere nel tuo PATH se hai installato # elixir correttamente. ## --------------------------- @@ -83892,7 +83892,7 @@ coda #=> [2,3] # le tuple hanno dimensione differente. # {a, b, c} = {1, 2} #=> ** (MatchError) no match of right hand side value: {1,2} -# Ci sono anche i binari +# Ci sono anche i binari <<1,2,3>> # binari (Binary) # Stringhe e liste di caratteri @@ -83907,7 +83907,7 @@ multi-linea. #=> "Sono una stringa\nmulti-linea.\n" # Le stringhe sono tutte codificate in UTF-8: -"cìaò" +"cìaò" #=> "cìaò" # le stringhe in realtà sono dei binari, e le liste di caratteri sono liste. @@ -83954,7 +83954,7 @@ false or true #=> true # 1 and true #=> ** (ArgumentError) argument error # Elixir fornisce anche `||`, `&&` e `!` che accettano argomenti -# di qualsiasi tipo. +# di qualsiasi tipo. # Tutti i valori tranne `false` e `nil` saranno valutati come true. 1 || true #=> 1 false && 1 #=> false @@ -83974,7 +83974,7 @@ nil && 20 #=> nil 1 < :ciao #=> true # L'ordine generale è definito sotto: -# numeri < atomi < riferimenti < funzioni < porte < pid < tuple < liste +# numeri < atomi < riferimenti < funzioni < porte < pid < tuple < liste # < stringhe di bit # Per citare Joe Armstrong su questo: "L'ordine non è importante, @@ -83998,7 +83998,7 @@ else "Questo sì" end -# Ti ricordi il pattern matching? +# Ti ricordi il pattern matching? # Moltre strutture di controllo di flusso in elixir si basano su di esso. # `case` ci permette di confrontare un valore a diversi pattern: @@ -84041,7 +84041,7 @@ cond do "Questa sì! (essenzialmente funziona come un else)" end -# `try/catch` si usa per gestire i valori lanciati (throw), +# `try/catch` si usa per gestire i valori lanciati (throw), # Supporta anche una clausola `after` che è invocata in ogni caso. try do throw(:ciao) @@ -84062,7 +84062,7 @@ quadrato = fn(x) -> x * x end quadrato.(5) #=> 25 # Accettano anche guardie e condizioni multiple. -# le guardie ti permettono di perfezionare il tuo pattern matching, +# le guardie ti permettono di perfezionare il tuo pattern matching, # sono indicate dalla parola chiave `when`: f = fn x, y when x > 0 -> x + y @@ -84092,13 +84092,13 @@ end Matematica.somma(1, 2) #=> 3 Matematica.quadrato(3) #=> 9 -# Per compilare il modulo 'Matematica' salvalo come `matematica.ex` e usa +# Per compilare il modulo 'Matematica' salvalo come `matematica.ex` e usa # `elixirc`. # nel tuo terminale: elixirc matematica.ex # All'interno di un modulo possiamo definire le funzioni con `def` e funzioni # private con `defp`. -# Una funzione definita con `def` è disponibile per essere invocata anche da +# Una funzione definita con `def` è disponibile per essere invocata anche da # altri moduli, una funziona privata può essere invocata solo localmente. defmodule MatematicaPrivata do def somma(a, b) do @@ -84158,7 +84158,7 @@ end ## --------------------------- -# Le Strutture (Structs) sono estensioni alle mappe che portano +# Le Strutture (Structs) sono estensioni alle mappe che portano # valori di default, garanzia alla compilazione e polimorfismo in Elixir. defmodule Persona do defstruct nome: nil, eta: 0, altezza: 0 @@ -84194,7 +84194,7 @@ end ## -- Concorrenza ## --------------------------- -# Elixir si basa sul modello degli attori per la concorrenza. +# Elixir si basa sul modello degli attori per la concorrenza. # Tutto ciò di cui abbiamo bisogno per scrivere programmi concorrenti in elixir # sono tre primitive: creare processi, inviare messaggi e ricevere messaggi. @@ -84206,12 +84206,12 @@ spawn(f) #=> #PID<0.40.0> # `spawn` restituisce un pid (identificatore di processo). Puoi usare questo # pid per inviare messaggi al processo. # Per passare messaggi si usa l'operatore `send`. -# Perché tutto questo sia utile dobbiamo essere capaci di ricevere messaggi, +# Perché tutto questo sia utile dobbiamo essere capaci di ricevere messaggi, # oltre ad inviarli. Questo è realizzabile con `receive`: # Il blocco `receive do` viene usato per mettersi in ascolto di messaggi # ed elaborarli quando vengono ricevuti. Un blocco `receive do` elabora -# un solo messaggio ricevuto: per fare elaborazione multipla di messaggi, +# un solo messaggio ricevuto: per fare elaborazione multipla di messaggi, # una funzione con un blocco `receive do` al suo intero dovrà chiamare # ricorsivamente sé stessa per entrare di nuovo nel blocco `receive do`. defmodule Geometria do @@ -84232,7 +84232,7 @@ pid = spawn(fn -> Geometria.calcolo_area() end) #=> #PID<0.40.0> # Alternativamente pid = spawn(Geometria, :calcolo_area, []) -# Invia un messaggio a `pid` che farà match su un pattern nel blocco in receive +# Invia un messaggio a `pid` che farà match su un pattern nel blocco in receive send pid, {:rettangolo, 2, 3} #=> Area = 6 # {:rettangolo,2,3} @@ -84790,7 +84790,7 @@ Go comes with a great standard library and an enthusiastic community. // Main è un package speciale che identifica un eseguibile anziché una libreria. package main -// Con import sono dichiarate tutte le librerie a cui si fa riferimento +// Con import sono dichiarate tutte le librerie a cui si fa riferimento // all'interno del file. import ( "fmt" // Un package nella libreria standard di Go. @@ -84850,7 +84850,7 @@ puo' includere andata a capo.` // Sempre di tipo stringa. // Inizializzare le variabili con var. var u uint = 7 // Senza segno, ma la dimensione dipende dall'implementazione (come l'int) - var pi float32 = 22. / 7 + var pi float32 = 22. / 7 // Sintassi per la conversione. n := byte('\n') // Il tipo byte è un alias per uint8. @@ -85190,7 +85190,7 @@ Osserva che puoi usare [https://play.golang.org](https://play.golang.org) come una [REPL](https://en.wikipedia.org/wiki/Read-eval-print_loop) per scrivere codice all'interno del browser, senza neanche installare Go! -Una lettura importante per capire Go in modo più profondo è il [codice +Una lettura importante per capire Go in modo più profondo è il [codice sorgente della libreria standard](http://golang.org/src/pkg/). Infatti è molto ben documentato e costituisce quanto più chiaro e conciso ci sia riguardo gli idiomi e le buone pratiche del Go. Inoltre, clickando sul nome di una @@ -85217,7 +85217,7 @@ lang: it-it --- Java è un linguaggio di programmazione orientato ad oggetti, -concorrente, basato su classi e adatto a svariati scopi. +concorrente, basato su classi e adatto a svariati scopi. [Per saperne di più](http://docs.oracle.com/javase/tutorial/java/index.html) ```java @@ -85333,12 +85333,12 @@ public class LearnJava { // // BigInteger e' un tipo di dato che permette ai programmatori di // gestire interi piu' grandi di 64 bit. Internamente, le variabili - // di tipo BigInteger vengono memorizzate come un vettore di byte e + // di tipo BigInteger vengono memorizzate come un vettore di byte e // vengono manipolate usando funzioni dentro la classe BigInteger. // // Una variabile di tipo BigInteger puo' essere inizializzata usando // un array di byte oppure una stringa. - + BigInteger fooBigInteger = new BigDecimal(fooByteArray); // BigDecimal - Numero con segno, immutabile, a precisione arbitraria @@ -85417,7 +85417,7 @@ public class LearnJava { 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 + System.out.println("1/2 = " + (i1 / i2)); // => 0 // (con 0.5 arrotonda per difetto) // Modulo @@ -85434,7 +85434,7 @@ public class LearnJava { // Operatori binari orientati ai bit // effettuano le operazioni logiche confrontando, i bit degli operandi: /* - ~ complemento + ~ complemento << shift sinistro con segno >> shift destro con segno >>> shift destro senza segno @@ -85448,7 +85448,7 @@ public class LearnJava { System.out.println("\n->Incrementare/Decrementare"); // Gli operatori ++ e -- incrementano e decrementano rispettivamente di 1. // Se posizionati prima della variabile, incrementano, quindi riportano. - // Se si trovano dopo la variabile, riporano, e quindi incrementano. + // Se si trovano dopo la variabile, riporano, e quindi incrementano. System.out.println(i++); //i = 1, Stampa 0 (post-incremento) System.out.println(++i); //i = 2, Stampa 2 (pre-incremento) System.out.println(i--); //i = 1, Stampa 2 (post-decremento) @@ -85536,11 +85536,11 @@ public class LearnJava { // Condizioni brevi // Si puo' usare l'operatore '?' per un rapido assegnamento // o per operazioni logiche. - // Si legge: + // Si legge: // Se (condizione) e' vera, usa , altrimenti usa int foo = 5; String bar = (foo < 10) ? "A" : "B"; - System.out.println("Se la condizione e' vera stampa A: "+bar); + System.out.println("Se la condizione e' vera stampa A: "+bar); // Stampa A, perche' la condizione e' vera. @@ -85561,7 +85561,7 @@ public class LearnJava { // String // Typecasting - // Vi sono molti dettagli che non si possono spiegare qui, + // Vi sono molti dettagli che non si possono spiegare qui, // java dispone di una ottima documentazione // Sentiti libero di leggerla // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html @@ -85582,7 +85582,7 @@ public class LearnJava { percorso.accellera(3); // Si usano sempre metodi set... get... percorso.setCadenza(100); - // toString riporta la rappresenzazione dell'oggetto + // toString riporta la rappresenzazione dell'oggetto // come se fosse una stringa System.out.println("percorso info: " + percorso.toString()); @@ -85602,13 +85602,13 @@ public class LearnJava { class Bicicletta { // Variabili della bicicletta - public int cadenza; + public int cadenza; // Public: Puo' essere richiamato da qualsiasi classe - private int velocita; + private int velocita; // Private: e'' accessibile solo dalla classe dove e'' stato inizializzato - protected int ingranaggi; + protected int ingranaggi; // Protected: e'' visto sia dalla classe che dalle sottoclassi - String nome; + String nome; // default: e'' accessibile sono all'interno dello stesso package // I costruttori vengono usati per creare variabili @@ -85632,7 +85632,7 @@ class Bicicletta { // () // Le classi in java spesso implementano delle funzioni o metodo - // 'get...' o 'set...' + // 'get...' o 'set...' // Dichiarazione di un metodo // () @@ -85685,7 +85685,7 @@ class PennyFarthing extends Bicicletta { super(cadenzaIniziale, velocitaIniziale, 0, "PennyFarthing"); } - // Bisogna contrassegnre un medodo che si sta riscrivendo + // Bisogna contrassegnre un medodo che si sta riscrivendo // con una @annotazione // Per saperne di piu' sulle annotazioni // Vedi la guida: http://docs.oracle.com/javase/tutorial/java/annotations/ @@ -85705,7 +85705,7 @@ class PennyFarthing extends Bicicletta { //Esempi- Cibo: interface Commestibile { - public void mangia(); + public void mangia(); //Ogni classe che implementa questa interfaccia //deve implementare questo metodo. } @@ -85720,11 +85720,11 @@ class Frutta implements Commestibile, Digestibile { } public void digerisci() { - //... + //... } } -//In Java si puo' estendere solo una classe, ma si possono implementare +//In Java si puo' estendere solo una classe, ma si possono implementare //piu' interfaccie, per esempio: class ClasseEsempio extends AltraClasse implements PrimaInterfaccia, SecondaInterfaccia { public void MetodoPrimaInterfaccia() { @@ -85806,7 +85806,7 @@ e di una sorta di [DTD](https://it.wikipedia.org/wiki/Document_Type_Definition). ```json { "chiave": "valore", - + "chiavi": "devono sempre essere racchiuse tra doppi apici", "numeri": 0, "stringhe": "Ciaø, møndø. Tutti i caratteri Unicode sono permessi, insieme all'\"escaping\".", @@ -85836,7 +85836,7 @@ e di una sorta di [DTD](https://it.wikipedia.org/wiki/Document_Type_Definition). [0, 0, 0, 1] ] ], - + "stile alternativo": { "commento": "Guarda qua!" , "posizione della virgola": "non conta - se è prima della chiave successiva, allora è valida" @@ -85912,7 +85912,7 @@ X = 3 yes ``` -Analogamente alla programmazione object-oriented, logtalk consente anche l'Incapsulamento. +Analogamente alla programmazione object-oriented, logtalk consente anche l'Incapsulamento. Un predicato può essere dichiarata pubblico, protetto o privato. Può anche essere _local_ quando non esiste una direttiva specifica per esso all'interno dello scope. Per esempio: ```logtalk @@ -86462,7 +86462,7 @@ Qui siamo nel paragrafo 3! -Questa frase finisce con due spazi (evidenziatemi per vederli). +Questa frase finisce con due spazi (evidenziatemi per vederli). C'è un
    sopra di me! @@ -87217,7 +87217,7 @@ utilizzando Python 2: cosa aspetti a vedere il tutorial di Python 3? 10 * 2 # => 20 35 / 5 # => 7 -# La divisione è un po' complicata. E' una divisione fra interi in cui viene +# La divisione è un po' complicata. E' una divisione fra interi in cui viene # restituito in automatico il risultato intero. 5 / 2 # => 2 @@ -87323,7 +87323,7 @@ None is None # => True # L'operatore 'is' testa l'identità di un oggetto. Questo non è # molto utile quando non hai a che fare con valori primitivi, ma lo è # quando hai a che fare con oggetti. - + # Qualunque oggetto può essere usato nei test booleani # I seguenti valori sono considerati falsi: # - None @@ -87332,7 +87332,7 @@ None is None # => True # - Contenitori vuoti (tipo {}, set()) # - Istanze di classi definite dall'utente, che soddisfano certi criteri # vedi: https://docs.python.org/2/reference/datamodel.html#object.__nonzero__ -# +# # Tutti gli altri valori sono considerati veri: la funzione bool() usata su di loro, ritorna True. bool(0) # => False bool("") # => False @@ -88391,7 +88391,7 @@ fn main() { *ref_var2 += 2; // '*' serve a puntare al binding var2, preso in presto mutevolmente println!("{}", *ref_var2); // 6 - // var2 non compilerebbe. ref_var2 è di tipo &mut i32, e quindi + // var2 non compilerebbe. ref_var2 è di tipo &mut i32, e quindi // immagazzina un riferimento a un i32, e non il valore stesso. // var2 = 2; // questo non compilerebbe, perché `var2` è stato preso in prestito } @@ -88604,7 +88604,7 @@ Julia は科学技術計算向けに作られた、同図像性を持った(homo # ハッシュ(シャープ)記号から改行までは単一行コメントとなります。 #= 複数行コメントは、 '#=' と '=#' とで囲むことで行えます。 - #= + #= 入れ子構造にすることもできます。 =# =# @@ -89267,7 +89267,7 @@ square_area(l) = l * l # square_area (generic function with 1 method) square_area(5) #25 # square_area に整数を渡すと何が起きる? -code_native(square_area, (Int32,)) +code_native(square_area, (Int32,)) # .section __TEXT,__text,regular,pure_instructions # Filename: none # Source line: 1 # Prologue @@ -89300,7 +89300,7 @@ code_native(square_area, (Float64,)) # vmulsd XMM0, XMM0, XMM0 # 倍精度浮動小数点数演算 (AVX) # pop RBP # ret - # + # # Julia では、浮動小数点数と整数との演算では # 自動的に浮動小数点数用の命令が生成されることに注意してください。 @@ -89335,7 +89335,7 @@ code_native(circle_area, (Float64,)) # vmulsd XMM0, XMM1, XMM0 # pop RBP # ret - # + # ``` ## より勉強するために @@ -90070,7 +90070,7 @@ $cls = new SomeOtherNamespace\MyClass(); /********************** * エラーハンドリング -* +* */ // シンプルなエラーハンドリングは、try catchを使えば行えます @@ -90083,10 +90083,10 @@ try { // try catchを名前空間を持った環境で使用するときは、次のようにします。 -try { +try { // Do something // 処理を実行します -} catch (\Exception $e) { +} catch (\Exception $e) { // 例外を処理します } @@ -90095,13 +90095,13 @@ try { class MyException extends Exception {} try { - - $condition = true; - + + $condition = true; + if ($condition) { throw new MyException('Something just happend'); } - + } catch (MyException $e) { // Handle my exception } @@ -91070,8 +91070,8 @@ head(rivers) # データの先頭部分です length(rivers) # 何本の川がデータにある? # 141 summary(rivers) # 統計的に要約するとどうなる? -# Min. 1st Qu. Median Mean 3rd Qu. Max. -# 135.0 310.0 425.0 591.2 680.0 3710.0 +# Min. 1st Qu. Median Mean 3rd Qu. Max. +# 135.0 310.0 425.0 591.2 680.0 3710.0 # 茎葉図(ヒストグラムに似た図)を描く @@ -91090,14 +91090,14 @@ stem(rivers) # 14 | 56 # 16 | 7 # 18 | 9 -# 20 | +# 20 | # 22 | 25 # 24 | 3 -# 26 | -# 28 | -# 30 | -# 32 | -# 34 | +# 26 | +# 28 | +# 30 | +# 32 | +# 34 | # 36 | 1 @@ -91108,7 +91108,7 @@ stem(log(rivers)) # このデータは、正規分布でも対数正規分布で # The decimal point is 1 digit(s) to the left of the | # # 48 | 1 -# 50 | +# 50 | # 52 | 15578 # 54 | 44571222466689 # 56 | 023334677000124455789 @@ -91123,7 +91123,7 @@ stem(log(rivers)) # このデータは、正規分布でも対数正規分布で # 74 | 84 # 76 | 56 # 78 | 4 -# 80 | +# 80 | # 82 | 2 @@ -91150,7 +91150,7 @@ sort(discoveries) stem(discoveries, scale=2) -# +# # The decimal point is at the | # # 0 | 000000000 @@ -91164,15 +91164,15 @@ stem(discoveries, scale=2) # 8 | 0 # 9 | 0 # 10 | 0 -# 11 | +# 11 | # 12 | 0 max(discoveries) # 12 summary(discoveries) -# Min. 1st Qu. Median Mean 3rd Qu. Max. -# 0.0 2.0 3.0 3.1 4.0 12.0 +# Min. 1st Qu. Median Mean 3rd Qu. Max. +# 0.0 2.0 3.0 3.1 4.0 12.0 # サイコロを振ります @@ -91292,7 +91292,7 @@ factor(c("female", "female", "male", "NA", "female")) # female female male NA female # Levels: female male NA # "levels" は、カテゴリカルデータがとりうる値を返します -levels(factor(c("male", "male", "female", "NA", "female"))) # "female" "male" "NA" +levels(factor(c("male", "male", "female", "NA", "female"))) # "female" "male" "NA" # 因子ベクターの長さが1ならば、そのlevelも1です length(factor("male")) # 1 length(levels(factor("male"))) # 1 @@ -91306,7 +91306,7 @@ levels(infert$education) # "0-5yrs" "6-11yrs" "12+ yrs" class(NULL) # NULL parakeet # => -# [1] "beak" "feathers" "wings" "eyes" +# [1] "beak" "feathers" "wings" "eyes" parakeet <- NULL parakeet # => @@ -91324,7 +91324,7 @@ as.numeric("Bilbo") # => # [1] NA # Warning message: -# NAs introduced by coercion +# NAs introduced by coercion # 追記: ここで紹介したのは、基本的な型だけです @@ -91483,10 +91483,10 @@ mat %*% t(mat) mat2 <- cbind(1:4, c("dog", "cat", "bird", "dog")) mat2 # => -# [,1] [,2] -# [1,] "1" "dog" -# [2,] "2" "cat" -# [3,] "3" "bird" +# [,1] [,2] +# [1,] "1" "dog" +# [2,] "2" "cat" +# [3,] "3" "bird" # [4,] "4" "dog" class(mat2) # matrix # ここでいま1度、2次元配列内の型について注意してください! @@ -92260,11 +92260,11 @@ public class LearnJava { // " int foo = 5; String bar = (foo < 10) ? "A" : "B"; - System.out.println("bar : " + bar); // Prints "bar : A", because the + System.out.println("bar : " + bar); // Prints "bar : A", because the // statement is true. // Or simply System.out.println("bar : " + (foo < 10 ? "A" : "B")); - + //////////////////////////////////////// // Converting Data Types @@ -93128,7 +93128,7 @@ var MyConstructor = function(){ myNewObj = new MyConstructor(); // = {myNumber: 5} myNewObj.myNumber; // = 5 -// Unlike most other popular object-oriented languages, JavaScript has no +// Unlike most other popular object-oriented languages, JavaScript has no // concept of 'instances' created from 'class' blueprints; instead, JavaScript // combines instantiation and inheritance into a single concept: a 'prototype'. @@ -93404,7 +93404,7 @@ tables.animate({margin-top:"+=50", height: "100px"}, 500, myFunction); // 3. Manipulation // These are similar to effects but can do more -$('div').addClass('taming-slim-20'); // Adds class taming-slim-20 to all div +$('div').addClass('taming-slim-20'); // Adds class taming-slim-20 to all div // Common manipulation methods $('p').append('Hello world'); // Adds to end of element @@ -95076,7 +95076,7 @@ contributors: - ["Rahil Momin", "https://github.com/iamrahil"] - ["Gregrory Kielian", "https://github.com/gskielian"] - ["Etan Reisner", "https://github.com/deryni"] - - ["Jonathan Wang", "https://github.com/Jonathansw"] + - ["Jonathan Wang", "https://github.com/Jonathansw"] - ["Leo Rudberg", "https://github.com/LOZORD"] - ["Betsy Lorton", "https://github.com/schbetsy"] - ["John Detter", "https://github.com/jdetter"] @@ -95541,7 +95541,7 @@ lang: ko-kr --- Clojure는 Java 가상머신을 위해 개발된 Lisp 계통의 언어입니다 -이는 Common Lisp보다 순수 [함수형 프로그래밍](https://en.wikipedia.org/wiki/Functional_programming)을 더욱 강조했으며, +이는 Common Lisp보다 순수 [함수형 프로그래밍](https://en.wikipedia.org/wiki/Functional_programming)을 더욱 강조했으며, 상태를 있는 그대로 다루기 위해 다양한 [STM](https://en.wikipedia.org/wiki/Software_transactional_memory) 을 지원하는 프로그램들을 갖췄습니다. 이를 조합하여, 병행처리(concurrent processing)를 매우 단순하게 처리할 수 있으며, @@ -96006,7 +96006,7 @@ Num = 42. % 모든 변수 이름은 반드시 대문자로 시작해야 한다. % 만약 다른 값을 `Num` 변수에 할당하려고 시도하면 오류가 발생한다. Num = 43. % ** 예외 오류: 우변의 값 43과 매칭되지 않음 -% 대부분 언어에서 `=`는 할당문을 나타낸다. 그러나 Erlang에서 +% 대부분 언어에서 `=`는 할당문을 나타낸다. 그러나 Erlang에서 % `=`는 패턴 매칭 연산자를 나타낸다. 비어 있는 변수가 `=` 연산자의 좌변에 % 사용되면 바인드(할당) 된다, 그러나 바인드 변수가 좌변에 사용된 경우에 % 다음 행동은 그 바인드 변수가 관측된다. @@ -96145,7 +96145,7 @@ is_pet(A) when is_atom(A), (A =:= dog);(A =:= cat) -> true; is_pet(A) -> false. % 주의: 모든 유효한 Erlang 식이 Guard 식으로 사용될 수 있는 것은 아니다; -% 특히, 함수 `is_cat`과 `is_dog`는 `is_pet`의 정의 안에 있는 +% 특히, 함수 `is_cat`과 `is_dog`는 `is_pet`의 정의 안에 있는 % 연속적인 Guard 사이에 사용될 수 없다. % 연속적인 Guard에 허용되는 식의 자세한 설명은 Erlang 레퍼런스 메뉴얼 % [section](http://erlang.org/doc/reference_manual/expressions.html#id81912) @@ -96190,7 +96190,7 @@ max(X, Y) -> true -> nil end. -% 주의: 적어도 if 식의 Guard 중의 하나는 반드시 `true`로 평가되어야 한다. +% 주의: 적어도 if 식의 Guard 중의 하나는 반드시 `true`로 평가되어야 한다. % 그렇지 않으면 예외가 발생한다. @@ -96286,7 +96286,7 @@ fib_test_() -> ?_assert(fib(31) =:= 2178309) ]. -% EUnit은 Erlang 셸에서 테스트를 실행할 수 있게 +% EUnit은 Erlang 셸에서 테스트를 실행할 수 있게 % 자동으로 test() 함수를 내보낸다(export). fib:test() @@ -96471,7 +96471,7 @@ func learnFlowControl() { // 여기서 x는 1이다. 위 for에서 x는 for 안의 블록 범위에 있기 때문. // For is the only loop statement in Go, but it has alternate forms. - // for 는 Go에서 유일한 루프 구문이지만 다양한 형태로 조건을 주거나 while + // for 는 Go에서 유일한 루프 구문이지만 다양한 형태로 조건을 주거나 while // 처럼 쓸 수도 있다. for { // 무한루프 break // 여기서 곧바로 break를 한 건 단지 @@ -96503,7 +96503,7 @@ func learnDefer() (ok bool) { // 연기된(deferred) 구문은 함수가 리턴하기 직전에 실행된다. defer fmt.Println("deferred statements execute in reverse (LIFO) order.") // 연기된 구문은 LIFO순으로 실행된다. defer fmt.Println("\nThis line is being printed first because") // 이 줄이 먼저 실행된다. - // defer는 주로 파일을 닫는데 사용된다. + // defer는 주로 파일을 닫는데 사용된다. // 파일을 닫는함수를 파일을 여는함수에 가까이 둘수 있다. return true } @@ -96605,7 +96605,7 @@ func learnConcurrency() { go func() { c <- 84 }() // c 채널로 값을 보내는 goroutine 시작. go func() { cs <- "wordy" }() // cs 채널로 값을 보내느 goroutine 시작. // select 구문은 switch 문과 비슷하지만, case에서 채널 연산에 관한 일을 한다. - // select의 case들은 채널통신을 할 준비가 된 case 하나가 무작위로 선택되어 + // select의 case들은 채널통신을 할 준비가 된 case 하나가 무작위로 선택되어 // 그 부분이 실행된다. select { case i := <-c: // 채널로부터 받아진 값은 변수에 대입할 수 있다. @@ -96868,7 +96868,7 @@ public class LearnJava { // switch-case 문 // switch는 byte, short, char, int 자료형을 대상으로 동작합니다. - // 아울러 열거형을 비롯해 String 클래스 및 원시 타입을 감싼 Character, + // 아울러 열거형을 비롯해 String 클래스 및 원시 타입을 감싼 Character, // Byte, Short, Integer와 같은 몇 가지 특별한 클래스에 대해서도 동작합니다. int month = 3; String monthString; @@ -97069,16 +97069,16 @@ filename: javascript-kr.js lang: ko-kr --- -자바스크립트는 넷스케이프의 브렌던 아이크(Brendan Eich)가 1995년에 만들었습니다. -원래 자바스크립트는 웹사이트를 위한 단순한 스크립트 언어를 목표로 만들어졌는데, -좀 더 복잡한 웹 애플리케이션을 만들기 위해 자바를 보완하는 역할이었지만 -웹 페이지와의 긴밀한 상호작용과 브라우저에 대한 지원 기능 덕분에 웹 프론트엔드에서 -자바보다 훨씬 더 보편적으로 쓰이게 됐습니다. +자바스크립트는 넷스케이프의 브렌던 아이크(Brendan Eich)가 1995년에 만들었습니다. +원래 자바스크립트는 웹사이트를 위한 단순한 스크립트 언어를 목표로 만들어졌는데, +좀 더 복잡한 웹 애플리케이션을 만들기 위해 자바를 보완하는 역할이었지만 +웹 페이지와의 긴밀한 상호작용과 브라우저에 대한 지원 기능 덕분에 웹 프론트엔드에서 +자바보다 훨씬 더 보편적으로 쓰이게 됐습니다. -그렇지만 자바스크립트는 웹 브라우저에만 국한되지 않습니다. 구글 크롬의 V8 자바스크립트 +그렇지만 자바스크립트는 웹 브라우저에만 국한되지 않습니다. 구글 크롬의 V8 자바스크립트 엔진을 위한 독립형 런타임을 제공하는 Node.js는 점점 인기를 얻고 있습니다. -피드백 주시면 대단히 감사하겠습니다! [@adambrenecki](https://twitter.com/adambrenecki)나 +피드백 주시면 대단히 감사하겠습니다! [@adambrenecki](https://twitter.com/adambrenecki)나 [adam@brenecki.id.au](mailto:adam@brenecki.id.au)를 통해 저와 만나실 수 있습니다. ```js @@ -97090,7 +97090,7 @@ lang: ko-kr doStuff(); // 하지만 꼭 그럴 필요는 없는데, 특정 경우를 제외하고 -// 새 줄이 시작할 때마다 세미콜론이 자동으로 삽입되기 때문입니다. +// 새 줄이 시작할 때마다 세미콜론이 자동으로 삽입되기 때문입니다. doStuff() // 여기서는 세미콜론을 생략하겠습니다. 세미콜론을 생략할지 여부는 @@ -97117,7 +97117,7 @@ doStuff() // 32비트까지 부호가 있는 int로 변환됩니다. 1 << 2 // = 4 -// 괄호를 이용하면 우선순위를 지정할 수 있습니다. +// 괄호를 이용하면 우선순위를 지정할 수 있습니다. (1 + 3) * 2 // = 8 // 실제 숫자가 아닌 특별한 세 가지 값이 있습니다. @@ -97157,7 +97157,7 @@ false // 그리고 <와 >로 비교할 수 있습니다. "a" < "b" // = true -// 비교 시 타입 강제변환이 수행됩니다. +// 비교 시 타입 강제변환이 수행됩니다. "5" == 5 // = true // ===를 쓰지 않는다면 말이죠. @@ -97183,14 +97183,14 @@ var someVar = 5 // var 키워드를 지정하지 않아도 오류는 발생하지 않습니다. someOtherVar = 10 -// 그렇지만 변수가 여러분이 정의한 유효범위가 아니라 +// 그렇지만 변수가 여러분이 정의한 유효범위가 아니라 // 전역 유효범위에 생성됩니다. -// 값을 할당하지 않은 채로 선언한 변수는 undefined로 설정됩니다. +// 값을 할당하지 않은 채로 선언한 변수는 undefined로 설정됩니다. var someThirdVar // = undefined // 변수에 수학 연산을 수행하는 축약형 표현은 다음과 같습니다. -someVar += 5 // someVar = someVar + 5;와 같음. 이제 someVar는 10. +someVar += 5 // someVar = someVar + 5;와 같음. 이제 someVar는 10. someVar *= 10 // somVar는 100 // 1을 더하거나 빼는 훨씬 더 짧은 표현도 있습니다. @@ -97294,7 +97294,7 @@ setTimeout(function myFunction(){ // 이 코드는 5초 내에 호출됨 }, 5000) -// 자바스크립트에는 함수 유효범위가 있습니다. +// 자바스크립트에는 함수 유효범위가 있습니다. // 함수는 자체적인 유효범위를 가지지만 다른 블록은 유효범위를 가지지 않습니다. if (true){ var i = 5 @@ -97306,7 +97306,7 @@ i // = 5 - 블록 유효범위를 지원하는 언어에서는 undefined가 아 (function(){ var temporary = 5 // '전역 객체'에 할당하는 식으로 전역 유효범위에 접근할 수 있는데, - // 브라우저에서 전역 객체는 항상 'window'입니다. 전역 객체는 + // 브라우저에서 전역 객체는 항상 'window'입니다. 전역 객체는 // Node.js와 같은 브라우저가 아닌 환경에서는 다른 이름일 수도 있습니다. window.permanent = 10 // 또는 앞에서 언급했다시피 var 키워드를 뺄 수도 있습니다. @@ -97352,8 +97352,8 @@ myObj = { } myObj.myFunc() // = "Hello world!" -// 여기서 설정한 것은 함수가 정의된 곳이 아닌 함수가 호출되는 -// 방식과 관련이 있습니다. 그래서 아래 함수는 객체 컨텍스트에서 +// 여기서 설정한 것은 함수가 정의된 곳이 아닌 함수가 호출되는 +// 방식과 관련이 있습니다. 그래서 아래 함수는 객체 컨텍스트에서 // 호출되지 않으면 동작하지 않습니다. var myFunc = myObj.myFunc myFunc() // = undefined @@ -97380,8 +97380,8 @@ myNewObj.myNumber // = 5 // 해당 프로퍼티를 찾습니다. // 일부 자바스크립트 구현체에서는 __proto__라는 마법의 프로퍼티로 -// 객체의 프로토타입에 접근하는 것을 허용하기도 합니다. 프로토타입을 -// 설명하기에는 이런 내용도 도움되겠지만 __proto__는 표준에 포함돼 +// 객체의 프로토타입에 접근하는 것을 허용하기도 합니다. 프로토타입을 +// 설명하기에는 이런 내용도 도움되겠지만 __proto__는 표준에 포함돼 // 있지 않습니다. 나중에 프로토타입을 사용하는 표준 방법을 살펴보겠습니다. var myObj = { myString: "Hello world!", @@ -97406,18 +97406,18 @@ myPrototype.__proto__ = { myObj.myBoolean // = true // 여기서 복사는 일어나지 않습니다. 각 객체에는 프로토타입에 대한 -// 참조가 보관돼 있습니다. 이는 프로토타입을 변경하면 변경사항이 +// 참조가 보관돼 있습니다. 이는 프로토타입을 변경하면 변경사항이 // 모든 곳에 반영된다는 의미입니다. myPrototype.meaningOfLife = 43 myObj.meaningOfLife // = 43 -// 앞에서 __proto__가 표준에 포함돼 있지 않다고 이야기했는데, -// 기존 객체의 프로토타입을 변경하는 표준 방법은 없습니다. +// 앞에서 __proto__가 표준에 포함돼 있지 않다고 이야기했는데, +// 기존 객체의 프로토타입을 변경하는 표준 방법은 없습니다. // 하지만 특정 프로토타입을 가지고 새로운 객체를 생성하는 두 가지 // 방법이 있습니다. -// 첫 번째 방법은 Object.create를 이용하는 것인데, -// Object.create는 최근에 자바스크립트에 추가된 것이라서 아직까지 +// 첫 번째 방법은 Object.create를 이용하는 것인데, +// Object.create는 최근에 자바스크립트에 추가된 것이라서 아직까지 // 모든 구현체에서 이용할 수 있는 것은 아닙니다. var myObj = Object.create(myPrototype) myObj.meaningOfLife // = 43 @@ -97448,7 +97448,7 @@ if (0){ // 0은 거짓이라서 이 코드는 실행되지 않습니다. } -// 하지만 래퍼 객체와 일반 내장 함수는 프로토타입을 공유하기 때문에 +// 하지만 래퍼 객체와 일반 내장 함수는 프로토타입을 공유하기 때문에 // 가령 문자열에 실제로 기능을 추가할 수 있습니다. String.prototype.firstCharacter = function(){ return this.charAt(0) @@ -97459,7 +97459,7 @@ String.prototype.firstCharacter = function(){ // 새로운 기능을 구현하는 "폴리필(polyfilling)"에 자주 이용되므로 // 오래된 버전의 브라우저와 같이 기존 환경에서 사용될 수 있습니다. -// 예를 들어, Object.create가 모든 구현체에서 사용 가능한 것은 아니라고 +// 예를 들어, Object.create가 모든 구현체에서 사용 가능한 것은 아니라고 // 했지만 아래의 폴리필을 이용해 Object.create를 여전히 사용할 수 있습니다. if (Object.create === undefined){ // 이미 존재하면 덮어쓰지 않음 Object.create = function(proto){ @@ -97475,21 +97475,21 @@ if (Object.create === undefined){ // 이미 존재하면 덮어쓰지 않음 ## 기타 참고 자료 -[모질라 개발자 네트워크](https://developer.mozilla.org/en-US/docs/Web/JavaScript)에서는 -자바스크립트에 대한 훌륭한 문서를 제공합니다. 더불어 위키 형식이라서 좀 더 많은 사항을 +[모질라 개발자 네트워크](https://developer.mozilla.org/en-US/docs/Web/JavaScript)에서는 +자바스크립트에 대한 훌륭한 문서를 제공합니다. 더불어 위키 형식이라서 좀 더 많은 사항을 배우게 되면 여러분만의 지식을 공유함으로써 다른 사람들에게 도움을 줄 수도 있습니다. -MDN의 ['자바스크립트 재입문'](https://developer.mozilla.org/ko/docs/A_re-introduction_to_JavaScript)에서는 -여기서 다룬 개념의 상당수를 더욱 자세히 다루고 있습니다. 이 자료에서는 자바스크립트 언어 자체에 -대해서만 상당히 신중하게 다뤘습니다. 웹 페이지에서 자바스크립트를 사용하는 방법을 배우고 싶다면 -[문서 객체 모델(Document Object Model)](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core)에 +MDN의 ['자바스크립트 재입문'](https://developer.mozilla.org/ko/docs/A_re-introduction_to_JavaScript)에서는 +여기서 다룬 개념의 상당수를 더욱 자세히 다루고 있습니다. 이 자료에서는 자바스크립트 언어 자체에 +대해서만 상당히 신중하게 다뤘습니다. 웹 페이지에서 자바스크립트를 사용하는 방법을 배우고 싶다면 +[문서 객체 모델(Document Object Model)](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core)에 관해 배우는 것으로 시작하길 바랍니다. [자바스크립트 가든](http://bonsaiden.github.io/JavaScript-Garden/)에서는 자바스크립트 언어에서 직관에 어긋나는 모든 부분들을 심도 있게 다룹니다. -더불어 이 글에 직접적으로 기여한 분들로, 내용 중 일부는 이 사이트에 있는 -루이 딘(Louie Dihn)의 파이썬 튜토리얼과 모질라 개발자 네트워크에 있는 +더불어 이 글에 직접적으로 기여한 분들로, 내용 중 일부는 이 사이트에 있는 +루이 딘(Louie Dihn)의 파이썬 튜토리얼과 모질라 개발자 네트워크에 있는 [자바스크립트 튜토리얼](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)을 참고했습니다. --- language: json @@ -97575,7 +97575,7 @@ JSON 한 개는 반드시 이하의 둘 중 하나를 나타내야 합니다. language: kotlin contributors: - ["S Webber", "https://github.com/s-webber"] -translators: +translators: - ["Alan Jeon", "https://github.com/skyisle"] lang: ko-kr filename: LearnKotlin-kr.kt @@ -97587,14 +97587,14 @@ Kotlin 은 정적 타입 프로그래밍 언어로 JVM, 안드로이드, 브라 ```kotlin // 한 줄짜리 주석은 // 로 시작합니다. /* -여러 줄 주석은 이와 같이 표시합니다. +여러 줄 주석은 이와 같이 표시합니다. */ // "package" 예약어는 자바와 동일하게 사용됩니다. package com.learnxinyminutes.kotlin /* -Kotlin 프로그램의 진입점은 main 이라는 함수명으로 지정됩니다. +Kotlin 프로그램의 진입점은 main 이라는 함수명으로 지정됩니다. 이 함수에 명령행 인수가 배열로 전달됩니다. */ fun main(args: Array) { @@ -97625,7 +97625,7 @@ fun main(args: Array) { /* Raw 문자열은 쌍따옴표 3개(""")로 표기합니다. - Raw 문자열에는 줄바꿈이나 모든 다른 문자들을 사용할 수 있습니다. + Raw 문자열에는 줄바꿈이나 모든 다른 문자들을 사용할 수 있습니다. */ val fooRawString = """ fun helloWorld(val name : String) { @@ -97636,7 +97636,7 @@ fun helloWorld(val name : String) { /* 문자열은 템플릿 표현식을 포함할 수 있습니다. - 템플릿은 달러 기호($)로 시작합니다. + 템플릿은 달러 기호($)로 시작합니다. */ val fooTemplateString = "$fooString has ${fooString.length} characters" println(fooTemplateString) @@ -97668,7 +97668,7 @@ fun helloWorld(val name : String) { println(hello()) // => Hello, world! /* - 함수에 가변 인자를 넘기려면 인자에 "vararg" 예약어를 사용합니다. + 함수에 가변 인자를 넘기려면 인자에 "vararg" 예약어를 사용합니다. */ fun varargExample(vararg names: Int) { println("Argument has ${names.size} elements") @@ -97685,19 +97685,19 @@ fun helloWorld(val name : String) { println(odd(6)) // => false println(odd(7)) // => true - // 리턴 타입이 유추 가능한 경우 이를 명시하지 않아도 됩니다. + // 리턴 타입이 유추 가능한 경우 이를 명시하지 않아도 됩니다. fun even(x: Int) = x % 2 == 0 println(even(6)) // => true println(even(7)) // => false - // 함수는 함수를 인자를 받을 수 있고 함수를 리턴할 수 있습니다. + // 함수는 함수를 인자를 받을 수 있고 함수를 리턴할 수 있습니다. fun not(f: (Int) -> Boolean): (Int) -> Boolean { return {n -> !f.invoke(n)} } - // 함수는 :: 연산자를 사용해서 다른 함수에 인자로 넘길 수 있습니다. + // 함수는 :: 연산자를 사용해서 다른 함수에 인자로 넘길 수 있습니다. val notOdd = not(::odd) val notEven = not(::even) - // 람다식을 인자로 사용할 수 있습니다. + // 람다식을 인자로 사용할 수 있습니다. val notZero = not {n -> n == 0} /* 하나의 인자를 가지는 람다식의 선언부와 -> 연산자는 생략될 수 있습니다. @@ -97708,7 +97708,7 @@ fun helloWorld(val name : String) { println("${notOdd(i)} ${notEven(i)} ${notZero(i)} ${notPositive(i)}") } - // "class" 예약어는 클래스를 선언할 때 사용됩니다. + // "class" 예약어는 클래스를 선언할 때 사용됩니다. class ExampleClass(val x: Int) { fun memberFunction(y: Int): Int { return x + y @@ -97723,10 +97723,10 @@ fun helloWorld(val name : String) { Kotlin 에서는 new 예약어가 없다는 걸 기억하세요. */ val fooExampleClass = ExampleClass(7) - // 맴버 함수는 dot 표기로 호출할 수 있습니다. + // 맴버 함수는 dot 표기로 호출할 수 있습니다. println(fooExampleClass.memberFunction(4)) // => 11 /* - 함수 선언에 "infix" 예약어를 사용하면 이 함수를 중위 표현식(infix notation)으로 호출할 수 있습니다 + 함수 선언에 "infix" 예약어를 사용하면 이 함수를 중위 표현식(infix notation)으로 호출할 수 있습니다 */ println(fooExampleClass infixMemberFunction 4) // => 28 @@ -97738,26 +97738,26 @@ fun helloWorld(val name : String) { val fooData = DataClassExample(1, 2, 4) println(fooData) // => DataClassExample(x=1, y=2, z=4) - // 데이터 클래스는 copy 함수를 가지고 있습니다. + // 데이터 클래스는 copy 함수를 가지고 있습니다. val fooCopy = fooData.copy(y = 100) println(fooCopy) // => DataClassExample(x=1, y=100, z=4) - // 객체를 여러 변수로 분리할 수 있습니다. + // 객체를 여러 변수로 분리할 수 있습니다. val (a, b, c) = fooCopy println("$a $b $c") // => 1 100 4 - - // "for" 루프에서 변수 분리 하기 + + // "for" 루프에서 변수 분리 하기 for ((a, b, c) in listOf(fooData)) { println("$a $b $c") // => 1 100 4 } - + val mapData = mapOf("a" to 1, "b" to 2) - // Map.Entry 또한 키와 값으로 분리가 가능합니다. + // Map.Entry 또한 키와 값으로 분리가 가능합니다. for ((key, value) in mapData) { println("$key -> $value") } - // "with" 함수는 JavaScript 의 "with" 구문과 비슷하게 사용됩니다. + // "with" 함수는 JavaScript 의 "with" 구문과 비슷하게 사용됩니다. data class MutableDataClassExample (var x: Int, var y: Int, var z: Int) val fooMutableData = MutableDataClassExample(7, 4, 9) with (fooMutableData) { @@ -97775,10 +97775,10 @@ fun helloWorld(val name : String) { println(fooList.size) // => 3 println(fooList.first()) // => a println(fooList.last()) // => c - // 각 항목은 인덱스로 접근이 가능합니다. + // 각 항목은 인덱스로 접근이 가능합니다. println(fooList[1]) // => b - // 변경가능한(mutable) 리스트는 "mutableListOf" 함수로 만들 수 있습니다. + // 변경가능한(mutable) 리스트는 "mutableListOf" 함수로 만들 수 있습니다. val fooMutableList = mutableListOf("a", "b", "c") fooMutableList.add("d") println(fooMutableList.last()) // => d @@ -97925,7 +97925,7 @@ enum class EnumExample { } /* -"object" 예약어는 싱클톤 객체를 생성할 때 사용됩니다. +"object" 예약어는 싱클톤 객체를 생성할 때 사용됩니다. 객체를 새로 생성할 수는 없지만 이름을 가지고 접근해 사용할 수 있습니다. 이는 스칼라의 싱글톤 객체와 유사합니다. */ @@ -97970,9 +97970,9 @@ filename: learnlua-kr.lua ---------------------------------------------------- num = 42 -- 모든 숫자는 double입니다. --- 놀랄 필요는 없습니다. 64비트 double은 --- 정확한 int 값을 저장하기 위해 52비트로 구성돼 --- 있습니다. 52비트 이하의 int 값에 대해서는 +-- 놀랄 필요는 없습니다. 64비트 double은 +-- 정확한 int 값을 저장하기 위해 52비트로 구성돼 +-- 있습니다. 52비트 이하의 int 값에 대해서는 -- 장비 정밀도와 관련된 문제가 생기지 않습니다. s = 'walternate' -- 파이썬과 같은 불변 문자열 @@ -97991,7 +97991,7 @@ end if num > 40 then print('40 이상') elseif s ~= 'walternate' then -- ~=은 '같지 않다'입니다. - -- 동일성 검사는 파이썬과 마찬가지로 ==입니다. + -- 동일성 검사는 파이썬과 마찬가지로 ==입니다. -- 문자열에도 쓸 수 있습니다. io.write('not over 40\n') -- 기본적으로 stdout에 씁니다. else @@ -98147,7 +98147,7 @@ end ---------------------------------------------------- -- 테이블은 테이블에 연산자 오버로딩을 가능하게 하는 메타테이블을 --- 가질 수 있습니다. 나중에 메타테이블이 어떻게 자바스크립트 +-- 가질 수 있습니다. 나중에 메타테이블이 어떻게 자바스크립트 -- 프로토타입과 같은 행위를 지원하는지 살펴보겠습니다. f1 = {a = 1, b = 2} -- 분수 a/b를 표현 @@ -98169,7 +98169,7 @@ setmetatable(f2, metafraction) s = f1 + f2 -- f1의 메타테이블을 대상으로 __add(f1, f2)를 호출 --- f1과 f2는 자바스크립트의 프로토타입과 달리 각 메타테이블에 대한 +-- f1과 f2는 자바스크립트의 프로토타입과 달리 각 메타테이블에 대한 -- 키가 없어서 getmetatable(f1)과 같이 받아와야 합니다. -- 메타테이블은 __add 같은 루아가 알고 있는 키가 지정된 일반 테이블입니다. @@ -98239,11 +98239,11 @@ mrDog:makeSound() -- 'I say woof' -- 8. -- self가 값을 어떻게 얻는지 궁금하다면 아래의 7과 8을 읽어보세요. -- 3. newObj는 Dog 클래스의 인스턴스가 됩니다. -- 4. self = 인스턴스화되는 클래스. --- 주로 self = Dog이지만 상속을 이용하면 이것을 바꿀 수 있습니다. +-- 주로 self = Dog이지만 상속을 이용하면 이것을 바꿀 수 있습니다. -- newObj의 메타테이블과 self의 __index를 모두 self에 설정하면 -- newObj가 self의 함수를 갖게 됩니다. -- 5. 참고: setmetatable은 첫 번째 인자를 반환합니다. --- 6. :는 2에서 설명한 것과 같이 동작하지만 이번에는 self가 +-- 6. :는 2에서 설명한 것과 같이 동작하지만 이번에는 self가 -- 클래스가 아닌 인스턴스라고 예상할 수 있습니다. -- 7. Dog.new(Dog)과 같으므로 new()에서는 self = Dog입니다. -- 8. mrDog.makeSound(mrDog)과 같으므로 self = mrDog입니다. @@ -98268,10 +98268,10 @@ seymour:makeSound() -- 'woof woof woof' -- 4. -- 메타테이블에서 __index = Dog이기 때문에 Dog.new(LoudDog)으로 -- 변환됩니다. -- 결과: seymour의 메타테이블은 LoudDog이고 LoudDog.__index는 --- LoudDog입니다. 따라서 seymour.key는 seymour.key, +-- LoudDog입니다. 따라서 seymour.key는 seymour.key, -- LoudDog.key, Dog.key와 같을 것이며, 지정한 키에 어떤 테이블이 -- 오든 상관없을 것입니다. --- 4. 'makeSound' 키는 LoudDog에서 발견할 수 있습니다. +-- 4. 'makeSound' 키는 LoudDog에서 발견할 수 있습니다. -- 이것은 LoudDog.makeSound(seymour)와 같습니다. -- 필요할 경우, 하위 클래스의 new()는 기반 클래스의 new()와 유사합니다. @@ -98287,7 +98287,7 @@ end ---------------------------------------------------- ---[[ 여기서 주석을 제거하면 이 스크립트의 나머지 부분은 +--[[ 여기서 주석을 제거하면 이 스크립트의 나머지 부분은 -- 실행 가능한 상태가 됩니다. ``` @@ -98345,7 +98345,7 @@ g() -- 343이 출력됩니다. 그전까지는 아무것도 출력되지 않습 ## 참고자료 -루아를 배우는 일이 흥미진진했던 이유는 Love 2D 게임 엔진을 이용해 +루아를 배우는 일이 흥미진진했던 이유는 Love 2D 게임 엔진을 이용해 게임을 만들 수 있었기 때문입니다. 이것이 제가 루아를 배운 이유입니다. 저는 BlackBulletIV의 "프로그래머를 위한 루아"로 @@ -98366,7 +98366,7 @@ lua-users.org에 있는 GitHub의 Gist에서도 확인할 수 있습니다. 루아로 즐거운 시간을 보내세요! --- @@ -98455,7 +98455,7 @@ HTML `
    ` 태그를 삽입하고 싶으시다면, 두 개 이상의 띄어 새 문단을 시작할 수 있습니다. ```markdown -띄어쓰기 두 개로 끝나는 문단 (마우스로 긁어 보세요). +띄어쓰기 두 개로 끝나는 문단 (마우스로 긁어 보세요). 이 위에는 `
    ` 태그가 있습니다. ``` @@ -98702,7 +98702,7 @@ lang: ko-kr # 해시(파운드 기호로도 알려진)도 같은 역할을 하지만 //이 더 일반적으로 쓰입니다. /* - 텍스트를 슬래시-별표와 별표-슬래시로 감싸면 + 텍스트를 슬래시-별표와 별표-슬래시로 감싸면 여러 줄 주석이 만들어집니다. */ @@ -98787,7 +98787,7 @@ echo 'This string ' . 'is concatenated'; /******************************** * 상수 */ - + // 상수는 define()을 이용해 정의되며, // 런타임 동안 절대 변경될 수 없습니다! @@ -99034,7 +99034,7 @@ function my_function () { echo my_function(); // => "Hello" -// 유효한 함수명은 문자나 밑줄로 시작하고, 이어서 +// 유효한 함수명은 문자나 밑줄로 시작하고, 이어서 // 임의 개수의 문자나 숫자, 밑줄이 옵니다. function add ($x, $y = 1) { // $y는 선택사항이고 기본값은 1입니다. @@ -99208,7 +99208,7 @@ $x = new MyMapClass(); echo $x->property; // __get() 메서드를 사용 $x->property = 'Something'; // __set() 메서드를 사용 -// 클래스는 추상화하거나(abstract 키워드를 사용해) +// 클래스는 추상화하거나(abstract 키워드를 사용해) // 인터페이스를 구현할 수 있습니다(implments 키워드를 사용해). // 인터페이스는 interface 키워드로 선언합니다. @@ -99289,7 +99289,7 @@ $cls->myTraitMethod(); // "I have MyTrait"을 출력 * 네임스페이스 */ -// 이 부분은 별도의 영역인데, 파일에서 처음으로 나타나는 문장은 +// 이 부분은 별도의 영역인데, 파일에서 처음으로 나타나는 문장은 // 네임스페이스 선언이어야 하기 때문입니다. 여기서는 그런 경우가 아니라고 가정합니다. True # 파이썬 모듈은 평범한 파이썬 파일에 불과합니다. -# 직접 모듈을 작성해서 그것들을 임포트할 수 있습니다. +# 직접 모듈을 작성해서 그것들을 임포트할 수 있습니다. # 모듈의 이름은 파일의 이름과 같습니다. # 다음과 같은 코드로 모듈을 구성하는 함수와 속성을 확인할 수 있습니다. @@ -100381,7 +100381,7 @@ vec ; => #(1 2 3 4) (define other 3) (swap! tmp other) (printf "tmp = ~a; other = ~a\n" tmp other) -;; `tmp` 변수는 이름 충돌을 피하기 위해 `tmp_1`로 이름이 변경된다. +;; `tmp` 변수는 이름 충돌을 피하기 위해 `tmp_1`로 이름이 변경된다. ;; (let ([tmp_1 tmp]) ;; (set! tmp other) ;; (set! other tmp_1)) @@ -100517,12 +100517,12 @@ lang: ko-kr # 문자로 이동 f # 로 건너뛰기 - t # 의 바로 뒤로 건너뛰기 + t # 의 바로 뒤로 건너뛰기 - # 예를 들어, + # 예를 들어, f< # <로 건너뛰기 t< # <의 바로 뒤로 건너뛰기 - + # 단어 단위로 이동 w # 한 단어 오른쪽으로 이동 @@ -100551,7 +100551,7 @@ Vim은 **모드**의 개념에 기초를 두고 있습니다. ``` i # 커서 위치 앞에서 삽입 모드로 변경 a # 커서 위치 뒤에서 삽입 모드로 변경 - v # 비주얼 모드로 변경 + v # 비주얼 모드로 변경 : # 실행 모드로 변경 # 현재 모드를 벗어나 명령어 모드로 변경 @@ -100570,7 +100570,7 @@ Vim은 **모드**의 개념에 기초를 두고 있습니다. Vim의 명령어는 '서술어-수식어-목적어'로 생각할 수 있습니다. -서술어 - 취할 동작 +서술어 - 취할 동작 수식어 - 동작을 취할 방식 목적어 - 동작을 취할 객체 @@ -100578,7 +100578,7 @@ Vim의 명령어는 '서술어-수식어-목적어'로 생각할 수 있습니 ``` # '서술어' - + d # 지운다 c # 바꾼다 y # 복사한다 @@ -100600,7 +100600,7 @@ Vim의 명령어는 '서술어-수식어-목적어'로 생각할 수 있습니 s # 문장을 p # 문단을 b # 블락을 - + # 예시 '문장' (명령어) d2w # 단어 2개를 지운다 @@ -100644,7 +100644,7 @@ Vim의 명령어는 '서술어-수식어-목적어'로 생각할 수 있습니 ``` " ~/.vimrc 예시 -" 2015.10 +" 2015.10 " vim이 iMprove 되려면 필요 set nocompatible @@ -100908,10 +100908,10 @@ YAML은 마치 파이썬처럼 개행과 들여쓰기에 문법적으로 의미 # 쓸 수 있습니다. 리터럴_블락: | 개행을 포함한 이 모든 덩어리가 '리터럴_블락' 키에 대응하는 값이 될 것입니다. - + 리터럴 값은 들여쓰기가 끝날 때까지 계속되며 들여쓰기는 문자열에 포함되지 않습니다. - + '들여쓰기를 더 한' 줄은 나머지 들여쓰기를 유지합니다. 이 줄은 띄어쓰기 4개만큼 들여쓰기 됩니다. 접는_방식: > @@ -101105,7 +101105,7 @@ fun helloWorld(val name : String) { A template expression starts with a dollar sign ($). */ val fooTemplateString = "$fooString has ${fooString.length} characters" - println(fooTemplateString) // => My String Is Here! has 18 characters + println(fooTemplateString) // => My String Is Here! has 18 characters /* For a variable to hold null it must be explicitly specified as nullable. @@ -101215,12 +101215,12 @@ fun helloWorld(val name : String) { // Objects can be destructured into multiple variables. val (a, b, c) = fooCopy println("$a $b $c") // => 1 100 4 - + // destructuring in "for" loop for ((a, b, c) in listOf(fooData)) { println("$a $b $c") // => 1 100 4 } - + val mapData = mapOf("a" to 1, "b" to 2) // Map.Entry is destructurable as well for ((key, value) in mapData) { @@ -101445,8 +101445,8 @@ filename: learn-latex.tex % Next we define the packages the document uses. % If you want to include graphics, colored text, or -% source code from another language file into your document, -% you need to enhance the capabilities of LaTeX. This is done by adding packages. +% source code from another language file into your document, +% you need to enhance the capabilities of LaTeX. This is done by adding packages. % I'm going to include the float and caption packages for figures % and hyperref package for hyperlinks \usepackage{caption} @@ -101461,14 +101461,14 @@ Svetlana Golubeva} % Now we're ready to begin the document % Everything before this line is called "The Preamble" -\begin{document} -% if we set the author, date, title fields, we can have LaTeX +\begin{document} +% if we set the author, date, title fields, we can have LaTeX % create a title page for us. \maketitle % If we have sections, we can create table of contents. We have to compile our % document twice to make it appear in right order. -% It is a good practice to separate the table of contents form the body of the +% It is a good practice to separate the table of contents form the body of the % document. To do so we use \newpage command \newpage \tableofcontents @@ -101477,14 +101477,14 @@ Svetlana Golubeva} % Most research papers have abstract, you can use the predefined commands for this. % This should appear in its logical order, therefore, after the top matter, -% but before the main sections of the body. +% but before the main sections of the body. % This command is available in the document classes article and report. \begin{abstract} \LaTeX \hspace{1pt} documentation written as \LaTeX! How novel and totally not my idea! \end{abstract} -% Section commands are intuitive. +% Section commands are intuitive. % All the titles of the sections are added automatically to the table of contents. \section{Introduction} Hello, my name is Colton and together we're going to explore \LaTeX! @@ -101500,16 +101500,16 @@ Much better now. \label{subsec:pythagoras} % By using the asterisk we can suppress LaTeX's inbuilt numbering. -% This works for other LaTeX commands as well. -\section*{This is an unnumbered section} +% This works for other LaTeX commands as well. +\section*{This is an unnumbered section} However not all sections have to be numbered! \section{Some Text notes} %\section{Spacing} % Need to add more information about space intervals \LaTeX \hspace{1pt} is generally pretty good about placing text where it should -go. If -a line \\ needs \\ to \\ break \\ you add \textbackslash\textbackslash -\hspace{1pt} to the source code. \\ +go. If +a line \\ needs \\ to \\ break \\ you add \textbackslash\textbackslash +\hspace{1pt} to the source code. \\ \section{Lists} Lists are one of the easiest things to create in \LaTeX! I need to go shopping @@ -101529,7 +101529,7 @@ tomorrow, so let's make a grocery list. \section{Math} One of the primary uses for \LaTeX \hspace{1pt} is to produce academic articles -or technical papers. Usually in the realm of math and science. As such, +or technical papers. Usually in the realm of math and science. As such, we need to be able to add special symbols to our paper! \\ Math has many symbols, far beyond what you can find on a keyboard; @@ -101537,9 +101537,9 @@ Set and relation symbols, arrows, operators, and Greek letters to name a few.\\ Sets and relations play a vital role in many mathematical research papers. Here's how you state all x that belong to X, $\forall$ x $\in$ X. \\ -% Notice how I needed to add $ signs before and after the symbols. This is -% because when writing, we are in text-mode. -% However, the math symbols only exist in math-mode. +% Notice how I needed to add $ signs before and after the symbols. This is +% because when writing, we are in text-mode. +% However, the math symbols only exist in math-mode. % We can enter math-mode from text mode with the $ signs. % The opposite also holds true. Variable can also be rendered in math-mode. % We can also enter math mode with \[\] @@ -101550,12 +101550,12 @@ My favorite Greek letter is $\xi$. I also like $\beta$, $\gamma$ and $\sigma$. I haven't found a Greek letter yet that \LaTeX \hspace{1pt} doesn't know about! \\ -Operators are essential parts of a mathematical document: -trigonometric functions ($\sin$, $\cos$, $\tan$), -logarithms and exponentials ($\log$, $\exp$), -limits ($\lim$), etc. -have per-defined LaTeX commands. -Let's write an equation to see how it's done: +Operators are essential parts of a mathematical document: +trigonometric functions ($\sin$, $\cos$, $\tan$), +logarithms and exponentials ($\log$, $\exp$), +limits ($\lim$), etc. +have per-defined LaTeX commands. +Let's write an equation to see how it's done: $\cos(2\theta) = \cos^{2}(\theta) - \sin^{2}(\theta)$ \\ Fractions (Numerator-denominators) can be written in these forms: @@ -101575,31 +101575,31 @@ We can also insert equations in an ``equation environment''. \label{eq:pythagoras} % for referencing \end{equation} % all \begin statements must have an end statement -We can then reference our new equation! +We can then reference our new equation! Eqn.~\ref{eq:pythagoras} is also known as the Pythagoras Theorem which is also -the subject of Sec.~\ref{subsec:pythagoras}. A lot of things can be labeled: +the subject of Sec.~\ref{subsec:pythagoras}. A lot of things can be labeled: figures, equations, sections, etc. Summations and Integrals are written with sum and int commands: % Some LaTeX compilers will complain if there are blank lines % In an equation environment. -\begin{equation} +\begin{equation} \sum_{i=0}^{5} f_{i} -\end{equation} -\begin{equation} +\end{equation} +\begin{equation} \int_{0}^{\infty} \mathrm{e}^{-x} \mathrm{d}x -\end{equation} +\end{equation} \section{Figures} -Let's insert a Figure. Figure placement can get a little tricky. +Let's insert a Figure. Figure placement can get a little tricky. I definitely have to lookup the placement options each time. -\begin{figure}[H] % H here denoted the placement option. +\begin{figure}[H] % H here denoted the placement option. \centering % centers the figure on the page % Inserts a figure scaled to 0.8 the width of the page. - %\includegraphics[width=0.8\linewidth]{right-triangle.png} + %\includegraphics[width=0.8\linewidth]{right-triangle.png} % Commented out for compilation purposes. Please use your imagination. \caption{Right triangle with sides $a$, $b$, $c$} \label{fig:right-triangle} @@ -101612,7 +101612,7 @@ We can also insert Tables in the same way as figures. \caption{Caption for the Table.} % the {} arguments below describe how each row of the table is drawn. % Again, I have to look these up. Each. And. Every. Time. - \begin{tabular}{c|cc} + \begin{tabular}{c|cc} Number & Last Name & First Name \\ % Column rows are separated by & \hline % a horizontal line 1 & Biggus & Dickus \\ @@ -101623,34 +101623,34 @@ We can also insert Tables in the same way as figures. \section{Getting \LaTeX \hspace{1pt} to not compile something (i.e. Source Code)} Let's say we want to include some code into our \LaTeX \hspace{1pt} document, we would then need \LaTeX \hspace{1pt} to not try and interpret that text and -instead just print it to the document. We do this with a verbatim -environment. +instead just print it to the document. We do this with a verbatim +environment. % There are other packages that exist (i.e. minty, lstlisting, etc.) % but verbatim is the bare-bones basic one. -\begin{verbatim} +\begin{verbatim} print("Hello World!") - a%b; % look! We can use % signs in verbatim. + a%b; % look! We can use % signs in verbatim. random = 4; #decided by fair random dice roll \end{verbatim} -\section{Compiling} +\section{Compiling} -By now you're probably wondering how to compile this fabulous document +By now you're probably wondering how to compile this fabulous document and look at the glorious glory that is a \LaTeX \hspace{1pt} pdf. (yes, this document actually does compile). \\ -Getting to the final document using \LaTeX \hspace{1pt} consists of the following +Getting to the final document using \LaTeX \hspace{1pt} consists of the following steps: \begin{enumerate} \item Write the document in plain text (the ``source code''). - \item Compile source code to produce a pdf. + \item Compile source code to produce a pdf. The compilation step looks like this (in Linux): \\ - \begin{verbatim} + \begin{verbatim} > pdflatex learn-latex.tex \end{verbatim} \end{enumerate} -A number of \LaTeX \hspace{1pt}editors combine both Step 1 and Step 2 in the +A number of \LaTeX \hspace{1pt}editors combine both Step 1 and Step 2 in the same piece of software. So, you get to see Step 1, but not Step 2 completely. Step 2 is still happening behind the scenes\footnote{In cases, where you use references (like Eqn.~\ref{eq:pythagoras}), you may need to run Step 2 @@ -101664,17 +101664,17 @@ format you defined in Step 1. \section{Hyperlinks} We can also insert hyperlinks in our document. To do so we need to include the package hyperref into preamble with the command: -\begin{verbatim} +\begin{verbatim} \usepackage{hyperref} \end{verbatim} There exists two main types of links: visible URL \\ -\url{https://learnxinyminutes.com/docs/latex/}, or +\url{https://learnxinyminutes.com/docs/latex/}, or \href{https://learnxinyminutes.com/docs/latex/}{shadowed by text} -% You can not add extra-spaces or special symbols into shadowing text since it +% You can not add extra-spaces or special symbols into shadowing text since it % will cause mistakes during the compilation -This package also produces list of tumbnails in the output pdf document and +This package also produces list of tumbnails in the output pdf document and active links in the table of contents. \section{End} @@ -101686,7 +101686,7 @@ That's all for now! \begin{thebibliography}{1} % similar to other lists, the \bibitem command can be used to list items % each entry can then be cited directly in the body of the text - \bibitem{latexwiki} The amazing \LaTeX \hspace{1pt} wikibook: {\em + \bibitem{latexwiki} The amazing \LaTeX \hspace{1pt} wikibook: {\em https://en.wikibooks.org/wiki/LaTeX} \bibitem{latextutorial} An actual tutorial: {\em http://www.latex-tutorial.com} \end{thebibliography} @@ -102096,8 +102096,8 @@ contributors: - ["Pratik Karki", "https://github.com/prertik"] --- -Lisp Flavoured Erlang(LFE) is a functional, concurrent, general-purpose programming -language and Lisp dialect(Lisp-2) built on top of Core Erlang and the Erlang Virtual Machine(BEAM). +Lisp Flavoured Erlang(LFE) is a functional, concurrent, general-purpose programming +language and Lisp dialect(Lisp-2) built on top of Core Erlang and the Erlang Virtual Machine(BEAM). LFE can be obtained from [LFE](https://github.com/rvirding/lfe) @@ -102146,7 +102146,7 @@ t ; another atom which denotes true. ;; Libraries can be used directly from the Erlang ecosystem. Rebar3 is the build tool. ;; LFE is usually developed with a text editor(preferably Emacs) and a REPL -;; (Read Evaluate Print Loop) running at the same time. The REPL +;; (Read Evaluate Print Loop) running at the same time. The REPL ;; allows for interactive exploration of the program as it is "live" ;; in the system. @@ -102167,7 +102167,7 @@ t ; another atom which denotes true. #\x1f42d; ;Character notation with the value in hexadecimal ;;; Floating point numbers -1.0 +2.0 -1.5 1.0e10 1.111e-10 +1.0 +2.0 -1.5 1.0e10 1.111e-10 ;;; Strings @@ -102176,7 +102176,7 @@ t ; another atom which denotes true. "Cat: \x1f639;" ; writing unicode in string for regular font ending with semicolon. #"This is a binary string \n with some \"escaped\" and quoted (\x1f639;) characters" -; Binary strings are just strings but function different in the VM. +; Binary strings are just strings but function different in the VM. ; Other ways of writing it are: #B("a"), #"a", and #B(97). @@ -102205,7 +102205,7 @@ t ; another atom which denotes true. ;;; Symbols: Things that cannot be parsed. Eg: foo, Foo, foo-bar, :foo | foo | ; explicit construction of symbol by wrapping vertical bars. -;;; Evaluation +;;; Evaluation ;; #.(... some expression ...). E.g. '#.(+ 1 1) will evaluate the (+ 1 1) while it ;; reads the expression and then be effectively '2. @@ -102280,8 +102280,8 @@ lfe> (list-comp ;; 3. Macros ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Macros are part of the language to allow you to create abstractions -;; on top of the core language and standard library that move you closer +;; Macros are part of the language to allow you to create abstractions +;; on top of the core language and standard library that move you closer ;; toward being able to directly express the things you want to express. ;; Top-level function @@ -102306,7 +102306,7 @@ lfe> (list-comp ((argpat ...) ...) ...) -;; Top-level macro using Scheme inspired syntax-rules format +;; Top-level macro using Scheme inspired syntax-rules format (defsyntax name (pat exp) @@ -102317,7 +102317,7 @@ lfe> (list-comp (macrolet ((name (arg ... ) ... ) ... ) ... ) - + (syntaxlet ((name (pat exp) ...) ...) ...) @@ -102349,9 +102349,9 @@ lfe> (list-comp ;; [P|Ps]=All (= (cons p ps) all) _ ; => is don't care while pattern matching - + (= pattern1 pattern2) ; => easier, better version of pattern matching - + ;; Guards ;; Whenever pattern occurs(let, case, receive, lc, etc) it can be followed by an optional @@ -102407,19 +102407,19 @@ lfe>msg ;; Functions are bound by top-level defun, flet and fletrec. ;; Macros are bound by top-level defmacro/defsyntax and by macrolet/syntaxlet. -;; (funcall func arg ...) like CL to call lambdas/match-lambdas +;; (funcall func arg ...) like CL to call lambdas/match-lambdas ;; (funs) bound to variables are used. ;; separate bindings and special for apply. -apply _F (...), +apply _F (...), apply _F/3 ( a1, a2, a3 ) - + ;; Cons'ing in function heads (defun sum (l) (sum l 0)) (defun sum (('() total) total) (((cons h t) total) (sum t (+ h total)))) - + ;; ``cons`` literal instead of constructor form (defun sum (l) (sum l 0)) (defun sum @@ -102440,7 +102440,7 @@ apply _F/3 ( a1, a2, a3 ) (receive ((tuple 'become func) (funcall func)))) - + ;; another way for receiving messages (defun universal-server () @@ -102483,7 +102483,7 @@ apply _F/3 ( a1, a2, a3 ) (defun send-message (calling-pid msg) (let ((spawned-pid (spawn 'messenger-back 'print-result ()))) (! spawned-pid (tuple calling-pid msg)))) - + ;; Multiple simultaneous HTTP Requests: (defun parse-args (flag) @@ -104388,7 +104388,7 @@ target to the most recent version of the source. Famously written over a weekend by Stuart Feldman in 1976, it is still widely used (particularly on Unix and Linux) despite many competitors and criticisms. -There are many varieties of make in existence, however this article +There are many varieties of make in existence, however this article assumes that we are using GNU make which is the standard on Linux. ```make @@ -104628,8 +104628,8 @@ filename: markdown.md --- -Markdown was created by John Gruber in 2004. It's meant to be an easy to read -and write syntax which converts easily to HTML (and now many other formats as +Markdown was created by John Gruber in 2004. It's meant to be an easy to read +and write syntax which converts easily to HTML (and now many other formats as well). Markdown also varies in implementation from one parser to a next. This @@ -104651,9 +104651,9 @@ specific to a certain parser. Markdown is a superset of HTML, so any HTML file is valid Markdown. ```markdown - ``` @@ -104838,7 +104838,7 @@ highlighting of the language you specify after the \`\`\` ## Horizontal rule -Horizontal rules (`
    `) are easily added with three or more asterisks or +Horizontal rules (`
    `) are easily added with three or more asterisks or hyphens, with or without spaces. ```markdown @@ -104922,7 +104922,7 @@ in italics, so I do this: \*this text surrounded by asterisks\*. ### Keyboard keys -In GitHub Flavored Markdown, you can use a `` tag to represent keyboard +In GitHub Flavored Markdown, you can use a `` tag to represent keyboard keys. ```markdown @@ -105391,7 +105391,7 @@ abs(x) % Magnitude of complex variable x phase(x) % Phase (or angle) of complex variable x real(x) % Returns the real part of x (i.e returns a if x = a +jb) imag(x) % Returns the imaginary part of x (i.e returns b if x = a+jb) -conj(x) % Returns the complex conjugate +conj(x) % Returns the complex conjugate % Common constants @@ -105448,23 +105448,23 @@ median % median value mean % mean value std % standard deviation perms(x) % list all permutations of elements of x -find(x) % Finds all non-zero elements of x and returns their indexes, can use comparison operators, +find(x) % Finds all non-zero elements of x and returns their indexes, can use comparison operators, % i.e. find( x == 3 ) returns indexes of elements that are equal to 3 % i.e. find( x >= 3 ) returns indexes of elements greater than or equal to 3 % Classes -% Matlab can support object-oriented programming. -% Classes must be put in a file of the class name with a .m extension. +% Matlab can support object-oriented programming. +% Classes must be put in a file of the class name with a .m extension. % To begin, we create a simple class to store GPS waypoints. % Begin WaypointClass.m classdef WaypointClass % The class name. properties % The properties of the class behave like Structures - latitude - longitude + latitude + longitude end - methods - % This method that has the same name of the class is the constructor. + methods + % This method that has the same name of the class is the constructor. function obj = WaypointClass(lat, lon) obj.latitude = lat; obj.longitude = lon; @@ -105495,12 +105495,12 @@ a.longitude = 25.0 % Methods can be called in the same way as functions ans = multiplyLatBy(a,3) -% The method can also be called using dot notation. In this case, the object +% The method can also be called using dot notation. In this case, the object % does not need to be passed to the method. ans = a.multiplyLatBy(a,1/3) -% Matlab functions can be overloaded to handle objects. -% In the method above, we have overloaded how Matlab handles +% Matlab functions can be overloaded to handle objects. +% In the method above, we have overloaded how Matlab handles % the addition of two Waypoint objects. b = WaypointClass(15.0, 32.0) c = a + b @@ -105522,7 +105522,7 @@ contributors: - ["Gabriel Chuan", "https://github.com/gczh"] --- -MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. The benefits over other formats is that it's faster and smaller. +MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. The benefits over other formats is that it's faster and smaller. In MessagePack, small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves. This makes MessagePack useful for efficient transmission over wire. @@ -105531,7 +105531,7 @@ In MessagePack, small integers are encoded into a single byte, and typical short # 0. Understanding The Structure ==== JSON, 40 Bytes UTF-8 - + ---------------------------------------------- | {"name":"John Doe","age":12} | ---------------------------------------------- @@ -105548,7 +105548,7 @@ JSON, 40 Bytes UTF-8 MessagePack, 27 Bytes UTF-8 - + ---------------------------------------------- | ‚¤name¨John Doe£age.12 | ---------------------------------------------- @@ -105702,7 +105702,7 @@ contributors: filename: LearnBash-ms.sh translators: - ["hack1m", "https://github.com/hack1m"] -lang: ms-my +lang: ms-my --- Bash adalah nama daripada unix shell, yang mana telah diagihkan sebagai shell untuk sistem operasi GNU dan sebagai shell lalai pada Linux dan Mac OS X. Hampir semua contoh di bawah boleh menjadi sebahagian daripada skrip shell atau dijalankan terus dalam shell. @@ -105982,7 +105982,7 @@ lang: ms-my Clojure ialah salah satu bahasa pengaturcaraan dalam keluarga Lisp yang dibangunkan untuk Java Virtual Machine. Ia lebih menekankan kepada konsep [functional programming](https://en.wikipedia.org/wiki/Functional_programming) jika dibandingkan -dengan Common Lisp, tetapi juga menyediakan kemudahan [STM](https://en.wikipedia.org/wiki/Software_transactional_memory) +dengan Common Lisp, tetapi juga menyediakan kemudahan [STM](https://en.wikipedia.org/wiki/Software_transactional_memory) untuk mengendalikan *state* apabila diperlukan. Gabungan tersebut membolehkan Clojure untuk mengendalikan beberapa proses serentak (*concurrency*) dengan mudah, @@ -106244,8 +106244,8 @@ keymap ; => {:a 1, :b 2, :c 3} ; Macro "thread-first" (->) memasukkan hasil perkiraan ke setiap form ; yang selepasnya, sebagai argument pertama (item yang kedua) -(-> - {:a 1 :b 2} +(-> + {:a 1 :b 2} (assoc :c 3) ;=> (assoc {:a 1 :b 2} :c 3) (dissoc :b)) ;=> (dissoc (assoc {:a 1 :b 2} :c 3) :b) @@ -106253,8 +106253,8 @@ keymap ; => {:a 1, :b 2, :c 3} ; (dissoc (assoc {:a 1 :b 2} :c 3) :b) ; dan hasilnya ialah {:a 1 :c 3} -; Yang dua anak panah pula membuat benda yang sama, tetapi memasukkan hasil perkiraan -; setiap baris ke pengakhiran form selepasnya. Cara ini berguna untuk operasi +; Yang dua anak panah pula membuat benda yang sama, tetapi memasukkan hasil perkiraan +; setiap baris ke pengakhiran form selepasnya. Cara ini berguna untuk operasi ; yang melibatkan collection: (->> (range 10) @@ -107352,7 +107352,7 @@ ul { margin-top: 2em; li { - background-color: #FF0000; + background-color: #FF0000; } } @@ -107423,7 +107423,7 @@ contributors: - ["João Farias", "https://github.com/JoaoGFarias"] translators: - ["hack1m", "https://github.com/hack1m"] -lang: ms-my +lang: ms-my --- XML adalah bahasa markup direka untuk menyimpan dan mengangkutan data. @@ -108523,8 +108523,8 @@ Variabele= 'Een string' echo $Variabele echo "$Variabele" echo '$Variabele' -# Wanneer je een variable wil toekennen, exporteren of nog anders gebruik je -# de naam zonder '$'. Als je de waarde van de variabele wilt, gebruik je een +# Wanneer je een variable wil toekennen, exporteren of nog anders gebruik je +# de naam zonder '$'. Als je de waarde van de variabele wilt, gebruik je een # '$' voor de naam. # Strings vervangen in variables @@ -108594,7 +108594,7 @@ ls # Commandos hebben opties die de uitvoer beinvloeden ls -l # Lijst elk bestand en map op een nieuwe lijn. -# Resultaten van een vorig commando kunnen doorgegeven worden aan een volgend +# Resultaten van een vorig commando kunnen doorgegeven worden aan een volgend # commando als input. # Het grep commando filter de input met een bepaald patroon. Op deze manier kunnen # we alle .txt bestanden weergeven in de huidige map. @@ -109045,14 +109045,14 @@ translators: lang: nl-nl --- -Markdown is gecreëerd door John Gruber in 2004. Het is bedoeld om met een gemakkelijke te lezen en +Markdown is gecreëerd door John Gruber in 2004. Het is bedoeld om met een gemakkelijke te lezen en schrijven syntax te zijn die gemakkelijk omgevormd kan worden naar HTML (en op heden verschillende andere formaten) ```markdown -Dit is een paragraaf. +Dit is een paragraaf. Dit is paragraaf 2. Dit is nog steeds paragraaf 2! @@ -109224,7 +109224,7 @@ plaats de tekst om weer te geven tussen [ en ] gevolgd door de link tussen ( en - ![Dit is de alt waarde van een afbeelding](http://imgur.com/myimage.jpg "Optionele titel") @@ -109461,10 +109461,10 @@ translators: lang: nl-nl --- -XML is een markuptaal die ontwikkeld is om data in te bewaren en data mee te +XML is een markuptaal die ontwikkeld is om data in te bewaren en data mee te verzenden. -Anders dan HTML specificeert XML niet hoe data getoond of geformatteerd moet worden. +Anders dan HTML specificeert XML niet hoe data getoond of geformatteerd moet worden. Het bevat de data slechts. * XML Syntax @@ -109497,17 +109497,17 @@ Het bevat de data slechts. @@ -109742,15 +109742,15 @@ translators: - ["Andreas Lindahl Flåten", "https://github.com/anlif"] lang: no-nb --- -Bash er navnet på unix skallet, som også var distribuert som skallet for GNU -operativsystemet og som standard skall på de fleste Linux distribusjoner og +Bash er navnet på unix skallet, som også var distribuert som skallet for GNU +operativsystemet og som standard skall på de fleste Linux distribusjoner og Mac OS X. [Les mer her.](http://www.gnu.org/software/bash/manual/bashref.html) ```bash #!/bin/bash -# Den første linjen i et bash skript starter med '#!' (shebang) +# Den første linjen i et bash skript starter med '#!' (shebang) # etterfulgt av stien til bash http://en.wikipedia.org/wiki/Shebang_(Unix) # Kommentarer starter med #. @@ -109765,15 +109765,15 @@ VARIABLE="En tekststreng" # Men ikke slik: VARIABLE = "En tekststreng" -# Bash vil tolke dette som at VARIABLE er en kommando den skal kjøre +# Bash vil tolke dette som at VARIABLE er en kommando den skal kjøre # og gi en feilmelding dersom kommandoen ikke finnes # Bruk av den nydeklarerte variabelen: echo $VARIABLE echo "$VARIABLE" echo '$VARIABLE' -# Når du bruker variabelen, for eksempel setter verdien eller eksporterer den, -# skriver du navnet dens uten $. Hvis du vil bruke variabelens verdi, +# Når du bruker variabelen, for eksempel setter verdien eller eksporterer den, +# skriver du navnet dens uten $. Hvis du vil bruke variabelens verdi, # skriver du $ før variabelnavnet. # Strenginnhold i en variabel kan erstattes på følgende måte: @@ -109788,7 +109788,7 @@ echo ${VARIABLE:0:7} echo ${FOO:-"StandardVerdiDersomFOOErTom"} # Dette fungerer for null (FOO=), tom streng (FOO="") og tallet null (FOO=0) -# Det finnes en rekke hendige innebygde variable, eksempel: +# Det finnes en rekke hendige innebygde variable, eksempel: echo "Siste programs returnerte verdi: $?" echo "Skript's PID: $$" echo "Antall argumenter: $#" @@ -109813,7 +109813,7 @@ fi echo "Kjøres alltid" || echo "Kjøres kun dersom første kommando feilet" echo "Kjøres alltid" && echo "Kjøres kun dersom første kommando IKKE feilet" -# For å bruke && (logisk OG) og || (logisk ELLER) sammen med if setninger, +# For å bruke && (logisk OG) og || (logisk ELLER) sammen med if setninger, # trenger man par av firkantklammer [] på hver side av et logisk uttrykk: if [ $NAME == "Steve" ] && [ $AGE -eq 15 ] then @@ -109828,7 +109828,7 @@ fi # Matematiske uttrykk skrives slik: echo $(( 10 + 5 )) -# Ulikt de fleste programmeringsspråk, så er bash et skall - det medfører at en +# Ulikt de fleste programmeringsspråk, så er bash et skall - det medfører at en # kommando i et skript kjører i en bestemt mappe i filsystemet. Du kan skrive # ut innholdet i nåværende mappe med ls kommandoen: ls @@ -109854,7 +109854,7 @@ for line in sys.stdin: print(line, file=sys.stdout) EOF -# Kjør hello.py (et python skript) +# Kjør hello.py (et python skript) # med ulike stdin, stdout, and stderr omdirigeringer: python hello.py < "input.in" python hello.py > "output.out" @@ -109892,7 +109892,7 @@ echo "There are $(ls | wc -l) items here." echo "There are `ls | wc -l` items here." # Bash har en 'case' setning som fungerer omtrent som en 'switch' i Java/C: -case "$VARIABLE" in +case "$VARIABLE" in # Skriv ønskede match med tilhørende kommandoer 0) echo "There is a zero.";; 1) echo "There is a one.";; @@ -109965,7 +109965,7 @@ grep "^foo.*bar$" file.txt grep -c "^foo.*bar$" file.txt # hvis du vil matche en bestemt streng, og ikke et regulært uttrykk # bruker du enten "fgrep" eller ekvivalenten "grep -f" -fgrep "^foo.*bar$" file.txt +fgrep "^foo.*bar$" file.txt # Les Bash sin egen dokumentasjon om innebygde konstruksjoner: @@ -109993,7 +109993,7 @@ info bash 'Bash Features' info bash 6 info --apropos bash ``` ---- +--- language: json filename: learnjson-no.json lang: no-nb @@ -110013,7 +110013,7 @@ C-stil (`//`, `/* */`) kommentarer. ```json { "nøkkel": "verdi", - + "nøkler": "må alltid være i doble anførselstegn", "tall": 0, "strings": "Hellø, wørld. Alt unicode er godkjent, også \"escaping\".", @@ -110043,7 +110043,7 @@ C-stil (`//`, `/* */`) kommentarer. [0, 0, 0, 1] ] ], - + "Alternativ": { "Kommentar": "Sjekk ut ditta!" , "plassering av komma": "Sålenge den er før verdien er det gyldig" @@ -111446,10 +111446,10 @@ language: PCRE filename: pcre.txt contributors: - ["Sachin Divekar", "http://github.com/ssd532"] - + --- -A regular expression (regex or regexp for short) is a special text string for describing a search pattern. e.g. to extract domain name from a string we can say `/^[a-z]+:/` and it will match `http:` from `http://github.com/`. +A regular expression (regex or regexp for short) is a special text string for describing a search pattern. e.g. to extract domain name from a string we can say `/^[a-z]+:/` and it will match `http:` from `http://github.com/`. PCRE (Perl Compatible Regular Expressions) is a C library implementing regex. It was written in 1997 when Perl was the de-facto choice for complex text processing tasks. The syntax for patterns used in PCRE closely resembles Perl. PCRE syntax is being used in many big projects including PHP, Apache, R to name a few. @@ -111475,18 +111475,18 @@ There are two different sets of metacharacters: ``` * Those that are recognized within square brackets. Outside square brackets. They are also called as character classes. - + ``` - + \ general escape character ^ negate the class, but only if the first character - indicates character range [ POSIX character class (only if followed by POSIX syntax) ] terminates the character class - -``` -PCRE provides some generic character types, also called as character classes. +``` + +PCRE provides some generic character types, also called as character classes. ``` \d any decimal digit \D any character that is not a decimal digit @@ -111513,10 +111513,10 @@ We will test our examples on following string `66.249.64.13 - - [18/Sep/2004:11: | ^\S+ | 66.249.64.13 | `^` means start of the line, `\S+` matches any number of non-space characters | | \+[0-9]+ | +1000 | `\+` matches the character `+` literally. `[0-9]` character class means single number. Same can be achieved using `\+\d+` | -All these examples can be tried at https://regex101.com/ +All these examples can be tried at https://regex101.com/ 1. Copy the example string in `TEST STRING` section -2. Copy regex code in `Regular Expression` section +2. Copy regex code in `Regular Expression` section 3. The web application will show the matching result @@ -112192,7 +112192,7 @@ given "foo bar" { say "Yay !"; } when $_.chars > 50 { # smart matching anything with True is True, - # i.e. (`$a ~~ True`) + # i.e. (`$a ~~ True`) # so you can also put "normal" conditionals. # This `when` is equivalent to this `if`: # if $_ ~~ ($_.chars > 50) {...} @@ -112337,7 +112337,7 @@ say @array[^10]; # you can pass arrays as subscripts and it'll return # Note : when reading an infinite list, Perl 6 will "reify" the elements # it needs, then keep them in memory. They won't be calculated more than once. # It also will never calculate more elements that are needed. -# Trying +# Trying # An array subscript can also be a closure. # It'll be called with the length as the argument @@ -114597,7 +114597,7 @@ But I'm ChildClass /********************** * Magic constants -* +* */ // Get current class name. Must be used inside a class declaration. @@ -114629,7 +114629,7 @@ echo "Current trait is " . __TRAIT__; /********************** * Error Handling -* +* */ // Simple error handling can be done with try catch block @@ -114692,11 +114692,11 @@ lang: pl-pl --- -Brainfuck (pisane małymi literami, za wyjątkiem początku zdania) jest bardzo +Brainfuck (pisane małymi literami, za wyjątkiem początku zdania) jest bardzo minimalistycznym, kompletnym w sensie Turinga, językiem programowania. Zawiera zaledwie 8 poleceń. -Możesz przetesotwać brainfucka w swojej przeglądarce, korzystając z narzędzia +Możesz przetesotwać brainfucka w swojej przeglądarce, korzystając z narzędzia [brainfuck-visualizer](http://fatiherikli.github.io/brainfuck-visualizer/). ``` @@ -114741,7 +114741,7 @@ pięć razy, uzyskując wartość 65. Następnie wyświetlamy wartość komórki , [ > + < - ] > . Ten program wczytuje znak z wejścia i umieszcza jego kod ASCII w komórce #1. -Następnie zaczyna się pętla, w której znajdują się następujące instrukcje: +Następnie zaczyna się pętla, w której znajdują się następujące instrukcje: przesunięcie wskaźnika na komórkę #2, inkrementacja wartości komóri #2, powrót do komórki #1 i dekrementacja wartości komórki #1. Instrukcje pętli wykonują się aż wartość komórki #1 osiągnie zero, a komórka #2 osiągnie @@ -114787,14 +114787,14 @@ lang: pl-pl --- -Haskell został zaprojektowany jako praktyczny, czysto funkcyjny język +Haskell został zaprojektowany jako praktyczny, czysto funkcyjny język programowania. Jest znany przede wszystkim ze względu na jego monady oraz system -typów, ale ja lubię do niego wracać przez jego elegancję. Sprawił on, że +typów, ale ja lubię do niego wracać przez jego elegancję. Sprawił on, że programowanie jest prawdziwą przyjemnością. ```haskell -- Komentarze jednolinijkowe zaczynają się od dwóch myślników -{- Komentarze wielolinijkowe należy +{- Komentarze wielolinijkowe należy zamykać w bloki klamrami. -} @@ -114869,14 +114869,14 @@ not False -- True -- Można nawet tworzyć listy nieskończone! [1..] -- lista wszystkich liczb naturalnych --- Nieskończone listy mają prawo działać, ponieważ Haskell cechuje się leniwym --- wartościowaniem. To oznacza, że obliczane są jedynie te elementy listy, --- których istotnie potrzebujemy. Możemy poprosić o tysiączny element i +-- Nieskończone listy mają prawo działać, ponieważ Haskell cechuje się leniwym +-- wartościowaniem. To oznacza, że obliczane są jedynie te elementy listy, +-- których istotnie potrzebujemy. Możemy poprosić o tysiączny element i -- dostaniemy go: [1..] !! 999 -- 1000 --- Haskell wyznaczył pierwsze tysiąc elementów listy, ale cała jej reszta +-- Haskell wyznaczył pierwsze tysiąc elementów listy, ale cała jej reszta -- jeszcze nie istnieje! Nie zostanie obliczona ich wartość, póki nie zajdzie -- taka potrzeba. @@ -114898,7 +114898,7 @@ last [1..5] -- 5 -- z dodatkowym warunkiem [x*2 | x <- [1..5], x*2 > 4] -- [6, 8, 10] --- każdy element krotki może być innego typu, jednak sama krotka musi być stałej +-- każdy element krotki może być innego typu, jednak sama krotka musi być stałej -- długości. Przykładowo: ("haskell", 1) @@ -114912,7 +114912,7 @@ snd ("haskell", 1) -- 1 -- Prosta funkcja przyjmująca dwa argumenty add a b = a + b --- Pamiętaj, że podczas stosowania ghci, interpretera Haskella, wszelkie +-- Pamiętaj, że podczas stosowania ghci, interpretera Haskella, wszelkie -- definicje muszą zostać poprzedzone słowem `let`, na przykład: -- let add a b = a + b @@ -114923,7 +114923,7 @@ add 1 2 -- 3 -- otoczona grawisami: 1 `add` 2 -- 3 --- Nazwa funkcji nie musi zawierać żadnych liter, przykładem czego jest +-- Nazwa funkcji nie musi zawierać żadnych liter, przykładem czego jest -- operator dzielenia: (//) a b = a `div` b 35 // 4 -- 8 @@ -114942,7 +114942,7 @@ fib x = fib (x - 1) + fib (x - 2) -- Dopasowanie z krotkami: foo (x, y) = (x + 1, y + 2) --- Dopasowanie z listami. Tutaj `x` jest pierwszym elementem listy, +-- Dopasowanie z listami. Tutaj `x` jest pierwszym elementem listy, -- natomiast `xs` to jej reszta (ogon). Poniższa funkcja nakłada funkcję -- na każdy z elementów listy: myMap func [] = [] @@ -114960,7 +114960,7 @@ foldl1 (\acc x -> acc + x) [1..5] -- 15 -- 4. Więcej funkcji ---------------------------------------------------- --- częściowe nakładanie: jeśli funkcja nie otrzyma wszystkich swoich argumentów, +-- częściowe nakładanie: jeśli funkcja nie otrzyma wszystkich swoich argumentów, -- zostaje cześciowo nałożona - zwraca funkcję, która przyjmuje pozostałe, -- brakujące argumenty. @@ -114974,7 +114974,7 @@ foo 5 -- 15 -- składanie funkcji: -- operator `.` składa wiele funkcji w jedną. --- Dla przykładu, foo jest funkcją, która powiększa swój argument o 10, mnoży +-- Dla przykładu, foo jest funkcją, która powiększa swój argument o 10, mnoży -- tak uzyskaną liczbę przez 4 i zwraca wynik: foo = (4*) . (10+) @@ -114983,7 +114983,7 @@ foo 5 -- 60 -- ustalanie kolejności -- Haskell posiada inny operator, `$`, który nakłada funkcję do podanego --- parametru. W przeciwieństwie do zwykłego lewostronnie łącznego nakładania +-- parametru. W przeciwieństwie do zwykłego lewostronnie łącznego nakładania -- funkcji, którego priorytet jest najwyższy (10), operator `$` posiada -- priorytet 0 i jest prawostronnie łączny. Tak niski priorytet oznacza, że -- wyrażenie po prawej traktowane jest jako parametr funkcji po lewej @@ -115002,7 +115002,7 @@ even . fib $ 7 -- fałsz -- 5. Sygnatury typów ---------------------------------------------------- --- Haskell posiada wyjątkowo silny system typów, w którym każde poprawne +-- Haskell posiada wyjątkowo silny system typów, w którym każde poprawne -- wyrażenie ma swój typ. -- Kilka podstawowych typów: @@ -115029,7 +115029,7 @@ double x = x * 2 -- wyrażenie warunkowe haskell = if 1 == 1 then "wspaniale" else "paskudnie" -- haskell = "wspaniale" --- wyrażenie warunkowe można rozbić na wiele linii, +-- wyrażenie warunkowe można rozbić na wiele linii, -- ale trzeba uważać na wcięcia w kodzie haskell = if 1 == 1 then "wspaniale" @@ -115099,14 +115099,14 @@ Nothing -- typu `Maybe a` for any `a` -- Chociaż obsługa wejścia i wyjścia nie może zostać wyjaśniona przez poznaniem -- monad, spróbujemy zrobić to częściowo --- Wykonanie programu napisanego w Haskellu wywołuje funkcję `main` +-- Wykonanie programu napisanego w Haskellu wywołuje funkcję `main` -- Musi zwrócić wartość typu `IO a` dla pewnego `a`. Przykład: main :: IO () main = putStrLn $ "Hello, sky! " ++ (say Blue) -- putStrLn has type String -> IO () --- Najłatwiej obsłużyć wejście i wyjście, kiedy program zostanie +-- Najłatwiej obsłużyć wejście i wyjście, kiedy program zostanie -- zaimplementowany jako funkcja String -> String. Funkcja -- interact :: (String -> String) -> IO () -- pobiera pewien tekst, wykonuje na nim operacje, po czym wypisuje wynik. @@ -115126,10 +115126,10 @@ sayHello = do name <- getLine -- this gets a line and gives it the name "name" putStrLn $ "Hello, " ++ name --- Ćwiczenie: napisz własną wersję `interact`, +-- Ćwiczenie: napisz własną wersję `interact`, -- która czyta tylko jedną linię wejścia. --- Kod w `sayHello` nigdy się nie wykona. Jedyną akcją, która zostanie +-- Kod w `sayHello` nigdy się nie wykona. Jedyną akcją, która zostanie -- uruchomiona, jest wartość `main`. -- Aby uruchomić `sayHello`, należy zastąpić poprzednią definicję `main` przez -- main = sayHello @@ -115158,7 +115158,7 @@ main'' = do putStrLn result putStrLn "This was all, folks!" --- Typ `IO` jest przykładem monady. Sposób w jakim Haskell używa monad do +-- Typ `IO` jest przykładem monady. Sposób w jakim Haskell używa monad do -- obsługi wejścia i wyjścia pozwala mu być czysto funkcyjnym językiem. -- Każda funkcja, która wchodzi w interakcje ze światem zewnętrznym, oznaczana -- jest jako `IO` w jej sygnaturze typu, co umożliwia odróżnianie funkcji @@ -115206,7 +115206,7 @@ Hello, Friend! ``` -Pominęliśmy wiele aspektów Haskella, wliczając w to monady. To właśnie one +Pominęliśmy wiele aspektów Haskella, wliczając w to monady. To właśnie one sprawiają, że programowanie w Haskellu sprawia tyle frajdy. Na zakończenie pokażę Tobie implementację algorytmu quicksort w Haskellu: @@ -115619,7 +115619,7 @@ None # => None "etc" is None # => False None is None # => True -# Operator 'is' testuje identyczność obiektów. Nie jest to zbyt +# Operator 'is' testuje identyczność obiektów. Nie jest to zbyt # pożyteczne, gdy działamy tylko na prostych wartościach, # ale przydaje się, gdy mamy do czynienia z obiektami. @@ -115786,7 +115786,7 @@ pelen_zbior.add(5) # pelen_zbior is now {1, 2, 3, 4, 5} inny_zbior = {3, 4, 5, 6} pelen_zbior & other_set # => {3, 4, 5} -# Suma zbiorów | +# Suma zbiorów | pelen_zbior | other_set # => {1, 2, 3, 4, 5, 6} # Różnicę zbiorów da znak - @@ -115926,7 +115926,7 @@ def setX(num): # Lokalna zmienna x nie jest tym samym co zmienna x x = num # => 43 print x # => 43 - + def setGlobalX(num): global x print x # => 5 @@ -115966,7 +115966,7 @@ class Czlowiek(object): # Atrybut klasy. Występuje we wszystkich instancjach klasy. gatunek = "H. sapiens" - + # Podstawowa inicjalizacja - wywoływana podczas tworzenia instacji. # Zauważ, że podwójne podkreślenia przed i za nazwą oznaczają # specjalne obiekty lub atrybuty wykorzystywane wewnętrznie przez Pythona. @@ -116053,9 +116053,9 @@ def podwojne_liczby(iterowalne): yield i + i # Generatory tworzą wartości w locie. -# Zamiast generować wartości raz i zapisywać je (np. w liście), +# Zamiast generować wartości raz i zapisywać je (np. w liście), # generator tworzy je na bieżąco, w wyniku iteracji. To oznacza, -# że w poniższym przykładzie wartości większe niż 15 nie będą przetworzone +# że w poniższym przykładzie wartości większe niż 15 nie będą przetworzone # w funkcji "podwojne_liczby". # Zauważ, że xrange to generator, który wykonuje tę samą operację co range. # Stworzenie listy od 1 do 900000000 zajęłoby sporo czasu i pamięci, @@ -116065,7 +116065,7 @@ def podwojne_liczby(iterowalne): # zwykle na końcu znaku podkreślenia xrange_ = xrange(1, 900000000) -# poniższa pętla będzie podwajać liczby aż do 30 +# poniższa pętla będzie podwajać liczby aż do 30 for i in podwojne_liczby(xrange_): print(i) if i >= 30: @@ -116146,7 +116146,7 @@ lang: pl-pl ```ruby # To jest komentarz -=begin +=begin To jest wielolinijkowy komentarz Nikt ich nie używa Ty też nie powinieneś @@ -116192,7 +116192,7 @@ false.class #=> FalseClass 1 != 1 #=> false 2 != 1 #=> true -# jedyną 'fałszywą' wartością poza false, jest nil +# jedyną 'fałszywą' wartością poza false, jest nil !nil #=> true !false #=> true @@ -116248,7 +116248,7 @@ puts "Drukuję!" #=> Drukuję! #=> nil -# wydrukowanie wartości bez nowej linii na końcu +# wydrukowanie wartości bez nowej linii na końcu print "Drukuję!" #=> Drukuję! => nill @@ -116271,7 +116271,7 @@ sciezka_do_projektu = '/dobra/nazwa/' sciezka = '/zla/nazwa/' # Symbole (są obiektami) -# Symbole są niezmiennymi, wielokrotnie używanymi stałymi reprezentowanymi wewnętrznie jako +# Symbole są niezmiennymi, wielokrotnie używanymi stałymi reprezentowanymi wewnętrznie jako # liczby całkowite. Często używane są zamiast stringów w celu wydajniejszego przekazywania danych :oczekujacy.class #=> Symbol @@ -116402,7 +116402,7 @@ hasz.each do |klucz, wartosc| puts "#{klucz} jest #{wartosc}" end -# Jeśli nadal potrzebujesz indeksum, możesz użyć "each_with_index" i zdefiniować +# Jeśli nadal potrzebujesz indeksum, możesz użyć "each_with_index" i zdefiniować # zmienną odpowiadającą indeksowi tablica.each_with_index do |element, indeks| puts "#{element} jest numerem #{indeks} w tablicy" @@ -116728,10 +116728,10 @@ filename: LearnVim-pl.txt [Vim](http://www.vim.org) -(Vi IMproved) jest klonem popularnego edytora vi dla systemów Unix. -Zaprojektowany z myślą o prędkości edycji i zwiększeniu produktywności jest -wszechobecny na systemach UNIXopodobnych. Posiada wiele skrótów klawiszowych -do szybkiej nawigacji do wybranych miejsc w plikach oraz szybkiej edycji +(Vi IMproved) jest klonem popularnego edytora vi dla systemów Unix. +Zaprojektowany z myślą o prędkości edycji i zwiększeniu produktywności jest +wszechobecny na systemach UNIXopodobnych. Posiada wiele skrótów klawiszowych +do szybkiej nawigacji do wybranych miejsc w plikach oraz szybkiej edycji danych fragmentów. ## Podstawy nawigacji w Vim @@ -116772,12 +116772,12 @@ danych fragmentów. # Skoki do znaków f # Skocz do przodu i zatrzymaj się na - t # Skocz do przodu i zatrzymaj się przed + t # Skocz do przodu i zatrzymaj się przed - # Na przykład, + # Na przykład, f< # Skocz do przodu i zatrzymaj się na < t< # Skocz do przodu i zatrzymaj się przed < - + # Moving by word w # Przesuń kursor do przodu o jedno słowo @@ -116801,7 +116801,7 @@ Vim oparty jest na koncepcji **trybów**. Command Mode - (Tryb komend) vim zaczyna w tym trybie, używany do nawigacji i wpisywania komend Insert Mode - (Tryb wprowadzania) używany do wprowadzania zmian w pliku Visual Mode - (Tryb wizualny) używany do zaznaczania tekstu i wykonywania komend na nim -Ex Mode - (Tryb Ex) +Ex Mode - (Tryb Ex) ``` i # Przechodzi to trybu wprowadzania, przed pozycją kursora @@ -116833,7 +116833,7 @@ Kilka ważnych przykładów Akcji, Modyfikatorów i Obiektów: ``` # 'Akcje' - + d # Usuń c # Zmień y # Skopiuj @@ -116855,7 +116855,7 @@ Kilka ważnych przykładów Akcji, Modyfikatorów i Obiektów: s # Zdanie p # Paragraf b # Blok - + # Przykładowe 'zdania' d2w # Usuń 2 słowa @@ -116871,7 +116871,7 @@ Kilka ważnych przykładów Akcji, Modyfikatorów i Obiektów: ``` > # Zrób wcięcie zaznaczonego bloku < # Usuń wcięcie zaznaczonego bloku - :earlier 15m # Przywróć dokument do stanu z przed 15 minut + :earlier 15m # Przywróć dokument do stanu z przed 15 minut :later 15m # Odwróć efekt poprzedniej komendy ddp # Zamień kolejnością kolejne linie, dd potem p . # Powtórz poprzednią komendę @@ -116897,7 +116897,7 @@ Poniżej zamieszczono przykładowy plik ~/.vimrc: ``` " Przykładowy ~/.vimrc -" 2016.10 +" 2016.10 " Wymagane aby korzystać z opcji iMproved set nocompatible @@ -116956,8 +116956,8 @@ language: xml filename: learnxml-pl.xml contributors: - ["João Farias", "https://github.com/JoaoGFarias"] -translators: - - ["Tomasz Janiszewski", "https://github.com/janisz"] +translators: + - ["Tomasz Janiszewski", "https://github.com/janisz"] lang: pl-pl --- @@ -116995,7 +116995,7 @@ tylko je przechowuje. @@ -129116,7 +129116,7 @@ Isto é um cabeçalho h1 Isto é um cabeçalho h2 ---------------------- - + *Este texto está em itálico* @@ -129129,12 +129129,12 @@ __E este também está._ **_E este também está_** *--Danouse! Este também__* - + ~~Este texto é processado com tachado.~~ - Este é um parágrafo. Eu estou digitando em um parágrafo, não é legal? @@ -129144,25 +129144,25 @@ Agora, eu estou no parágrado 2. Eu estou no parágrafo três. - -Termino com dois espaços (destacar-me para vê-los). +Termino com dois espaços (destacar-me para vê-los). Há um
    acima de mim! -> Este é um bloco de citação. Você pode +> Este é um bloco de citação. Você pode > Enrolar manualmente suas linhas e colocar um `>` antes de cada linha ou você pode -> deixar suas linhas ficarem muito longas e enrolar por conta própria. Não faz diferença, +> deixar suas linhas ficarem muito longas e enrolar por conta própria. Não faz diferença, > desde que eles começam com um `>`. -> Você também pode usar mais de um nível ->> De recuo? +> Você também pode usar mais de um nível +>> De recuo? > Como pura é isso? - + * Item @@ -129204,19 +129204,19 @@ tornar os números em ordem, mas isso pode não ser uma boa idéia --> * Sub-item 4. Item quatro - + Isto é código É assim, sacou? - my_array.each do |item| puts item - end + end @@ -129225,26 +129225,26 @@ John não sabia nem o que o função 'goto()' fazia! \`\`\`ruby +ruby! --> def foobar puts "Hello world!" end \`\`\` -<-- O texto acima não requer recuo, mas o GitHub vai usar a sintaxe +<-- O texto acima não requer recuo, mas o GitHub vai usar a sintaxe destacando do idioma que você especificar após a ``` --> - + *** --- -- - - +- - - **************** - - + [Click aqui!](http://test.com/) @@ -129265,46 +129265,46 @@ o texto a ser exibido entre parênteses rígidos [] seguido pela url em parênte [link1]: http://test.com/ "Legal!" [foobar]: http://foobar.biz/ "OK!" - - + -[Este] [] é um link. +[Este] [] é um link. -[este]: http://thisisalink.com/ +[este]: http://thisisalink.com/ - + - + -![Este é pairar-texto (texto alternativo) para minha imagem](http://imgur.com/myimage.jpg "Um título opcional") +![Este é pairar-texto (texto alternativo) para minha imagem](http://imgur.com/myimage.jpg "Um título opcional") - + -![Este é o pairar-texto.][Myimage] +![Este é o pairar-texto.][Myimage] -[myimage]: relative/urls/legal/image.jpg "se você precisa de um título, é aqui" +[myimage]: relative/urls/legal/image.jpg "se você precisa de um título, é aqui" - - + + - é equivalente a -[http://testwebsite.com/](http://testwebsite.com/) + é equivalente a +[http://testwebsite.com/](http://testwebsite.com/) - + - + - + -Quero digitar * Este texto entre asteriscos *, mas eu não quero que ele seja +Quero digitar * Este texto entre asteriscos *, mas eu não quero que ele seja em itálico, então eu faço o seguinte: \*Este texto entre asteriscos \*. - - + | Col1 | Col2 | Col3 | @@ -129811,10 +129811,10 @@ perms(x) % Lista todas as permutações de elementos de x % Início ClassePosicoesGPS.m classdef ClassePosicoesGPS % O nome da classe. properties % As propriedades da classe comportam-se como estruturas - latitude - longitude + latitude + longitude end - methods + methods % Este método que tem o mesmo nome da classe é o construtor. function obj = ClassePosicoesGPS(lat, lon) obj.latitude = lat; @@ -129944,7 +129944,7 @@ alguma-variavel ; => 5 ;; Acessar uma variável ainda não atribuída gera uma exceção ; x ; => Unknown variable: x : nil -;; Ligações locais: Utiliza cálculo lambda! +;; Ligações locais: Utiliza cálculo lambda! ;; 'a' e 'b' estão ligados a '1' e '2' apenas dentro de (fn ...) ((fn (a b) (+ a b)) 1 2) ; => 3 @@ -130499,9 +130499,9 @@ $sgl_quotes = '$String'; // => '$String' $dbl_quotes = "Esta é uma $sgl_quotes."; // => 'Esta é uma $String.' // Os caracteres especiais só são escapados entre aspas duplas. -$escapado = "Este contém um \t caractere tab."; +$escapado = "Este contém um \t caractere tab."; echo $escapado; //Imprime: Este contém um caractere tab. -$naoescapado = 'Este contém somente a barra e o t: \t'; +$naoescapado = 'Este contém somente a barra e o t: \t'; echo $naoescapado; //Imprime: Este contém somente a barra e o t: \t // Coloque uma variável entre chaves se necessário. @@ -130572,10 +130572,10 @@ echo('Olá Mundo!'); print('Olá Mundo!'); // O mesmo que o echo. -// echo é atualmente um construtor de linguagem, então você pode +// echo é atualmente um construtor de linguagem, então você pode // remover os parênteses. echo 'Olá Mundo!'; // Imprime: Olá Mundo! -print 'Olá Mundo!'; // O print também é - Imprime: Olá Mundo! +print 'Olá Mundo!'; // O print também é - Imprime: Olá Mundo! $paragrafo = 'parágrafo'; @@ -130618,7 +130618,7 @@ $d = '1'; // assert lança um aviso se o seu argumento não é verdadeiro -// Estas comparações serão sempre verdadeiras, mesmo que os tipos +// Estas comparações serão sempre verdadeiras, mesmo que os tipos // não sejam os mesmos. assert($a == $b); // igualdade assert($c != $a); // desigualdade @@ -130646,7 +130646,7 @@ $string = 'one'; echo $string + $string; // Imprime => 0 // Imprime 0 porque o operador + não pode fundir a string 'um' para um número -// Tipo de fundição pode ser utilizado para tratar uma variável +// Tipo de fundição pode ser utilizado para tratar uma variável // como um outro tipo $booleano = (boolean) 1; // => true @@ -130831,12 +130831,12 @@ echo $nome_funcao(1, 2); // => 3 */ 5 ifTrue: ['Yay'] False: ['Nah'] +'hello' size > 5 ifTrue: ['Yay'] False: ['Nah'] "retorna 'HaLLO'" -'hello' copyMutable mapBy: [|:c| +'hello' copyMutable mapBy: [|:c| c = 'e' ifTrue: [c capitalize] False: ['a']] ``` @@ -134193,7 +134193,7 @@ Múltiplas expressões são separadas por ponto final. ^ retorna imediatamente. ``` "retorna An 'E'! How icky!" -'hello' copyMutable mapBy: [|:c. tmp <- ''| +'hello' copyMutable mapBy: [|:c. tmp <- ''| tmp: c capitalize. tmp = 'E' ifTrue: [^ 'An \'E\'! How icky!']. c capitalize @@ -134207,7 +134207,7 @@ Blocos são realizados (completados) ao enviá-los a mensagem 'value' e herdando x: 15. "Repetidamente envia 'value' para o primeiro bloco enquanto o resultado do envio de 'value' para o segundo bloco é o objeto 'true'" - [x > 0] whileTrue: [x: x - 1]. + [x > 0] whileTrue: [x: x - 1]. x ] value ``` @@ -134218,12 +134218,12 @@ Métodos são como blocos, porém eles não estão dentro de um contexto, ao inv ``` "Aqui está um objeto com um slot atribuível 'x' e um método 'reduceXTo: y'. -Enviar a mensagem 'reduceXTo: 10' para este objeto colocará +Enviar a mensagem 'reduceXTo: 10' para este objeto colocará o objeto '10' no slot 'x' e retornará o objeto original" -(| +(| x <- 50. reduceXTo: y = ( - [x > y] whileTrue: [x: x - 1]. + [x > y] whileTrue: [x: x - 1]. self) |) . @@ -136141,12 +136141,12 @@ para agilizar a navegação para pontos específicos no arquivo, além de ediç # Pulando para caracteres específicos f # Posiciona o cursor no próximo - t # Posiciona o cursor antes do próximo + t # Posiciona o cursor antes do próximo - # Por exemplo, + # Por exemplo, f< # Posiciona o cursor no < t< # Posiciona o cursor logo antes do < - + # Movendo por palavras w # Move o cursor uma palavra a diante @@ -136170,12 +136170,12 @@ O Vim é baseado no conceito de **modos**. Modo Comando - usado para navegar e escrever comandos - o Vim já inicia nesse modo Modo Inserção - usado para fazer alterações no arquivo Modo Visual - usado para destacar textos e executar comandos neles -Modo Ex - usado para ir a linha com ':' no final da tela para executar comandos +Modo Ex - usado para ir a linha com ':' no final da tela para executar comandos ``` i # Coloca o Vim no Modo Inserção, logo antes do cursor a # Coloca o Vim no Modo Inserção, logo após o cursor - v # Coloca o Vim no Modo Visual + v # Coloca o Vim no Modo Visual : # Coloca o Vim no Modo Ex # Sai de qualquer modo que você estiver, e coloca o Vim no Modo Comando @@ -136195,7 +136195,7 @@ Modo Ex - usado para ir a linha com ':' no final da tela para executar com Podemos pensar no Vim como uma série de comendos em um formato 'Verbo-Modificador-Nome', onde: -Verbo - sua ação +Verbo - sua ação Modificador - como você executará sua ação Nome - o objeto onde você vai executar sua acão @@ -136203,7 +136203,7 @@ Alguns exemplos importantes de 'Verbos', 'Modificadores' e 'Nomes': ``` # 'Verbos' - + d # Apagar (Delete) c # Alterar (Change) y # Copiar (Yank) @@ -136225,7 +136225,7 @@ Alguns exemplos importantes de 'Verbos', 'Modificadores' e 'Nomes': s # Sentência p # Parágrafo b # Bloco - + # Exemplos de comandos d2w # Apaga 2 palavras @@ -136269,7 +136269,7 @@ Exemplo de arquivo ~/.vimrc ``` " Exemplo de ~/.vimrc -" 2015.10 +" 2015.10 " Obrigatório para rodar apenas no Vim (Vi Improved) set nocompatible @@ -136340,10 +136340,10 @@ Module Module1 module Module1 Sub Main () - ' Uma visão geral de console de aplicativos do Visual Basic antes de + ' Uma visão geral de console de aplicativos do Visual Basic antes de ' mergulharmos mais profundamente na linguagem ' Aspas simples começam comentários. - ' Para Navegar este tutorial dentro do compilador do Visual Basic, + ' Para Navegar este tutorial dentro do compilador do Visual Basic, ' eu criei um sistema de navegação. ' Este sistema de navegação vai ser explicado conforme avançarmos no ' tutorial, e você vai entender o que isso significa. @@ -136621,7 +136621,7 @@ lang: pt-br XML é uma linguagem de marcação projetada para armazenar e transportar dados. -Ao contrário de HTML, XML não especifica como exibir ou formatar os dados, +Ao contrário de HTML, XML não especifica como exibir ou formatar os dados, basta carregá-lo. * Sintaxe XML @@ -136653,26 +136653,26 @@ basta carregá-lo. - - + + computer.gif @@ -136682,10 +136682,10 @@ basta carregá-lo. * Documento bem formatado x Validação Um documento XML é bem formatado se estiver sintaticamente correto.No entanto, -é possível injetar mais restrições no documento, utilizando definições de +é possível injetar mais restrições no documento, utilizando definições de documentos, tais como DTD e XML Schema. -Um documento XML que segue uma definição de documento é chamado válido, sobre +Um documento XML que segue uma definição de documento é chamado válido, sobre esse documento. Com esta ferramenta, você pode verificar os dados XML fora da lógica da aplicação. @@ -136717,8 +136717,8 @@ com a adição de definição DTD.--> @@ -136785,10 +136785,10 @@ bloco_literal: | Todo esse bloco de texto será o valor da chave 'bloco_literal', preservando a quebra de com linhas. - O literal continua até de-dented, e a primeira identação é + O literal continua até de-dented, e a primeira identação é removida. - Quaisquer linhas que são 'mais identadas' mantém o resto de suas identações - + Quaisquer linhas que são 'mais identadas' mantém o resto de suas identações - estas linhas serão identadas com 4 espaços. estilo_compacto: > Todo esse bloco de texto será o valor de 'estilo_compacto', mas esta @@ -138868,25 +138868,25 @@ contributors: This is an adaption on the C++ intro to QT by [Aleksey Kholovchuk](https://github.com/vortexxx192 ), some of the code examples should result in the same functionality -this version just having been done using pyqt! +this version just having been done using pyqt! ```python import sys from PyQt4 import QtGui - + def window(): - # Create an application object + # Create an application object app = QtGui.QApplication(sys.argv) # Create a widget where our label will be placed in w = QtGui.QWidget() - # Add a label to the widget + # Add a label to the widget b = QtGui.QLabel(w) - # Set some text for the label + # Set some text for the label b.setText("Hello World!") - # Give some size and placement information + # Give some size and placement information w.setGeometry(100, 100, 200, 50) b.move(50, 20) - # Give our window a nice title + # Give our window a nice title w.setWindowTitle("PyQt") # Have everything display w.show() @@ -138898,10 +138898,10 @@ if __name__ == '__main__': ``` -In order to get some of the more advanced features in **pyqt** we need to start looking at building additional elements. +In order to get some of the more advanced features in **pyqt** we need to start looking at building additional elements. Here we show how to introduce a dialog popup box, useful for asking the user to confirm a decision or to provide information. -```Python +```Python import sys from PyQt4.QtGui import * from PyQt4.QtCore import * @@ -138920,7 +138920,7 @@ def window(): w.setWindowTitle("PyQt Dialog") w.show() sys.exit(app.exec_()) - + # This function should create a dialog window with a button # that waits to be clicked and then exits the program def showdialog(): @@ -140482,11 +140482,11 @@ if __name__ == '__main__': # Call the static method print(Human.grunt()) # => "*grunt*" - - # Cannot call static method with instance of object + + # Cannot call static method with instance of object # because i.grunt() will automatically put "self" (the object i) as an argument print(i.grunt()) # => TypeError: grunt() takes 0 positional arguments but 1 was given - + # Update the property for this instance i.age = 42 # Get the property @@ -140541,7 +140541,7 @@ class Batman(Human, Bat): def __init__(self, *args, **kwargs): # Typically to inherit attributes you have to call super: - #super(Batman, self).__init__(*args, **kwargs) + #super(Batman, self).__init__(*args, **kwargs) # However we are dealing with multiple inheritance here, and super() # only works with the next base class in the MRO list. # So instead we explicitly call __init__ for all ancestors. @@ -140916,7 +140916,7 @@ language: c++ filename: learnqt.cpp contributors: - ["Aleksey Kholovchuk", "https://github.com/vortexxx192"] - + --- **Qt** is a widely-known framework for developing cross-platform software that can be run on various software and hardware platforms with little or no change in the code, while having the power and speed of native applications. Though **Qt** was originally written in *C++*, there are its ports to other languages: *[PyQt](https://learnxinyminutes.com/docs/pyqt/)*, *QtRuby*, *PHP-Qt*, etc. @@ -140953,10 +140953,10 @@ GUI-related part of **Qt** is all about *widgets* and *connections* between them /* * Let's create a label and a button. * A label should appear when a button is pressed. - * + * * Qt code is speaking for itself. */ - + #include #include #include @@ -140968,10 +140968,10 @@ int main(int argc, char *argv[]) { QDialog dialogWindow; dialogWindow.show(); - - // add vertical layout + + // add vertical layout QVBoxLayout layout; - dialogWindow.setLayout(&layout); + dialogWindow.setLayout(&layout); QLabel textLabel("Thanks for pressing that button"); layout.addWidget(&textLabel); @@ -140979,7 +140979,7 @@ int main(int argc, char *argv[]) { QPushButton button("Press me"); layout.addWidget(&button); - + // show hidden label when the button is pressed QObject::connect(&button, &QPushButton::pressed, &textLabel, &QLabel::show); @@ -141268,14 +141268,14 @@ class(NaN) # "numeric" # You can do arithmetic on two vectors with length greater than 1, # so long as the larger vector's length is an integer multiple of the smaller c(1,2,3) + c(1,2,3) # 2 4 6 -# Since a single number is a vector of length one, scalars are applied +# Since a single number is a vector of length one, scalars are applied # elementwise to vectors (4 * c(1,2,3) - 2) / 2 # 1 3 5 -# Except for scalars, use caution when performing arithmetic on vectors with -# different lengths. Although it can be done, +# Except for scalars, use caution when performing arithmetic on vectors with +# different lengths. Although it can be done, c(1,2,3,1,2,3) * c(1,2) # 1 4 3 2 2 6 # Matching lengths is better practice and easier to read -c(1,2,3,1,2,3) * c(1,2,1,2,1,2) +c(1,2,3,1,2,3) * c(1,2,1,2,1,2) # CHARACTERS # There's no difference between strings and characters in R @@ -141756,82 +141756,82 @@ linearModel # outputs result of regression # => # Call: # lm(formula = price ~ time, data = list1) -# +# # Coefficients: -# (Intercept) time -# 0.1453 0.4943 +# (Intercept) time +# 0.1453 0.4943 summary(linearModel) # more verbose output from the regression # => # Call: # lm(formula = price ~ time, data = list1) # # Residuals: -# Min 1Q Median 3Q Max -# -8.3134 -3.0131 -0.3606 2.8016 10.3992 +# Min 1Q Median 3Q Max +# -8.3134 -3.0131 -0.3606 2.8016 10.3992 # # Coefficients: -# Estimate Std. Error t value Pr(>|t|) -# (Intercept) 0.14527 1.50084 0.097 0.923 +# Estimate Std. Error t value Pr(>|t|) +# (Intercept) 0.14527 1.50084 0.097 0.923 # time 0.49435 0.06379 7.749 2.44e-09 *** # --- # Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # # Residual standard error: 4.657 on 38 degrees of freedom -# Multiple R-squared: 0.6124, Adjusted R-squared: 0.6022 +# Multiple R-squared: 0.6124, Adjusted R-squared: 0.6022 # F-statistic: 60.05 on 1 and 38 DF, p-value: 2.44e-09 coef(linearModel) # extract estimated parameters # => -# (Intercept) time -# 0.1452662 0.4943490 +# (Intercept) time +# 0.1452662 0.4943490 summary(linearModel)$coefficients # another way to extract results # => # Estimate Std. Error t value Pr(>|t|) # (Intercept) 0.1452662 1.50084246 0.09678975 9.234021e-01 # time 0.4943490 0.06379348 7.74920901 2.440008e-09 -summary(linearModel)$coefficients[,4] # the p-values +summary(linearModel)$coefficients[,4] # the p-values # => -# (Intercept) time -# 9.234021e-01 2.440008e-09 +# (Intercept) time +# 9.234021e-01 2.440008e-09 # GENERAL LINEAR MODELS # Logistic regression set.seed(1) list1$success = rbinom(length(list1$time), 1, .5) # random binary -glModel <- glm(success ~ time, data = list1, +glModel <- glm(success ~ time, data = list1, family=binomial(link="logit")) glModel # outputs result of logistic regression # => -# Call: glm(formula = success ~ time, +# Call: glm(formula = success ~ time, # family = binomial(link = "logit"), data = list1) # # Coefficients: -# (Intercept) time -# 0.17018 -0.01321 -# +# (Intercept) time +# 0.17018 -0.01321 +# # Degrees of Freedom: 39 Total (i.e. Null); 38 Residual -# Null Deviance: 55.35 +# Null Deviance: 55.35 # Residual Deviance: 55.12 AIC: 59.12 summary(glModel) # more verbose output from the regression # => # Call: -# glm(formula = success ~ time, +# glm(formula = success ~ time, # family = binomial(link = "logit"), data = list1) -# Deviance Residuals: -# Min 1Q Median 3Q Max -# -1.245 -1.118 -1.035 1.202 1.327 -# +# Deviance Residuals: +# Min 1Q Median 3Q Max +# -1.245 -1.118 -1.035 1.202 1.327 +# # Coefficients: # Estimate Std. Error z value Pr(>|z|) # (Intercept) 0.17018 0.64621 0.263 0.792 # time -0.01321 0.02757 -0.479 0.632 -# +# # (Dispersion parameter for binomial family taken to be 1) # # Null deviance: 55.352 on 39 degrees of freedom # Residual deviance: 55.121 on 38 degrees of freedom # AIC: 59.121 -# +# # Number of Fisher Scoring iterations: 3 @@ -142040,7 +142040,7 @@ my-pet ; => # (list 1 2 3) ; => '(1 2 3) ;; a quote can also be used for a literal list value '(1 2 3) ; => '(1 2 3) -;; a quasiquote (represented by the backtick character) with commas +;; a quasiquote (represented by the backtick character) with commas ;; can be used to evaluate functions `(1 ,(+ 1 1) 3) ; => '(1 2 3) @@ -142884,10 +142884,10 @@ Aproape toate exemplele de mai jos pot fi parte dintr-un script sau pot fi execu ```bash #!/bin/bash -# Prima linie din script se numeste "shebang" +# Prima linie din script se numeste "shebang" # care spune sistemului cum să execute scriptul # http://en.wikipedia.org/wiki/Shebang_(Unix) -# După cum te-ai prins deja, comentariile încep cu #. +# După cum te-ai prins deja, comentariile încep cu #. # Shebang este de asemenea un comentariu. # Exemplu simplu de hello world: @@ -142908,7 +142908,7 @@ VARIABLE = "Niste text" echo $VARIABLE echo "$VARIABLE" echo '$VARIABLE' -# Atunci când folosesti variabila, o atribui, o exporți sau altfel, +# Atunci când folosesti variabila, o atribui, o exporți sau altfel, # numele ei se scrie fără $. # Daca vrei sa folosesti valoarea variabilei, atunci trebuie să folosești $. # Atentie la faptul că ' (apostrof) nu va inlocui variabla cu valoarea ei. @@ -142939,7 +142939,7 @@ read NAME # Observă faptul că nu a trebuit să declarăm o variabilă nouă echo Salut, $NAME! # Avem obisnuita instructiune "if" -# Folosește "man test" pentru mai multe informații +# Folosește "man test" pentru mai multe informații # despre instrucținea conditionala if [ $NAME -ne $USER ] then @@ -142955,7 +142955,7 @@ echo "Întotdeauna executat" && echo "Executat dacă prima instrucțiune NU esue # Expresiile apar în urmatorul format echo $(( 10 + 5 )) -# Spre deosebire de alte limbaje de programare, bash este un shell - așa că +# Spre deosebire de alte limbaje de programare, bash este un shell - așa că # funcționează in contextul directorului curent. Poți vedea fișiere și directoare # din directorul curent folosind comanda "ls": ls @@ -142963,9 +142963,9 @@ ls # Aceste comenzi au optiuni care le controlează execuțiă ls -l # Listează fiecare fișier și director pe o linie separată -# Rezultatele comenzii anterioare pot fi +# Rezultatele comenzii anterioare pot fi # trimise următoarei comenzi drept argument -# Comanda grep filtrează argumentele trimise cu sabloane. +# Comanda grep filtrează argumentele trimise cu sabloane. # Astfel putem vedea fiserele .txt din directorul curent. ls -l | grep "\.txt" @@ -142978,18 +142978,18 @@ python2 hello.py 2> "erori.err" # Daca vrei să fie concatenate datele poți folosi ">>" în loc de ">" # Comenzile pot fi înlocuite în interiorul altor comenzi folosind $( ): -# Urmatoarea comandă afișează numărul de fișiere +# Urmatoarea comandă afișează numărul de fișiere # și directoare din directorul curent echo "Sunt $(ls | wc -l) fișiere aici." # Același lucru se poate obține folosind apostroful inversat ``, -# dar nu pot fi folosite limbricate, așa ca modalitatea +# dar nu pot fi folosite limbricate, așa ca modalitatea # preferată este de a folosi $( ) echo "Sunt `ls | wc -l` fișiere aici." -# Bash folosește o instrucțiune 'case' care funcționeaza +# Bash folosește o instrucțiune 'case' care funcționeaza # în mod similar cu instructiunea switch din Java si C++ -case "$VARIABLE" in +case "$VARIABLE" in 0) echo "Este un zero.";; 1) echo "Este un unu.";; *) echo "Nu este null";; @@ -144100,7 +144100,7 @@ va fi JSON 100% valid. Din fericire codul vorbeste de la sine. ```json { "cheie": "valoare", - + "chei": "trebuie mereu inconjurate de ghilimele", "numere": 0, "stringuri": "Bunã. Tot setul unicode este permis, chiar si \"escaping\".", @@ -144130,7 +144130,7 @@ va fi JSON 100% valid. Din fericire codul vorbeste de la sine. [0, 0, 0, 1] ] ], - + "stil alternativ": { "comentariu": "ia uite la asta!" , "pozitia virgulei": "nu conteaza - daca e inaintea valorii atunci e valida" @@ -144424,7 +144424,7 @@ O versiune Python 3 va apărea în curând, în limba engleză mai întâi. """ #################################################### -## 1. Operatori şi tipuri de date primare +## 1. Operatori şi tipuri de date primare #################################################### # Avem numere @@ -144441,9 +144441,9 @@ O versiune Python 3 va apărea în curând, în limba engleză mai întâi. # automat spre valoarea mai mică 5 / 2 #=> 2 -# Pentru a folosi împărţirea fără rest avem nevoie de numere reale +# Pentru a folosi împărţirea fără rest avem nevoie de numere reale 2.0 # Acesta e un număr real -11.0 / 4.0 #=> 2.75 ahhh ... cum ne aşteptam +11.0 / 4.0 #=> 2.75 ahhh ... cum ne aşteptam # Ordinea operaţiilor se poate forţa cu paranteze (1 + 3) * 2 #=> 8 @@ -144470,7 +144470,7 @@ not False #=> True 2 <= 2 #=> True 2 >= 2 #=> True -# Comparaţiile pot fi inlănţuite! +# Comparaţiile pot fi inlănţuite! 1 < 2 < 3 #=> True 2 < 3 < 2 #=> False @@ -144481,7 +144481,7 @@ not False #=> True # Şirurile de caractere pot fi adăugate! "Hello " + "world!" #=> "Hello world!" -# Un şir de caractere poate fi folosit ca o listă +# Un şir de caractere poate fi folosit ca o listă "Acesta e un şir de caractere"[0] #=> 'A' # Caracterul % (procent) poate fi folosit pentru a formata şiruri de caractere : @@ -144490,7 +144490,7 @@ not False #=> True # O metodă mai nouă de a formata şiruri este metoda "format" # Este metoda recomandată "{0} pot fi {1}".format("şirurile", "formatate") -# Puteţi folosi cuvinte cheie dacă nu doriţi sa număraţi +# Puteţi folosi cuvinte cheie dacă nu doriţi sa număraţi "{nume} vrea să mănânce {fel}".format(nume="Bob", fel="lasagna") # "None", care reprezintă valoarea nedefinită, e un obiect @@ -144505,7 +144505,7 @@ None is None #=> True # Acastă operaţie nu e foarte folositoare cu tipuri primare, # dar e foarte folositoare cu obiecte. -# None, 0, şi şiruri de caractere goale sunt evaluate ca si fals, False. +# None, 0, şi şiruri de caractere goale sunt evaluate ca si fals, False. # Toate celelalte valori sunt adevărate, True. 0 == False #=> True "" == False #=> True @@ -144515,37 +144515,37 @@ None is None #=> True ## 2. Variabile şi colecţii #################################################### -# Printarea este uşoară -print "Eu sunt Python. Încântat de cunoştinţă!" +# Printarea este uşoară +print "Eu sunt Python. Încântat de cunoştinţă!" -# Nu este nevoie sa declari variabilele înainte de a le folosi -o_variabila = 5 # Convenţia este de a folosi caractere_minuscule_cu_underscore +# Nu este nevoie sa declari variabilele înainte de a le folosi +o_variabila = 5 # Convenţia este de a folosi caractere_minuscule_cu_underscore o_variabila #=> 5 # Dacă accesăm o variabilă nefolosită declanşăm o excepţie. # Vezi secţiunea Control de Execuţie pentru mai multe detalii despre excepţii. -alta_variabila # Declanşează o eroare de nume +alta_variabila # Declanşează o eroare de nume # "If" poate fi folosit într-o expresie. "yahoo!" if 3 > 2 else 2 #=> "yahoo!" # Listele sunt folosite pentru colecţii li = [] -# O listă poate avea valori de la început +# O listă poate avea valori de la început alta_li = [4, 5, 6] -# Se adaugă valori la sfârşitul lister cu append +# Se adaugă valori la sfârşitul lister cu append li.append(1) #li e acum [1] li.append(2) #li e acum [1, 2] li.append(4) #li e acum [1, 2, 4] li.append(3) #li este acum [1, 2, 4, 3] -# Se şterg de la sfarşit cu pop +# Se şterg de la sfarşit cu pop li.pop() #=> 3 şi li e acum [1, 2, 4] # Să o adaugăm înapoi valoarea li.append(3) # li e din nou [1, 2, 4, 3] -# Putem accesa valorile individuale dintr-o listă cu operatorul index +# Putem accesa valorile individuale dintr-o listă cu operatorul index li[0] #=> 1 # Valoarea speciala -1 pentru index accesează ultima valoare li[-1] #=> 3 @@ -144553,8 +144553,8 @@ li[-1] #=> 3 # Dacă depaşim limitele listei declanşăm o eroare IndexError li[4] # Declanşează IndexError -# Putem să ne uităm la intervale folosind sintaxa de "felii" -# În Python, intervalele sunt închise la început si deschise la sfârşit. +# Putem să ne uităm la intervale folosind sintaxa de "felii" +# În Python, intervalele sunt închise la început si deschise la sfârşit. li[1:3] #=> [2, 4] # Fără început li[2:] #=> [4, 3] @@ -144565,40 +144565,40 @@ li[:3] #=> [1, 2, 4] del li[2] # li e acum [1, 2, 3] # Listele pot fi adăugate -li + alta_li #=> [1, 2, 3, 4, 5, 6] - Notă: li si alta_li nu sunt modificate! +li + alta_li #=> [1, 2, 3, 4, 5, 6] - Notă: li si alta_li nu sunt modificate! # Concatenăm liste cu "extend()" li.extend(alta_li) # Acum li este [1, 2, 3, 4, 5, 6] -# Se verifică existenţa valorilor in lista cu "in" +# Se verifică existenţa valorilor in lista cu "in" 1 in li #=> True # Şi lungimea cu "len()" len(li) #=> 6 -# Tuplele sunt ca şi listele dar imutabile +# Tuplele sunt ca şi listele dar imutabile tup = (1, 2, 3) tup[0] #=> 1 tup[0] = 3 # Declanşează TypeError -# Pot fi folosite ca şi liste +# Pot fi folosite ca şi liste len(tup) #=> 3 tup + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6) tup[:2] #=> (1, 2) 2 in tup #=> True -# Tuplele pot fi despachetate +# Tuplele pot fi despachetate a, b, c = (1, 2, 3) # a este acum 1, b este acum 2 şi c este acum 3 -# Tuplele pot fi folosite şi fără paranteze +# Tuplele pot fi folosite şi fără paranteze d, e, f = 4, 5, 6 -# Putem inversa valori foarte uşor! +# Putem inversa valori foarte uşor! e, d = d, e # d este acum 5 şi e este acum 4 # Dicţionarele stochează chei şi o valoare pentru fiecare cheie dict_gol = {} -# Şi un dicţionar cu valori +# Şi un dicţionar cu valori dict_cu_valori = {"unu": 1, "doi": 2, "trei": 3} # Căutaţi valori cu [] @@ -144606,14 +144606,14 @@ dict_cu_valori["unu"] #=> 1 # Obţinem lista cheilor cu "keys()" dict_cu_valori.keys() #=> ["trei", "doi", "unu"] -# Notă - ordinea cheilor obţinute cu keys() nu este garantată. -# Puteţi obţine rezultate diferite de exemplul de aici. +# Notă - ordinea cheilor obţinute cu keys() nu este garantată. +# Puteţi obţine rezultate diferite de exemplul de aici. -# Obţinem valorile cu values() +# Obţinem valorile cu values() dict_cu_valori.values() #=> [3, 2, 1] # Notă - aceeaşi ca mai sus, aplicată asupra valorilor. -# Verificăm existenţa unei valori cu "in" +# Verificăm existenţa unei valori cu "in" "unu" in dict_cu_valori #=> True 1 in dict_cu_valori #=> False @@ -144624,7 +144624,7 @@ dict_cu_valori["four"] # KeyError dict_cu_valori.get("one") #=> 1 dict_cu_valori.get("four") #=> None # Metoda get poate primi ca al doilea argument o valoare care va fi returnată -# când cheia nu este prezentă. +# când cheia nu este prezentă. dict_cu_valori.get("one", 4) #=> 1 dict_cu_valori.get("four", 4) #=> 4 @@ -144638,13 +144638,13 @@ set_gol = set() # Putem crea un set cu valori un_set = set([1,2,2,3,4]) # un_set este acum set([1, 2, 3, 4]), amintiţi-vă ca mulţimile garantează unicatul! -# În Python 2.7, {} poate fi folosit pentru un set +# În Python 2.7, {} poate fi folosit pentru un set set_cu_valori = {1, 2, 2, 3, 4} # => {1 2 3 4} -# Putem adăuga valori cu add +# Putem adăuga valori cu add set_cu_valori.add(5) # set_cu_valori este acum {1, 2, 3, 4, 5} -# Putem intersecta seturi +# Putem intersecta seturi alt_set = {3, 4, 5, 6} set_cu_valori & alt_set #=> {3, 4, 5} @@ -144654,7 +144654,7 @@ set_cu_valori | alt_set #=> {1, 2, 3, 4, 5, 6} # Diferenţa între seturi se face cu - {1,2,3,4} - {2,3,5} #=> {1, 4} -# Verificăm existenţa cu "in" +# Verificăm existenţa cu "in" 2 in set_cu_valori #=> True 10 in set_cu_valori #=> False @@ -144663,14 +144663,14 @@ set_cu_valori | alt_set #=> {1, 2, 3, 4, 5, 6} ## 3. Controlul Execuţiei #################################################### -# O variabilă +# O variabilă o_variabila = 5 # Acesta este un "if". Indentarea este importanta în python! # Printează "o_variabila este mai mică ca 10" if o_variabila > 10: print "o_variabila e mai mare ca 10." -elif o_variabila < 10: # Clauza elif e opţională. +elif o_variabila < 10: # Clauza elif e opţională. print "o_variabila este mai mică ca 10." else: # Şi else e opţional. print "o_variabila este exact 10." @@ -144679,16 +144679,16 @@ else: # Şi else e opţional. """ Buclele "for" pot fi folosite pentru a parcurge liste Vom afişa: - câinele este un mamifer + câinele este un mamifer pisica este un mamifer şoarecele este un mamifer """ for animal in ["câinele", "pisica", "şoarecele"]: - # Folosim % pentru a compune mesajul + # Folosim % pentru a compune mesajul print "%s este un mamifer" % animal - + """ -"range(număr)" crează o lista de numere +"range(număr)" crează o lista de numere de la zero la numărul dat afişează: 0 @@ -144700,7 +144700,7 @@ for i in range(4): print i """ -While repetă pana când condiţia dată nu mai este adevărată. +While repetă pana când condiţia dată nu mai este adevărată. afişează: 0 1 @@ -144712,30 +144712,30 @@ while x < 4: print x x += 1 # Prescurtare pentru x = x + 1 -# Recepţionăm excepţii cu blocuri try/except +# Recepţionăm excepţii cu blocuri try/except # Acest cod e valid in Python > 2.6: try: - # Folosim "raise" pentru a declanşa o eroare + # Folosim "raise" pentru a declanşa o eroare raise IndexError("Asta este o IndexError") except IndexError as e: - pass # Pass nu face nimic. În mod normal aici ne-am ocupa de eroare. + pass # Pass nu face nimic. În mod normal aici ne-am ocupa de eroare. #################################################### ## 4. Funcţii #################################################### -# Folosim "def" pentru a defini funcţii +# Folosim "def" pentru a defini funcţii def add(x, y): print "x este %s şi y este %s" % (x, y) - return x + y # Funcţia poate returna valori cu "return" + return x + y # Funcţia poate returna valori cu "return" -# Apelăm funcţia "add" cu parametrii -add(5, 6) #=> Va afişa "x este 5 şi y este 6" şi va returna 11 +# Apelăm funcţia "add" cu parametrii +add(5, 6) #=> Va afişa "x este 5 şi y este 6" şi va returna 11 -# Altă cale de a apela funcţii: cu parametrii numiţi -add(y=6, x=5) # Ordinea parametrilor numiţi nu contează +# Altă cale de a apela funcţii: cu parametrii numiţi +add(y=6, x=5) # Ordinea parametrilor numiţi nu contează # Putem defini funcţii care primesc un număr variabil de parametrii nenumiţi # Aceşti parametrii nenumiţi se cheamă si poziţinali @@ -144749,10 +144749,10 @@ varargs(1, 2, 3) #=> (1,2,3) def keyword_args(**kwargs): return kwargs -# Hai să vedem cum merge +# Hai să vedem cum merge keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"} -# Se pot combina +# Se pot combina def all_the_args(*args, **kwargs): print args print kwargs @@ -144779,14 +144779,14 @@ def create_adder(x): add_10 = create_adder(10) add_10(3) #=> 13 -# Funcţiile pot fi anonime +# Funcţiile pot fi anonime (lambda x: x > 2)(3) #=> True -# Există funcţii de ordin superior (care operează pe alte funcţii) predefinite +# Există funcţii de ordin superior (care operează pe alte funcţii) predefinite map(add_10, [1,2,3]) #=> [11, 12, 13] filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7] -# Putem folosi scurtături de liste pentru a simplifica munca cu map si filter +# Putem folosi scurtături de liste pentru a simplifica munca cu map si filter [add_10(i) for i in [1, 2, 3]] #=> [11, 12, 13] [x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7] @@ -144794,15 +144794,15 @@ filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7] ## 5. Clase #################################################### -# Moştenim object pentru a crea o nouă clasă +# Moştenim object pentru a crea o nouă clasă class Om(object): - # Acesta este un atribut al clasei. Va fi moştenit de toate instanţele. + # Acesta este un atribut al clasei. Va fi moştenit de toate instanţele. species = "H. sapiens" - # Constructor (mai degrabă, configurator de bază) + # Constructor (mai degrabă, configurator de bază) def __init__(self, nume): - # Valoarea parametrului este stocată in atributul instanţei + # Valoarea parametrului este stocată in atributul instanţei self.nume = nume # Aceasta este o metoda a instanţei. @@ -144811,33 +144811,33 @@ class Om(object): return "%s: %s" % (self.nume, mesaj) # O metodă a clasei. Este partajată de toate instanţele. - # Va primi ca si primul argument clasa căreia îi aparţine. + # Va primi ca si primul argument clasa căreia îi aparţine. @classmethod def get_species(cls): return cls.species - # O metoda statica nu primeste un argument automat. + # O metoda statica nu primeste un argument automat. @staticmethod def exclama(): return "*Aaaaaah*" -# Instanţiem o clasă +# Instanţiem o clasă i = Om(nume="Ion") print i.spune("salut") # afişează: "Ion: salut" j = Om("George") print j.spune("ciau") # afişează George: ciau" -# Apelăm metoda clasei +# Apelăm metoda clasei i.get_species() #=> "H. sapiens" -# Modificăm atributul partajat +# Modificăm atributul partajat Om.species = "H. neanderthalensis" i.get_species() #=> "H. neanderthalensis" j.get_species() #=> "H. neanderthalensis" -# Apelăm metoda statică +# Apelăm metoda statică Om.exclama() #=> "*Aaaaaah*" @@ -144845,11 +144845,11 @@ Om.exclama() #=> "*Aaaaaah*" ## 6. Module #################################################### -# Pentru a folosi un modul, trebuie importat +# Pentru a folosi un modul, trebuie importat import math print math.sqrt(16) #=> 4 -# Putem importa doar anumite funcţii dintr-un modul +# Putem importa doar anumite funcţii dintr-un modul from math import ceil, floor print ceil(3.7) #=> 4.0 print floor(3.7) #=> 3.0 @@ -144858,11 +144858,11 @@ print floor(3.7) #=> 3.0 # Nu faceţi asta! from math import * -# Numele modulelor pot fi modificate la import, de exemplu pentru a le scurta +# Numele modulelor pot fi modificate la import, de exemplu pentru a le scurta import math as m math.sqrt(16) == m.sqrt(16) #=> True -# Modulele python sunt pur şi simplu fişiere cu cod python. +# Modulele python sunt pur şi simplu fişiere cu cod python. # Puteţi sa creaţi modulele voastre, şi sa le importaţi. # Numele modulului este acelasi cu numele fişierului. @@ -144974,7 +144974,7 @@ fi_inlocuit = "fi inlocuit" #=> "Pot fi inlocuit atunci cand folosesc dublu apostrof" -# Printeaza +# Printeaza puts "Afisez rezultate!" # Variabile @@ -144996,8 +144996,8 @@ adresa_radacina_proiect = '/nume/bun/' adresa = '/nume/nu atat de bun/' # Simbolurile (sunt obiecte) -# Simbolurile sunt constante imutabile, reutilizabile, reprezentate intern -# de o valoare numerica. Sunt deseori folosite in locul sirurilor de caractere +# Simbolurile sunt constante imutabile, reutilizabile, reprezentate intern +# de o valoare numerica. Sunt deseori folosite in locul sirurilor de caractere # pentru a da un nume reprezentativ unei valori :exemplu_simbol.class #=> Symbol @@ -145052,11 +145052,11 @@ hash.keys #=> ['culoare', 'numar'] hash['culoare'] #=> 'verde' hash['numar'] #=> 5 -# Incercand sa accesezi un element dintr-un hash +# Incercand sa accesezi un element dintr-un hash # printr-o cheie care nu exista va returna "nil". hash['nimic_aici'] #=> nil -# Incepand cu Ruby 1.9, este o sintaxa speciala +# Incepand cu Ruby 1.9, este o sintaxa speciala # pentru atunci cand se folosesc simboluri drept chei: hash_nou = { defcon: 3, actiune: true} @@ -145151,7 +145151,7 @@ def dublu(x) x * 2 end -# Functille (si toate block-urile) +# Functille (si toate block-urile) # returneaza implicit valoarea ultimei instructiuni dublu(2) #=> 4 @@ -145189,9 +145189,9 @@ incercuieste { puts 'Salut Mihai!' } # Poti trimite un block unei functii. # "&" marcheaza o referinta trimisa unui block def vizitatori(&block) - block.call "un_parametru" + block.call "un_parametru" end - + # Poti trimite o lista de argumente, care va fi convertita intr-un vector (array). # Pentru asta se foloseste ("*") def vizitatori(*vector) @@ -145223,16 +145223,16 @@ class Om @nume end - # Functionalitatea de mai sus poate fi obtinuta + # Functionalitatea de mai sus poate fi obtinuta # folosing metoda "attr_accessor" dupa cum urmeaza: attr_accessor :nume - # Metodele pentru a lua si a seta valoarea unei variabile + # Metodele pentru a lua si a seta valoarea unei variabile # pot fi de asemenea obtinute individial: attr_reader :nume attr_writer :nume - # O metoda apartinand unei clase foloseste "self" pentru a se diferentia + # O metoda apartinand unei clase foloseste "self" pentru a se diferentia # de metodele unei instante ale clasei respective # Poate fi invocata doar pe clasa, si nu pe o instanta a acesteia def self.spune(msg) @@ -145280,9 +145280,9 @@ defined? @@var #=> "class variable" Var = "Sunt o constanta" defined? Var #=> "constant" -# Clasele sunt de asemenea obiecte in ruby. Astfel incat clasele +# Clasele sunt de asemenea obiecte in ruby. Astfel incat clasele # pot avea variabile care apartin unei instante -# O variabila care apartine unei clase poate fi accesata de toate +# O variabila care apartine unei clase poate fi accesata de toate # instantele acesteia si de clasele care o extind # clasa parinte @@ -145308,7 +145308,7 @@ Muncitor.foo # 0 Om.foo = 2 # 2 Muncitor.foo # 2 -# Variabilele care apartin unei instante ale unei clase, +# Variabilele care apartin unei instante ale unei clase, # nu sunt impartite de (copii acesteia) clasele care o extind class Om @bar = 0 @@ -145424,13 +145424,13 @@ informatia, ci doar o transporta. + noduri intre tagurile de deschis si inchis.--> - - + + computer.gif @@ -145456,13 +145456,13 @@ Cu toate astea este posibil sa injectam mai multe constrangeri in document folosind definitii precum DTD si XML Schema. Un document XML ce foloseste o definitie de document este numit valid in -contextul documentului. +contextul documentului. Cu acest tool poti verifica datele XML in afara codului aplicatiei. ```xml - @@ -145648,7 +145648,7 @@ lang: ru-ru Один способ это подсчитать число элементарных операций в зависимости от различных объемов входных данных. Хотя это и приемлемое решение, тот объем -работы которого оно потребует, даже для простых алгоритмов, делает его +работы которого оно потребует, даже для простых алгоритмов, делает его использование неоправданным. Другой способ это измерить какое время алгоритм потребует для завершения на @@ -145661,7 +145661,7 @@ lang: ru-ru В первом разделе этого документа мы определили, что О-символика позволяет оценивать алгоритмы в зависимости от изменения размера входных -данных. Представим что алгоритм это функция f, n размер входных данных и +данных. Представим что алгоритм это функция f, n размер входных данных и f(n) время выполнения. Тогда для данного алгоритма f c размером входных данных n получим какое-то результирующее время выполнения f(n). Из этого можно построить график, где ось Y время выполнения, ось X размер входных @@ -145719,8 +145719,8 @@ f(n) время выполнения. Тогда для данного алго ### О-Большое О-Большое, записывается как **О**, это асимптотическая запись для оценки худшего -случая или для ограничения заданой функции сверху. Это позволяет сделать -_**асимптотическую оценку верхней границы**_ скорости роста времени выполнения +случая или для ограничения заданой функции сверху. Это позволяет сделать +_**асимптотическую оценку верхней границы**_ скорости роста времени выполнения алгоритма. Допустим `f(n)` время выполнения алгоритма и `g(n)` заданная временная сложность которая проверяется для алгоритма. Тогда `f(n)` это O(g(n)), если существуют действительные константы с (с > 0) и n0, такие @@ -145770,8 +145770,8 @@ g(n) = n ### Омега-Большое Омега-Большое, записывается как **Ω**, это асимптотическая запись для оценки лучшего случая или для ограничения заданой функции снизу. Это позволяет сделать -_**асимптотическую оценку нижней границы**_ скорости роста времени выполнения -алгоритма. +_**асимптотическую оценку нижней границы**_ скорости роста времени выполнения +алгоритма. `f(n)` принадлежит Ω(g(n)), если существуют действительные константы с (с > 0) и 0 (n0 > 0), такие что `f(n)` >= `c g(n)` для всех n > n0. @@ -146032,7 +146032,7 @@ echo "Здесь $(ls | wc -l) элементов." echo "Здесь `ls | wc -l` элементов." # В Bash есть структура case, которая похожа на switch в Java и C++: -case "$VARIABLE" in +case "$VARIABLE" in # Перечислите шаблоны для условий, которые хотите отловить 0) echo "Тут ноль.";; 1) echo "Тут один.";; @@ -146112,7 +146112,7 @@ grep "^foo.*bar$" file.txt # передайте опцию -c чтобы вывести число строк, в которых совпал шаблон grep -c "^foo.*bar$" file.txt # чтобы искать по строке, а не шаблону regex, используйте fgrep (или grep -F) -fgrep "^foo.*bar$" file.txt +fgrep "^foo.*bar$" file.txt # Читайте встроенную документацию оболочки Bash командой 'help': help @@ -146232,7 +146232,7 @@ contributors: - ["Abhishek Jaisingh", "http://github.com/abhishekjiitr"] translators: - ["Evan K.", "https://github.com/justblah"] -lang: ru-ru +lang: ru-ru --- # Двоичный (бинарный) поиск @@ -147243,7 +147243,7 @@ int main() { // long как правило занимает от 4 до 8 байт // long long занимает как минимум 64 бита long x_long = 0; - long long x_long_long = 0; + long long x_long_long = 0; // float это 32-битное число с плавающей точкой float x_float = 0.0; @@ -147307,7 +147307,7 @@ int main() { // Если между одинарными кавычками есть символ – это символьный литерал, // но это тип int, а не char (по историческим причинам). - + int cha = 'a'; // хорошо char chb = 'a'; // тоже хорошо (подразумевается преобразование int в char) @@ -147348,7 +147348,7 @@ int main() { // Правильно: int between_0_and_2 = 0 < a && a < 2; - // Логика + // Логика !3; // => 0 (логическое НЕ) !0; // => 1 1 && 1; // => 1 (логическое И) @@ -147389,7 +147389,7 @@ int main() { } // => prints "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " printf("\n"); - + //Цикл с постусловием int kk = 0; do { @@ -147422,12 +147422,12 @@ int main() { exit(-1); break; } - + /////////////////////////////////////// // Форматирование вывода /////////////////////////////////////// - // Каждое выражение в Си имеет тип, но вы можете привести один тип к другому, + // Каждое выражение в Си имеет тип, но вы можете привести один тип к другому, // если хотите (с некоторыми искажениями). int x_hex = 0x01; // Вы можете назначать переменные с помощью шестнадцатеричного кода. @@ -147442,7 +147442,7 @@ int main() { // Для определения максимального значения типов `char`, `signed char` и `unisigned char`, // соответственно используйте CHAR_MAX, SCHAR_MAX и UCHAR_MAX макросы из - + // Целые типы могут быть приведены к вещественным и наоборот. printf("%f\n", (float)100); // %f formats a float printf("%lf\n", (double)100); // %lf formats a double @@ -147487,8 +147487,8 @@ int main() { // Объявление указателя на int с адресом массива. int* x_ptr = x_array; - // x_ptr сейчас указывает на первый элемент массива (со значением 20). - // Это работает, потому что при обращении к имени массива возвращается + // x_ptr сейчас указывает на первый элемент массива (со значением 20). + // Это работает, потому что при обращении к имени массива возвращается // указатель на первый элемент. // Например, когда массив передаётся в функцию или присваивается указателю, он // неяввно преобразуется в указатель. @@ -147509,7 +147509,7 @@ int main() { printf("%d\n", x_array[1]); // => Напечатает 19 // Вы также можете динамически выделять несколько блоков памяти с помощью - // функции malloc из стандартной библиотеки, которая принимает один + // функции malloc из стандартной библиотеки, которая принимает один // аргумент типа size_t – количество байт необходимых для выделения. int *my_ptr = malloc(sizeof(*my_ptr) * 20); for (xx = 0; xx < 20; xx++) { @@ -147518,16 +147518,16 @@ int main() { // Работа с памятью с помощью указателей может давать неожиданные и // непредсказуемые результаты. - printf("%d\n", *(my_ptr + 21)); // => Напечатает кто-нибудь-знает-что? + printf("%d\n", *(my_ptr + 21)); // => Напечатает кто-нибудь-знает-что? // Скорей всего программа вылетит. - // Когда вы закончили работать с памятью, которую ранее выделили, вам необходимо + // Когда вы закончили работать с памятью, которую ранее выделили, вам необходимо // освободить её, иначе это может вызвать утечку памяти или ошибки. free(my_ptr); - // Строки это массивы символов, но обычно они представляются как + // Строки это массивы символов, но обычно они представляются как // указатели на символ (как указатели на первый элемент массива). - // Хорошей практикой считается использование `const char *' при объявлении + // Хорошей практикой считается использование `const char *' при объявлении // строчного литерала. При таком подходе литерал не может быть изменён. // (например "foo"[0] = 'a' вызовет ошибку!) @@ -148168,7 +148168,7 @@ alert "Так и знал!" if elvis? #=> if(typeof elvis !== "undefined" && elvis !== null) { alert("Так и знал!"); } # Итерации по массивам: -cubes = (math.cube num for num in list) +cubes = (math.cube num for num in list) #=>cubes = (function() { # var _i, _len, _results; # _results = []; @@ -148323,7 +148323,7 @@ element:focus {} #################### */ selector { - + /* Единицы измерения */ width: 50%; /* проценты */ font-size: 2em; /* умножается на высоту шрифта (2em - в два раза больше) */ @@ -148336,7 +148336,7 @@ selector { width: 0.4vw; /* умножается на ширину окна браузера (CSS3) */ min-height: 0.1vmin; /* наименьшее из vh и vw (CSS3) */ max-width: 0.3vmax; /* наибольшее из vh и vw (CSS3) */ - + /* Цвета */ background-color: #F6E; /* сокращенная запись шестнадцатеричного кода */ background-color: #F262E2; /* стандартная запись шестнадцатеричного кода */ @@ -148348,10 +148348,10 @@ selector { background-color: hsl(0, 100%, 50%); /* в формате hsl (CSS3) */ background-color: hsla(0, 100%, 50%, 0.3); /* в формате hsl (последний аргумент отвечает за непрозрачность цвета) (CSS3) */ - + /* Изображения */ background-image: url(/path-to-image/image.jpg); /* кавычки внутри url() опциональны */ - + /* Шрифты */ font-family: Arial; font-family: "Courier New"; /* если в названии есть пробелы, заключите его в кавычки */ @@ -148422,9 +148422,9 @@ p { property: value !important; } * `E` имеет наивысший приоритет благодаря ключевому слову `!important`. Используйте только в случае крайней необходимости. * `F` идет следующим, так как является встроенным стилем. -* `A` следующий, как самый конкретизированный. +* `A` следующий, как самый конкретизированный. конкретизированный == большее количество определителей. - В этом примере 3 определителя: 1 тег `p` + + В этом примере 3 определителя: 1 тег `p` + название класса `class1` + 1 атрибут `attr='value'` * `C` следующий. Несмотря на одинаковое с `B` количество определителей, `C` определен позже. @@ -149450,7 +149450,7 @@ square.(5) #=> 25 # Анонимные функции принимают клозы и гарды. # -# Клозы (от англ. clause) — варианты исполнения функции. +# Клозы (от англ. clause) — варианты исполнения функции. # # Гарды (от англ. guard) — охранные выражения, уточняющие сопоставление с # образцом в функциях. Гарды следуют после ключевого слова `when`. @@ -149943,7 +149943,7 @@ lang: ru-ru \ --------------------------------- Прекурсор -------------------------------- -\ Всё программирование на Форте заключается в манипулировании +\ Всё программирование на Форте заключается в манипулировании \ параметрами на стеке. 5 2 3 56 76 23 65 \ ok @@ -149955,7 +149955,7 @@ lang: ru-ru \ ---------------------------- Базовая арифметика ---------------------------- -\ Арифметика (фактически все ключевые слова требуют данных) - это манипуляция +\ Арифметика (фактически все ключевые слова требуют данных) - это манипуляция \ данными на стеке. 5 4 + \ ok @@ -149975,10 +149975,10 @@ lang: ru-ru \ --------------------------- Манипуляции со стеком --------------------------- -\ Естественно, когда мы работаем со стеком, то используем +\ Естественно, когда мы работаем со стеком, то используем \ больше полезных методов: -3 dup - \ дублировать верхний элемент в стеке +3 dup - \ дублировать верхний элемент в стеке \ (1-й становится эквивалентным 2-му): 3 - 3 2 5 swap / \ поменять местами верхний элемент со 2-м элементом: 5 / 2 6 4 5 rot .s \ сменять по очереди 3-и верхних элемента: 4 5 6 @@ -149987,20 +149987,20 @@ lang: ru-ru \ ------------------ Более продвинутые манипуляции со стеком ------------------ -1 2 3 4 tuck \ дублировать верхний елемент стека во вторую позицию: +1 2 3 4 tuck \ дублировать верхний елемент стека во вторую позицию: \ 1 2 4 3 4 ok -1 2 3 4 over \ диблировать второй елемент наверх стека: +1 2 3 4 over \ диблировать второй елемент наверх стека: \ 1 2 3 4 3 ok 1 2 3 4 2 roll \ *переместить* элемент в заданной позиции наверх стека: \ 1 3 4 2 ok -1 2 3 4 2 pick \ *дублировать* элемент в заданной позиции наверх: +1 2 3 4 2 pick \ *дублировать* элемент в заданной позиции наверх: \ 1 2 3 4 2 ok \ Внимание! Обращения к стеку индексируются с нуля. \ --------------------------- Создание новых слов ----------------------------- -\ Определение новых слов через уже известные. Двоеточие `:` переводит Форт +\ Определение новых слов через уже известные. Двоеточие `:` переводит Форт \ в режим компиляции выражения, которое заканчивается точкой с запятой `;`. : square ( n -- n ) dup * ; \ ok 5 square . \ 25 ok @@ -150010,15 +150010,15 @@ see square \ : square dup * ; ok \ -------------------------------- Зависимости -------------------------------- -\ -1 == true, 0 == false. Однако, некоторые ненулевые значения +\ -1 == true, 0 == false. Однако, некоторые ненулевые значения \ обрабатываются как true: 42 42 = \ -1 ok 12 53 = \ 0 ok \ `if` это компилируемое слово. `if` `then` . -: ?>64 ( n -- n ) dup 64 > if ." Больше чем 64!" then ; +: ?>64 ( n -- n ) dup 64 > if ." Больше чем 64!" then ; \ ok -100 ?>64 +100 ?>64 \ Больше чем 64! ok \ Else: @@ -150043,7 +150043,7 @@ myloop : one-to-12 ( -- ) 12 0 do i . loop ; \ ok one-to-12 \ 0 1 2 3 4 5 6 7 8 9 10 11 12 ok -\ `?do` работает подобным образом, за исключением пропуска начального +\ `?do` работает подобным образом, за исключением пропуска начального \ и конечного значения индекса цикла. : squares ( n -- ) 0 ?do i square . loop ; \ ok 10 squares \ 0 1 4 9 16 25 36 49 64 81 ok @@ -150063,13 +150063,13 @@ variable age \ ok \ Затем мы запишем число 21 в переменную 'age' (возраст) словом `!`. 21 age ! \ ok -\ В заключении мы можем напечатать значение переменной прочитав его словом `@`, -\ которое добавит значение на стек или использовать слово `?`, +\ В заключении мы можем напечатать значение переменной прочитав его словом `@`, +\ которое добавит значение на стек или использовать слово `?`, \ что бы прочитать и распечатать в одно действие. age @ . \ 21 ok age ? \ 21 ok -\ Константы объявляются аналогично, за исключем того, что мы не должны +\ Константы объявляются аналогично, за исключем того, что мы не должны \ беспокоиться о выделении адреса в памяти: 100 constant WATER-BOILING-POINT \ ok WATER-BOILING-POINT . \ 100 ok @@ -150079,7 +150079,7 @@ WATER-BOILING-POINT . \ 100 ok \ Создание массива похоже на объявление переменной, но нам нужно выделить \ больше памяти. -\ Вы можете использовать слова `2 cells allot` для создания массива +\ Вы можете использовать слова `2 cells allot` для создания массива \ размером 3 элемента: variable mynumbers 2 cells allot \ ok @@ -150089,7 +150089,7 @@ mynumbers 3 cells erase \ ok \ В качестве альтернативы мы можем использовать `fill`: mynumbers 3 cells 0 fill -\ или мы можем пропустить все слова выше и инициализировать массив +\ или мы можем пропустить все слова выше и инициализировать массив \ нужными значениями: create mynumbers 64 , 9001 , 1337 , \ ok (the last `,` is important!) @@ -150139,7 +150139,7 @@ myfloatingvar f@ f. \ 4.4 ok \ ---------- В завершение несколько полезных замечаний и слов ----------------- -\ Указание несуществующего слова очистит стек. Тем не менее, есть специальное +\ Указание несуществующего слова очистит стек. Тем не менее, есть специальное \ слово для этого: clearstack @@ -150271,7 +150271,7 @@ func learnTypes() { p, q := learnMemory() // Объявление p и q как указателей на int. fmt.Println(*p, *q) // * извлекает указатель. Печатает два int-а. - // Map, также как и словарь или хеш из некоторых других языков, является + // Map, также как и словарь или хеш из некоторых других языков, является // ассоциативным массивом с динамически изменяемым размером. m := map[string]int{"three": 3, "four": 4} m["one"] = 1 @@ -151067,7 +151067,7 @@ lang: ru-ru HTML расшифровывается как Hypertext Markup Language(гипертекстовый язык разметки). Это язык используют для написания страниц для World Wide Web(всемирной паутины). -Это язык разметки позволяет писать веб-страниц с помощью кода, чтобы определять, +Это язык разметки позволяет писать веб-страниц с помощью кода, чтобы определять, как должны быть отображены текст и данные. На самом деле, HTML файлы представляют собой простые текстовые файлы. Что такое разметка? Это способ организации данных страницы, @@ -151076,8 +151076,8 @@ HTML расшифровывается как Hypertext Markup Language(гипе Как и в других языках программирования, HTML имеет много версий. Здесь мы будем говорить о HTML5. -**Примечание:** Вы можете тестировать различные теги и элементы по мере продвижения -через учебник на сайте, как [codepen](http://codepen.io/pen/) для того, чтобы увидеть +**Примечание:** Вы можете тестировать различные теги и элементы по мере продвижения +через учебник на сайте, как [codepen](http://codepen.io/pen/) для того, чтобы увидеть их влияние, понять, как они работают и ознакомиться с языком. В данной статье рассматривается в основном HTML синтаксис и некоторые полезные советы. @@ -151085,7 +151085,7 @@ HTML расшифровывается как Hypertext Markup Language(гипе - + @@ -151140,7 +151140,7 @@ HTML расшифровывается как Hypertext Markup Language(гипе

    Это параграф.

    Это другой параграф.

      -
    • Это элемент в не нумерованном списке (маркированный список)
    • Это еще один элемент
    • @@ -151217,7 +151217,7 @@ import java.util.ArrayList; import java.security.*; // Каждый .java файл содержит один публичный класс, имя которого совпадает с -// именем файла. +// именем файла. public class LearnJavaRu { // Программа должна содержать метод main, который является точкой входа. @@ -151348,7 +151348,7 @@ public class LearnJavaRu { // интерфейса Map. Это позволяет сохранить постоянной // скорость выполнения базовых операций, таких как // добавление и удаление элементов, вне зависимости - // от размера множества. + // от размера множества. /////////////////////////////////////// // Операторы @@ -151634,7 +151634,7 @@ class PennyFarthing extends Bicycle { } // Интерфейсы -// Синтаксис определения интерфейса: +// Синтаксис определения интерфейса: // <модификатор доступа> interface <имя интерфейса> extends <базовый интерфейс> { // // Константы // // Определение методов @@ -151658,7 +151658,7 @@ public class Fruit implements Edible, Digestible { } public void digest() { - //... + //... } } @@ -151772,7 +151772,7 @@ doStuff() 5 / 2; // = 2.5 // Побитовые операции также имеются; когда вы проводите такую операцию, -// ваше число с плавающей запятой переводится в целое со знаком +// ваше число с плавающей запятой переводится в целое со знаком // длиной *до* 32 разрядов. 1 << 2; // = 4 @@ -151822,7 +151822,7 @@ null == undefined; // = true // ...если только не использовать === "5" === 5; // = false -null === undefined; // = false +null === undefined; // = false // ...приведение типов может привести к странному поведению... 13 + !0; // 14 @@ -151952,8 +151952,8 @@ if (color == "red" || color == "blue") { var name = otherName || "default"; // Оператор switch выполняет проверку на равенство при помощи === -// используйте break, чтобы прервать выполнение после каждого case, -// или выполнение пойдёт далее даже после правильного варианта. +// используйте break, чтобы прервать выполнение после каждого case, +// или выполнение пойдёт далее даже после правильного варианта. grade = 4; switch (grade) { case 5: @@ -151994,7 +151994,7 @@ function myFunction() myFunction(); // = undefined // В JavaScript функции — это объекты первого класса, поэтому они могут быть -// присвоены различным именам переменных и передаваться другим функциям +// присвоены различным именам переменных и передаваться другим функциям // в качестве аргументов, например, когда назначается обработчик события: function myFunction() { // этот код будет вызван через 5 секунд @@ -152028,7 +152028,7 @@ temporary; // вызовет сообщение об ошибке с типом permanent; // = 10 // Одной из самых мощных возможностей JavaScript являются замыкания. Если функция -// определена внутри другой функции, то внутренняя функция имеет доступ к +// определена внутри другой функции, то внутренняя функция имеет доступ к // переменным внешней функции даже после того, как контекст выполнения выйдет из // внешней функции. function sayHelloInFiveSeconds(name) { @@ -152067,8 +152067,8 @@ myObj = { }; myObj.myFunc(); // = "Привет, мир!" -// Значение this зависит от того, как функция вызывается, -// а не от того, где она определена. Таким образом, наша функция не работает, +// Значение this зависит от того, как функция вызывается, +// а не от того, где она определена. Таким образом, наша функция не работает, // если она вызывается не в контексте объекта. var myFunc = myObj.myFunc; myFunc(); // = undefined @@ -152097,7 +152097,7 @@ Math.min(42, 6, 27); // = 6 Math.min([42, 6, 27]); // = NaN (Ой-ой!) Math.min.apply(Math, [42, 6, 27]); // = 6 -// Но call и apply — только временные. Когда мы хотим связать функцию с объектом, +// Но call и apply — только временные. Когда мы хотим связать функцию с объектом, // мы можем использовать bind. var boundFunc = anotherFunc.bind(myObj); boundFunc(" И привет, Сатурн!"); // = "Привет, мир! И привет, Сатурн!" @@ -152216,7 +152216,7 @@ if (Object.create === undefined) { // не перезаписываем мето ## Что ещё почитать -[Современный учебник JavaScript (Илья Кантор)](http://learn.javascript.ru) — +[Современный учебник JavaScript (Илья Кантор)](http://learn.javascript.ru) — качественный учебник по JavaScript на русском языке. [Mozilla Developer Network](https://developer.mozilla.org/ru/docs/Web/JavaScript) — @@ -152250,7 +152250,7 @@ JSON - это очень простой формат обмена данными ```json { "ключ": "значение", - + "ключи": "должны всегда заключаться в двойные кавычки", "числа": 0, "строки": "Пρивет, миρ. Допускаются все unicode-символы вместе с \"экранированием\".", @@ -152280,7 +152280,7 @@ JSON - это очень простой формат обмена данными [0, 0, 0, 1] ] ], - + "альтернативный стиль": { "комментарий": "проверьте это!" , "позиция запятой": "неважна, хоть и перед значением, все равно правильно" @@ -152406,7 +152406,7 @@ catch e end # Имена переменных начинаются с букв. -# После первого символа можно использовать буквы, цифры, +# После первого символа можно использовать буквы, цифры, # символы подчёркивания и восклицательные знаки. SomeOtherVar123! = 6 # => 6 @@ -152416,7 +152416,7 @@ SomeOtherVar123! = 6 # => 6 2 * π # => 6.283185307179586 # Рекомендации по именованию: -# * имена переменных в нижнем регистре, слова разделяются символом +# * имена переменных в нижнем регистре, слова разделяются символом # подчёркивания ('\_'); # # * для имён типов используется CamelCase; @@ -152477,7 +152477,7 @@ end # Вывод ошибок содержит строку и файл, где произошла ошибка, # даже если это случилось в стандартной библиотеке. -# Если вы собрали Julia из исходных кодов, +# Если вы собрали Julia из исходных кодов, # то найти эти файлы можно в директории base. # Создавать массивы можно из последовательности @@ -152738,7 +152738,7 @@ all_the_args(1, 3, keyword_arg=4) # optional arg: 3 # keyword arg: 4 -# Функции в Julia первого класса +# Функции в Julia первого класса function create_adder(x) adder = function (y) return x + y @@ -152819,7 +152819,7 @@ sherekhan = typeof(tigger)(5.6,"fire") # => Tiger(5.6,"fire") # abstract Name abstract Cat # просто имя и точка в иерархии типов -# Объекты абстрактных типов создавать нельзя, +# Объекты абстрактных типов создавать нельзя, # но зато от них можно наследовать подтипы. # Например, Number — это абстрактный тип. subtypes(Number) # => 6 элементов в массиве Array{Any,1}: @@ -152965,15 +152965,15 @@ square_area(l) = l * l # square_area (generic function with 1 method) square_area(5) #25 # Что происходит, когда мы передаём функции square_area целое число? -code_native(square_area, (Int32,)) +code_native(square_area, (Int32,)) # .section __TEXT,__text,regular,pure_instructions # Filename: none # Source line: 1 # Вводная часть # push RBP # mov RBP, RSP # Source line: 1 - # movsxd RAX, EDI # - # imul RAX, RAX # + # movsxd RAX, EDI # + # imul RAX, RAX # # pop RBP # # ret # @@ -152998,7 +152998,7 @@ code_native(square_area, (Float64,)) # vmulsd XMM0, XMM0, XMM0 # Произведение чисел двойной точности (AVX) # pop RBP # ret - # + # # Если хотя бы один из аргументов является числом с плавающей запятой, # то Julia будет использовать соответствующие инструкции. # Вычислим площать круга @@ -153050,7 +153050,7 @@ translators: - ["Vadim Toptunov", "https://github.com/VadimToptunov"] --- -Kotlin - статистически типизированный язык для JVM, Android и браузера. Язык полностью cjdvtcnbv c Java. +Kotlin - статистически типизированный язык для JVM, Android и браузера. Язык полностью cjdvtcnbv c Java. [Более детальная информация здесь.](https://kotlinlang.org/) ```kotlin @@ -153158,7 +153158,7 @@ fun helloWorld(val name : String) { println(even(6)) // => true println(even(7)) // => false - // Функции могут брать другие функции в качестве аргументов, а также могут возвращать функции. + // Функции могут брать другие функции в качестве аргументов, а также могут возвращать функции. fun not(f: (Int) -> Boolean): (Int) -> Boolean { return {n -> !f.invoke(n)} } @@ -153176,7 +153176,7 @@ fun helloWorld(val name : String) { println("${notOdd(i)} ${notEven(i)} ${notZero(i)} ${notPositive(i)}") } - // Ключевое слово "class" используется для + // Ключевое слово "class" используется для // объявления классов. class ExampleClass(val x: Int) { fun memberFunction(y: Int): Int { @@ -153195,13 +153195,13 @@ fun helloWorld(val name : String) { // Функции-члены могут быть вызваны с использованием точечной нотации. println(fooExampleClass.memberFunction(4)) // => 11 /* - В случае, если функция была помечена ключевым словом "infix", она может быть вызвана с помощью инфиксной нотации. + В случае, если функция была помечена ключевым словом "infix", она может быть вызвана с помощью инфиксной нотации. */ println(fooExampleClass infixMemberFunction 4) // => 28 /* Data-классы - это компактный способ создать классы, которые лишь хранят данные. - Методы "hashCode"/"equals" и "toString" генерируютсяч автоматически. + Методы "hashCode"/"equals" и "toString" генерируютсяч автоматически. */ data class DataClassExample (val x: Int, val y: Int, val z: Int) val fooData = DataClassExample(1, 2, 4) @@ -153214,12 +153214,12 @@ fun helloWorld(val name : String) { // Объекты могут быть деструктурированы на множество переменных. val (a, b, c) = fooCopy println("$a $b $c") // => 1 100 4 - + // Деструктурирование в цикле "for" for ((a, b, c) in listOf(fooData)) { println("$a $b $c") // => 1 100 4 } - + val mapData = mapOf("a" to 1, "b" to 2) // Map.Entry также может быть дествуктурирован for ((key, value) in mapData) { @@ -153244,7 +153244,7 @@ fun helloWorld(val name : String) { println(fooList.size) // => 3 println(fooList.first()) // => a println(fooList.last()) // => c - // Элементы списка доступны по их индексу в нем. + // Элементы списка доступны по их индексу в нем. println(fooList[1]) // => b // Изменяемый список может быть создан спомощью функции "mutableListOf". @@ -153253,14 +153253,14 @@ fun helloWorld(val name : String) { println(fooMutableList.last()) // => d println(fooMutableList.size) // => 4 - // Мы можем создать набор, используя функцию "setOf". + // Мы можем создать набор, используя функцию "setOf". val fooSet = setOf("a", "b", "c") println(fooSet.contains("a")) // => true println(fooSet.contains("z")) // => false // Мы можем создать отображение (map), используя функцию "mapOf". val fooMap = mapOf("a" to 8, "b" to 7, "c" to 9) - // Получить доступ к значениям отображения (map) можно с помощью их ключа. + // Получить доступ к значениям отображения (map) можно с помощью их ключа. println(fooMap["a"]) // => 8 /* @@ -153375,7 +153375,7 @@ fun helloWorld(val name : String) { } /* - Расширения - это способ добавить новый функционал к классу. + Расширения - это способ добавить новый функционал к классу. Это то же самое, что методы расширений в C#. */ fun String.remove(c: Char): String { @@ -153886,7 +153886,7 @@ Markdown является надмножеством HTML, поэтому люб что эта же особенность не позволяет использовать разметку Markdown внутри HTML-элементов --> -## Заголовки +## Заголовки HTML-элементы от

      до

      размечаются очень просто: текст, который должен стать заголовком, предваряется @@ -153951,7 +153951,7 @@ __И этот тоже.__ Для вставки принудительных переносов можно завершить абзац двумя дополнительными пробелами: ```markdown -Эта строка завершается двумя пробелами (выделите, чтобы увидеть!). +Эта строка завершается двумя пробелами (выделите, чтобы увидеть!). Над этой строкой есть
      ! ``` @@ -154024,7 +154024,7 @@ __И этот тоже.__ 4. Заключение ``` -Можно даже делать списки задач. Блок ниже создаёт HTML-флажки. +Можно даже делать списки задач. Блок ниже создаёт HTML-флажки. ```markdown Для отметки флажка используйте «x» @@ -154519,26 +154519,26 @@ int main (int argc, const char * argv[]) // В место этого воспользуйтесь @autoreleasepool, если вы используете // автоматический подсчет ссылок (ARC) @autoreleasepool { - + // Используйте NSLog для печати в консоль NSLog(@"Привет Мир!"); // Напечатает строку "Привет Мир!" - + /////////////////////////////////////// // Типы и переменные /////////////////////////////////////// - + // Объявление простых типов int myPrimitive1 = 1; long myPrimitive2 = 234554664565; - + // Объявление объектов // Помещайте * в начало названия объекта для строго типизированного объявления - MyClass *myObject1 = nil; // Строгая типизация - id myObject2 = nil; // Слабая типизация + MyClass *myObject1 = nil; // Строгая типизация + id myObject2 = nil; // Слабая типизация // %@ – это объект // 'description' - это общий для всех объектов метод вывода данных NSLog(@"%@ and %@", myObject1, [myObject2 description]); // напечатает "(null) and (null)" - + // Строка NSString *worldString = @"Мир"; NSLog(@"Привет %@!", worldString); // напечатает "Привет Мир!" @@ -154546,7 +154546,7 @@ int main (int argc, const char * argv[]) NSMutableString *mutableString = [NSMutableString stringWithString:@"Привет"]; [mutableString appendString:@" Мир!"]; NSLog(@"%@", mutableString); // напечатает => "Привет Мир!" - + // Символьные литералы NSNumber *theLetterZNumber = @'Z'; char theLetterZ = [theLetterZNumber charValue]; // или 'Z' @@ -154556,7 +154556,7 @@ int main (int argc, const char * argv[]) NSNumber *fortyTwoNumber = @42; int fortyTwo = [fortyTwoNumber intValue]; // или '42' NSLog(@"%i", fortyTwo); - + // Беззнаковый целочисленный литерал NSNumber *fortyTwoUnsignedNumber = @42U; unsigned int fortyTwoUnsigned = [fortyTwoUnsignedNumber unsignedIntValue]; // или 42 @@ -154565,15 +154565,15 @@ int main (int argc, const char * argv[]) NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:42]; short fortyTwoShort = [fortyTwoShortNumber shortValue]; // или 42 NSLog(@"%hi", fortyTwoShort); - + NSNumber *fortyOneShortNumber = [NSNumber numberWithShort:41]; unsigned short fortyOneUnsigned = [fortyOneShortNumber unsignedShortValue]; // или 41 NSLog(@"%u", fortyOneUnsigned); - + NSNumber *fortyTwoLongNumber = @42L; long fortyTwoLong = [fortyTwoLongNumber longValue]; // или 42 NSLog(@"%li", fortyTwoLong); - + NSNumber *fiftyThreeLongNumber = @53L; unsigned long fiftyThreeUnsigned = [fiftyThreeLongNumber unsignedLongValue]; // или 53 NSLog(@"%lu", fiftyThreeUnsigned); @@ -154583,7 +154583,7 @@ int main (int argc, const char * argv[]) float piFloat = [piFloatNumber floatValue]; // или 3.141592654f NSLog(@"%f", piFloat); // напечатает 3.141592654 NSLog(@"%5.2f", piFloat); // напечатает " 3.14" - + NSNumber *piDoubleNumber = @3.1415926535; double piDouble = [piDoubleNumber doubleValue]; // или 3.1415926535 NSLog(@"%f", piDouble); @@ -154595,12 +154595,12 @@ int main (int argc, const char * argv[]) NSDecimalNumber *twoDecNum = [NSDecimalNumber decimalNumberWithString:@"5.002"]; // NSDecimalNumber не способен использовать стандартные +, -, *, / операторы, // поэтому он предоставляет свои собственные: - [oneDecNum decimalNumberByAdding:twoDecNum]; + [oneDecNum decimalNumberByAdding:twoDecNum]; [oneDecNum decimalNumberBySubtracting:twoDecNum]; [oneDecNum decimalNumberByMultiplyingBy:twoDecNum]; [oneDecNum decimalNumberByDividingBy:twoDecNum]; NSLog(@"%@", oneDecNum); // напечатает "10.99", т.к. NSDecimalNumber - изменяемый - + // BOOL (булевый) литерал NSNumber *yesNumber = @YES; NSNumber *noNumber = @NO; @@ -154608,7 +154608,7 @@ int main (int argc, const char * argv[]) BOOL yesBool = YES; BOOL noBool = NO; NSLog(@"%i", yesBool); // напечатает 1 - + // Массив // Может содержать различные типы данных, но должен быть объектом Objective-C NSArray *anArray = @[@1, @2, @3, @4]; @@ -154641,11 +154641,11 @@ int main (int argc, const char * argv[]) [mutableSet addObject:@"Привет"]; [mutableSet addObject:@"Привет"]; NSLog(@"%@", mutableSet); // напечатает => {(Привет)} - + /////////////////////////////////////// // Операторы /////////////////////////////////////// - + // Операторы работают также как в Си. // Например: 2 + 5; // => 7 @@ -154690,13 +154690,13 @@ int main (int argc, const char * argv[]) NSLog(@"Я напечатаюсь"); } break; } - + // Цикл с предусловием int ii = 0; while (ii < 4) { NSLog(@"%d,", ii++); // ii++ инкрементирует ii после передачи значения - } // => напечатает "0," + } // => напечатает "0," // "1," // "2," // "3," @@ -154706,29 +154706,29 @@ int main (int argc, const char * argv[]) for (jj=0; jj < 4; jj++) { NSLog(@"%d,", jj); - } // => напечатает "0," + } // => напечатает "0," // "1," // "2," // "3," - - // Цикл просмотра + + // Цикл просмотра NSArray *values = @[@0, @1, @2, @3]; for (NSNumber *value in values) { NSLog(@"%@,", value); - } // => напечатает "0," + } // => напечатает "0," // "1," // "2," // "3," // Цикл for для объектов. Может использоваться с любым объектом Objective-C - for (id item in values) { - NSLog(@"%@,", item); - } // напечатает => "0," + for (id item in values) { + NSLog(@"%@,", item); + } // напечатает => "0," // "1," // "2," - // "3," - + // "3," + // Обработка исключений @try { @@ -154743,29 +154743,29 @@ int main (int argc, const char * argv[]) NSLog(@"В конце отводится время для очистки."); } // => напечатает "Исключение: Файл не найден в системе" // "В конце отводится время для очистки." - + // NSError - это полезные объекты для аргументов функции, чтобы заполнить их // пользовательскими ошибками. NSError *error = [NSError errorWithDomain:@"Неправильный эл. адрес." code:4 userInfo:nil]; - + /////////////////////////////////////// // Объекты /////////////////////////////////////// - + // Создание объектов через выделение памяти и инициализацию. // Объект не является полнофункциональным пока обе части не выполнятся. MyClass *myObject = [[MyClass alloc] init]; - + // В Objective-C модель ООП базируется на передаче сообщений. // В Objective-C Вы не просто вызваете метод; вы посылаете сообщение. [myObject instanceMethodWithParameter:@"Стив Джобс"]; // Очищайте память, перед завершением работы программы. [pool drain]; - + // Конец @autoreleasepool } - + // Конец программы. return 0; } @@ -154797,7 +154797,7 @@ int main (int argc, const char * argv[]) @property int propInt; // Имя сеттер-метода = 'setPropInt' @property (copy) id copyId; // (copy) => Скопировать объект в ходе присвоения. // (readonly) => Не позволяет установить значение вне @interface -@property (readonly) NSString *roString; // Используйте @synthesize +@property (readonly) NSString *roString; // Используйте @synthesize // в @implementation, чтобы создать аксессор // Вы можете настроить геттер и сеттер имена вместо используемого 'set'-имени по умолчанию: @property (getter=lengthGet, setter=lengthSet:) int length; @@ -154823,7 +154823,7 @@ int main (int argc, const char * argv[]) // Чтобы обратиться к открытым (public) переменным из файла реализации, @property генерирует сеттер-метод // автоматически. Название метода - это 'set' с последующим именем переменной из @property: MyClass *myClass = [[MyClass alloc] init]; // создает экземпляр объекта класса MyClass -[myClass setCount:10]; +[myClass setCount:10]; NSLog(@"%d", [myClass count]); // напечатает => 10 // Или используйте свой геттер и сеттер методы, которые определены в @interface: [myClass lengthSet:32]; @@ -154847,7 +154847,7 @@ NSString *stringFromInstanceMethod = [myClass instanceMethodWithParameter:@"Пр // как переменные // SEL - это тип данных. @selector() вернет селектор из предоставленного имени метода // methodAParameterAsString:andAParameterAsNumber: - это название метода в MyClass -SEL selectorVar = @selector(methodAParameterAsString:andAParameterAsNumber:); +SEL selectorVar = @selector(methodAParameterAsString:andAParameterAsNumber:); if ([myClass respondsToSelector:selectorVar]) { // Проверяет содержит ли класс метод // Необходимо установить все аргументы метода в один объект, что отправить его в performSelector-функцию NSArray *arguments = [NSArray arrayWithObjects:@"Привет", @4, nil]; @@ -154872,7 +154872,7 @@ distance = 18; // Ссылается на "long distance" из реализац @synthesize roString = _roString; // Теперь _roString доступна в @implementation (реализации интерфейса) // Вызывается в первую очередь, перед вызовом других медотов класса или инициализации других объектов -+ (void)initialize ++ (void)initialize { if (self == [MyClass class]) { distance = 0; @@ -154897,7 +154897,7 @@ distance = 18; // Ссылается на "long distance" из реализац return self; } // Можно создать конструкторы, которые содержат аргументы: -- (id)initWithDistance:(int)defaultDistance +- (id)initWithDistance:(int)defaultDistance { distance = defaultDistance; return self; @@ -154908,7 +154908,7 @@ distance = 18; // Ссылается на "long distance" из реализац return [[self alloc] init]; } -+ (MyClass *)myClassFromHeight:(NSNumber *)defaultHeight ++ (MyClass *)myClassFromHeight:(NSNumber *)defaultHeight { height = defaultHeight; return [[self alloc] init]; @@ -154949,9 +154949,9 @@ distance = 18; // Ссылается на "long distance" из реализац // Категории позволяют вам: // -- Добавлять методы в существующий класс для организационных целей. // -- Допускает вам расширять объекты Objective-C классов (напр.: NSString) добавить ваши собственные методы. -// -- Добавляет возможность создать защищенные и закрытые методы классов. +// -- Добавляет возможность создать защищенные и закрытые методы классов. // ПРИМЕЧАНИЕ: Не переопределяйте методы базового класса в категории даже если у вас есть возможность это сделать -// to. Переопределение методов может привести к ошибкам компиляции позднее между различными категориями и это +// to. Переопределение методов может привести к ошибкам компиляции позднее между различными категориями и это // нарушает цель категорий, чтобы добавлять только функциональность. Вместо этого подклассы переопределяют методы. // Здесь простой базовый класс Car. @@ -155008,7 +155008,7 @@ distance = 18; // Ссылается на "long distance" из реализац NSLog(@"Воском натерли."); } -@end +@end // Любой экземпляр объекта Car имеет возможность воспользоваться категорией. Все, что нужно сделать, это импортировать ее: #import "Car+Clean.h" // Импортировать как множество различных категорий, как вы хотите использовать. @@ -155023,7 +155023,7 @@ int main (int argc, const char * argv[]) { [mustang turnOn]; // Используйте методы из базового класса Car. [mustang washWindows]; // Используйте методы категории Clean из класса Car. } - return 0; + return 0; } // Objective-C не поддерживает объявление защищенных методов, но вы можете имитировать их. @@ -155039,7 +155039,7 @@ int main (int argc, const char * argv[]) { // Чтобы воспользоваться защищенными методами, импортируйте категорию, затем реализуйте методы: #import "Car+Protected.h" // Запомните, делайте импорт только в файле с @implementation. -@implementation Car +@implementation Car - (void)lockCar { NSLog(@"Машина закрыта."); // Экземпляры класса Car не могут использовать @@ -155128,7 +155128,7 @@ int main (int argc, const char * argv[]) { } // Вы можете использовать протокол как данные, если вы знаете, что он реализует // методы и переменные. -- (void)turnOnEngineWithCarUtilities:(id )objectOfSomeKind { +- (void)turnOnEngineWithCarUtilities:(id )objectOfSomeKind { [objectOfSomeKind engineOn]; // У вас есть доступ к переменным объекта [objectOfSomeKind turnOnEngine]; // и методам. [objectOfSomeKind engineOn]; // Может или не может быть значение YES. Класс @@ -155173,7 +155173,7 @@ if ([myClass conformsToProtocol:@protocol(CarUtilities)]) { @protocol Sister; // Эти строки предотвращают рекурсию, решая этим проблему. @protocol Brother - + - (void)beNiceToSister:(id )sister; @end @@ -155205,20 +155205,20 @@ addUp = ^(int n) { // Удалите (int n) в блоке, чтобы не пр int addUp = add(10 + 16); // Вызывает блок кода с аргументами. // Блоки часто используются как аргументы функции, чтобы позже их вызвать, или // как функции обратного вызова (callbacks). -@implementation BlockExample : NSObject - +@implementation BlockExample : NSObject + - (void)runBlock:(void (^)(NSString))block { NSLog(@"В аргументе блок ничего не возвращает и принимает NSString-объект."); block(@"Аргумент передан блоку на исполнение."); // Вызов блока. } @end - - + + /////////////////////////////////////// // Управление памятью /////////////////////////////////////// -/* +/* Для каждого объекта, используемого в приложении, должна быть выделена память для таких объектов. Когда приложение прекращает использование объекта, память должна быть освобождена, чтобы гарантировать эффективность приложения. @@ -155501,12 +155501,12 @@ translators: lang: ru-ru --- -Perl 5 -- высокоуровневый мощный язык с 25-летней историей. -Особенно хорош для обработки разнообразных текстовых данных. +Perl 5 -- высокоуровневый мощный язык с 25-летней историей. +Особенно хорош для обработки разнообразных текстовых данных. Perl 5 работает более чем на 100 платформах, от портативных устройств -до мейнфреймов, и подходит как для быстрого прототипирования, -так и для крупных проектов. +до мейнфреймов, и подходит как для быстрого прототипирования, +так и для крупных проектов. ```perl # Комментарии начинаются с символа решетки. @@ -155515,8 +155515,8 @@ Perl 5 работает более чем на 100 платформах, от п #### Типы переменных в Perl # Скалярные переменные начинаются с знака доллара $. -# Имя переменной состоит из букв, цифр и знаков подчеркивания, -# начиная с буквы или подчеркивания. +# Имя переменной состоит из букв, цифр и знаков подчеркивания, +# начиная с буквы или подчеркивания. ### В Perl три основных типа переменных: скаляры, массивы, хеши. @@ -155547,7 +155547,7 @@ my %fruit_color = ( banana => "yellow", ); -# Важно: вставка и поиск в хеше выполняются за константное время, +# Важно: вставка и поиск в хеше выполняются за константное время, # независимо от его размера. # Скаляры, массивы и хеши подробно описаны в разделе perldata @@ -155573,7 +155573,7 @@ unless ( condition ) { } # Это более читаемый вариант для "if (!condition)" -# Специфические Perl-овые пост-условия: +# Специфические Perl-овые пост-условия: print "Yow!" if $zippy; print "We have no bananas" unless $bananas; @@ -155620,8 +155620,8 @@ open(my $in, "<", "input.txt") or die "Can't open input.txt: $!"; open(my $out, ">", "output.txt") or die "Can't open output.txt: $!"; open(my $log, ">>", "my.log") or die "Can't open my.log: $!"; -# Читать из файлового дескриптора можно с помощью оператора "<>". -# В скалярном контексте он читает одну строку из файла, в списковом -- +# Читать из файлового дескриптора можно с помощью оператора "<>". +# В скалярном контексте он читает одну строку из файла, в списковом -- # читает сразу весь файл, сохраняя по одной строке в элементе массива: my $line = <$in>; @@ -155644,13 +155644,13 @@ logger("We have a logger subroutine!"); #### Perl-модули -Perl-овые модули предоставляют широкий набор функциональности, -так что вы можете не изобретать заново велосипеды, а просто скачать -нужный модуль с CPAN (http://www.cpan.org/). -Некоторое количество самых полезных модулей включено в стандартную +Perl-овые модули предоставляют широкий набор функциональности, +так что вы можете не изобретать заново велосипеды, а просто скачать +нужный модуль с CPAN (http://www.cpan.org/). +Некоторое количество самых полезных модулей включено в стандартную поставку Perl. -Раздел документации perlfaq содержит вопросы и ответы о многих частых +Раздел документации perlfaq содержит вопросы и ответы о многих частых задачах, и часто предлагает подходящие CPAN-модули. @@ -155805,7 +155805,7 @@ echo 'Multiple', 'Parameters', 'Valid'; // печатает 'MultipleParametersV /******************************** * Константы */ - + // Константа определяется при помощи define() // и никогда не может быть изменена во время выполнения программы! @@ -155877,7 +155877,7 @@ $y = 2; $x = $y; // $x теперь содержит значение переменной $y $z = &$y; // $z содержит ссылку на $y. Изменение значения $z затронет значение $y и наоборот. -// Значение $x остается неизменным. +// Значение $x остается неизменным. echo $x; // => 2 echo $z; // => 2 @@ -156453,7 +156453,7 @@ echo "Current namespace is " . __TRAIT__; /********************** * Обработка ошибок -* +* */ // Простую обработку ошибок можно произвести спомощью try catch блока. @@ -156512,7 +156512,7 @@ translators: **Qt** - широко известный кросс-платформенный фреймворк для разработки программного обеспечения, который может быть использован на различных софтварных и хардварных платформах без какого-либо -изменения в коде. Данный фреймворк при этом обладает мощью и скоростью нативных приложений. +изменения в коде. Данный фреймворк при этом обладает мощью и скоростью нативных приложений. Qt и был изначально написан на *C++*. Данный текст является адаптацией введения в Qt на C++ под авторством Алексея Ковальчука для pyqt. @@ -156521,7 +156521,7 @@ Qt и был изначально написан на *C++*. ```python def window(): - # Создайте объект приложения + # Создайте объект приложения app = QtGui.QApplication(sys.argv) # Создайте виджет, где будет находиться наш лейбл w = QtGui.QWidget() @@ -156529,10 +156529,10 @@ def window(): b = QtGui.QLabel(w) # Задайте текст для лейбла b.setText("Hello World!") - # Задайте информация о размере и расположении + # Задайте информация о размере и расположении w.setGeometry(100, 100, 200, 50) b.move(50, 20) - # Задайте заголовок окна + # Задайте заголовок окна w.setWindowTitle("PyQt") # Все ранее написанное выводится на экран w.show() @@ -156544,11 +156544,11 @@ if __name__ == '__main__': ``` -Для того, чтобы получить более продвинутые функции приложения в pyqt, нам необходимо -обратить внимание на создание дополнительных элементов. Ниже представлено создание всплывающего диалогового окна, которое просит пользователя подтвердить его решение или предоставить какую-либо +Для того, чтобы получить более продвинутые функции приложения в pyqt, нам необходимо +обратить внимание на создание дополнительных элементов. Ниже представлено создание всплывающего диалогового окна, которое просит пользователя подтвердить его решение или предоставить какую-либо информацию. -```Python +```Python import sys from PyQt4.QtGui import * from PyQt4.QtCore import * @@ -156568,7 +156568,7 @@ def window(): w.show() sys.exit(app.exec_()) -Данная функция должна создавать диалоговое окно с кнопкой, которая ждет клика по себе +Данная функция должна создавать диалоговое окно с кнопкой, которая ждет клика по себе и затем завершает программу. def showdialog(): @@ -156608,7 +156608,7 @@ filename: learnpython-ru.py ```python # Однострочные комментарии начинаются с символа решётки. -""" Многострочный текст может быть +""" Многострочный текст может быть записан, используя 3 знака " и обычно используется в качестве встроенной документации """ @@ -156626,7 +156626,7 @@ filename: learnpython-ru.py 10 * 2 #=> 20 35 / 5 #=> 7 -# А вот деление немного сложнее. В этом случае происходит деление +# А вот деление немного сложнее. В этом случае происходит деление # целых чисел, и результат автоматически округляется в меньшую сторону. 5 / 2 #=> 2 @@ -156711,13 +156711,13 @@ not False #=> True # None является объектом None #=> None -# Не используйте оператор равенства '=='' для сравнения +# Не используйте оператор равенства '=='' для сравнения # объектов с None. Используйте для этого «is» "etc" is None #=> False None is None #=> True -# Оператор 'is' проверяет идентичность объектов. Он не -# очень полезен при работе с примитивными типами, но +# Оператор 'is' проверяет идентичность объектов. Он не +# очень полезен при работе с примитивными типами, но # зато просто незаменим при работе с объектами. # None, 0 и пустые строки/списки равны False. @@ -156930,7 +156930,7 @@ else: # Это тоже необязательно. for animal in ["собака", "кошка", "мышь"]: # Можете использовать оператор % для интерполяции форматированных строк print("%s — это млекопитающее" % animal) - + """ «range(число)» возвращает список чисел от нуля до заданного числа @@ -157038,7 +157038,7 @@ def setX(num): # Локальная переменная x — это не то же самое, что глобальная переменная x x = num # => 43 print (x) # => 43 - + def setGlobalX(num): global x print (x) # => 5 @@ -157150,7 +157150,7 @@ math.sqrt == m.sqrt == sqrt # => True # можете писать свои модули и импортировать их. Название # модуля совпадает с названием файла. -# Вы можете узнать, какие функции и атрибуты определены +# Вы можете узнать, какие функции и атрибуты определены # в модуле import math dir(math) @@ -157251,7 +157251,7 @@ filename: learnpython3-ru.py ```python # Однострочные комментарии начинаются с символа решётки. -""" Многострочный текст может быть +""" Многострочный текст может быть записан, используя 3 знака " и обычно используется в качестве встроенной документации """ @@ -157278,7 +157278,7 @@ filename: learnpython3-ru.py -5 // 3 # => -2 -5.0 // 3.0 # => -2.0 -# Когда вы используете числа с плавающей запятой, +# Когда вы используете числа с плавающей запятой, # результатом будет также число с плавающей запятой 3 * 2.0 # => 6.0 @@ -157355,13 +157355,13 @@ False or True #=> True # None является объектом None #=> None -# Не используйте оператор равенства '==' для сравнения +# Не используйте оператор равенства '==' для сравнения # объектов с None. Используйте для этого 'is' "etc" is None #=> False None is None #=> True -# Оператор «is» проверяет идентичность объектов. Он не -# очень полезен при работе с примитивными типами, но +# Оператор «is» проверяет идентичность объектов. Он не +# очень полезен при работе с примитивными типами, но # зато просто незаменим при работе с объектами. # None, 0 и пустые строки/списки/словари приводятся к False. @@ -157471,7 +157471,7 @@ filled_dict = {"one": 1, "two": 2, "three": 3} # что индекс — у словарей он называется ключом — не обязан быть числом filled_dict["one"] #=> 1 -# Все ключи в виде списка получаются с помощью метода keys(). +# Все ключи в виде списка получаются с помощью метода keys(). # Его вызов нужно обернуть в list(), так как обратно мы получаем # итерируемый объект, о которых поговорим позднее. list(filled_dict.keys()) # => ["three", "two", "one"] @@ -157562,7 +157562,7 @@ else: # Это тоже необязательно. for animal in ["собака", "кошка", "мышь"]: # Можете использовать format() для интерполяции форматированных строк print("{} — это млекопитающее".format(animal)) - + """ «range(число)» возвращает список чисел от нуля до заданного числа @@ -157689,7 +157689,7 @@ def setX(num): # Локальная переменная x — это не то же самое, что глобальная переменная x x = num # => 43 print (x) # => 43 - + def setGlobalX(num): global x print (x) # => 5 @@ -157798,7 +157798,7 @@ math.sqrt(16) == m.sqrt(16) #=> True # можете писать свои модули и импортировать их. Название # модуля совпадает с названием файла. -# Вы можете узнать, какие функции и атрибуты определены +# Вы можете узнать, какие функции и атрибуты определены # в модуле import math dir(math) @@ -157940,7 +157940,7 @@ int main(int argc, char *argv[]) { // добавляем вертикальное расположение QVBoxLayout layout; - dialogWindow.setLayout(&layout); + dialogWindow.setLayout(&layout); QLabel textLabel("Thanks for pressing that button"); layout.addWidget(&textLabel); @@ -158143,7 +158143,7 @@ path = '/bad/name/' # Идентификаторы (тоже объекты) -# Идентификаторы -- это неизменяемые, многоразовые константы. +# Идентификаторы -- это неизменяемые, многоразовые константы. # Для каждого идентификатора (кроме текста) сохраняется цифровой хэш. # При последующем использовании идентификатора, заместо создания нового объекта, # будет найден уже существующий по цифровому хэшу. @@ -158203,7 +158203,7 @@ hash['number'] #=> 5 # Поиск по ключу, которого в хэше нет вернёт nil: hash['nothing here'] #=> nil -# начиная с Ruby 1.9, существует специальный синтаксис +# начиная с Ruby 1.9, существует специальный синтаксис # при использовании идентификаторов как ключей хэша: new_hash = { defcon: 3, action: true} @@ -159466,13 +159466,13 @@ filename: learntypescript-ru.ts --- TypeScript — это язык программирования, целью которого является лёгкая разработка широкомасштабируемых JavaScript-приложений. -TypeScript добавляет в Javascript общие концепции, такие, как классы, модули, интерфейсы, обобщённое программирование и (опционально) статическую типизацию. -Это надмножество языка JavaScript: весь JavaScript-код является валидным TypeScript-кодом, следовательно, может быть добавлен бесшовно в любой проект. +TypeScript добавляет в Javascript общие концепции, такие, как классы, модули, интерфейсы, обобщённое программирование и (опционально) статическую типизацию. +Это надмножество языка JavaScript: весь JavaScript-код является валидным TypeScript-кодом, следовательно, может быть добавлен бесшовно в любой проект. Компилятор TypeScript генерирует JavaScript-код. Эта статья концентрируется только на синтаксисе TypeScript, в противовес статье о [JavaScript](javascript-ru/). -Для тестирования компилятора TypeScript пройдите по ссылке в [песочницу](http://www.typescriptlang.org/Playground). +Для тестирования компилятора TypeScript пройдите по ссылке в [песочницу](http://www.typescriptlang.org/Playground). Там вы можете написать код (с поддержкой автодополнения) и сразу же увидеть сгенерированный JavaScript код. ```js @@ -159640,9 +159640,9 @@ lang: ru-ru [Vim](http://www.vim.org) (Vi IMproved) это клон полулярного текстового редактора для Unix. Он разработан -с целью повышения скорости и продуктивности и повсеместно используется в -большинство Юникс-подобных систем. В нем имеется множество клавиатурных -сочетаний для быстрой навигации к определенным точкам в файле и быстрого +с целью повышения скорости и продуктивности и повсеместно используется в +большинство Юникс-подобных систем. В нем имеется множество клавиатурных +сочетаний для быстрой навигации к определенным точкам в файле и быстрого редактирования. ## Основы навигации в vim @@ -159689,7 +159689,7 @@ lang: ru-ru # Например, f< # Перести курсор и остановиться на < t< # Перенсти курсор и остановиться прямо перед < - + # Перемещение по словам w # Переместиться вперед на одно слово @@ -159700,7 +159700,7 @@ lang: ru-ru gg # Перейти к началу файла G # Перейти к концу файла - :NUM # Перейти к строке под номером NUM + :NUM # Перейти к строке под номером NUM # (NUM может быть любым числом) H # Переместить курсор к верхнему краю экрана M # Переместить курсор к середине экрана @@ -159711,7 +159711,7 @@ lang: ru-ru Vim основывается на концепте **режимов**. -Командный режим - vim запускается в этом режиме по-умолчанию, используется для +Командный режим - vim запускается в этом режиме по-умолчанию, используется для навигации и ввода команд. Режим ввода - используется для внесения изменений в файле. Визуальный режим - используется для подсветки текста и выполнения операций над ним. @@ -159722,7 +159722,7 @@ Vim основывается на концепте **режимов**. a # Переводит vim в режим вставки после позиции курсора v # Переводит vim в визуальный режим : # Переводит vim в режим командной строки - # Выходит из любого режима в котором вы находитесь + # Выходит из любого режима в котором вы находитесь # в командный режим # Копирование и вставка текста @@ -159748,7 +159748,7 @@ Vim можно рассматривать как набор команд в фо ``` # «Глаголы» - + d # Удалить c # Изменить y # Скопировать @@ -159770,7 +159770,7 @@ Vim можно рассматривать как набор команд в фо s # Предложение p # Параграф b # Блок - + # Образцы «предложений» или команд d2w # Удалить 2 слова @@ -159786,7 +159786,7 @@ Vim можно рассматривать как набор команд в фо ``` > # Сдвинуть выделенное на один отступ вправо < # Сдвинуть выделенное на один отступ влево - :earlier 15m # Возвращает документ к состоянию в котором он был + :earlier 15m # Возвращает документ к состоянию в котором он был # 15 минут назад :later 15m # Отменяет предыдущую команду ddp # Меняет позиции последовательных строк, сначала dd затем p @@ -159796,14 +159796,14 @@ Vim можно рассматривать как набор команд в фо ## Макросы Макросы это просто записываемые действия. -Во время записи макросы запоминают **все** действия и команды до тех пор пока -запись не будет остановлена.При вызове макрос применяет ту же самую последовательность +Во время записи макросы запоминают **все** действия и команды до тех пор пока +запись не будет остановлена.При вызове макрос применяет ту же самую последовательность действий и команд на выделенном тексте. ``` qa # Начать запись макроса под именем «a» q # Закончить запись - @a # Выполнить макрос + @a # Выполнить макрос ``` ### Настройка ~/.vimrc @@ -159814,7 +159814,7 @@ Vim можно рассматривать как набор команд в фо ``` " Пример ~/.vimrc -" 2015.10 +" 2015.10 " Отключает совместимость со старым vi set nocompatible @@ -159825,10 +159825,10 @@ filetype indent plugin on " Включает подсветку синтаксиса syntax on -" Улучшенное автодополнение команд +" Улучшенное автодополнение команд set wildmenu -" Использовать поиск не чувствительный к регистру +" Использовать поиск не чувствительный к регистру " за исключением использования заглавный букв set ignorecase set smartcase @@ -159847,7 +159847,7 @@ set tabstop=4 " Количество пробелов в символе табуляции при редактировании set softtabstop=4 -" Количество пробелов в отступе при использовании операций >> и << +" Количество пробелов в отступе при использовании операций >> и << set shiftwidth=4 " Конвертировать символы табуляции в пробелы @@ -159911,11 +159911,11 @@ XML - это язык разметки, предназначенный для х @@ -159927,8 +159927,8 @@ XML - это язык разметки, предназначенный для х 2 - Элементы -> Это чистые данные. Это то, что парсер извлечет из XML-файла. Элементы идут между открытыми и закрытыми тегами без скобок. --> - - + + компьютер.gif @@ -159942,7 +159942,7 @@ XML-документ хорошо отформатирован, если он с используя определения документа, вроде DTD и XML-схемы. XML-документ, который следует описанию документа, называется корректным, -относительно этого документа. +относительно этого документа. С таким инструментом вы можете проверить XML-данные вне логики приложения. @@ -160000,7 +160000,7 @@ XML-документ, который следует описанию докум ``` ## DTD совместимость и определение XML Schema(схем/структуры) - + Поддержка DTDs является повсеместным, потому что это довольно старая технология. К сожалению, современные функции XML как пространств имен(namespaces) не поддерживаются DTDs. Определения XML-схемы (XSDs) предназначены для замены DTDs которая в свою очередь предназначена для определения грамматики XML-документа. ## Ресурсы @@ -160784,7 +160784,7 @@ combina controle de baixo nível sobre o desempenho com facilidades de alto nível e garantias de segurança. Ele atinge esse objetico sem necessitar de um coletor de lixo ou um processo -*runtime*, permitindo que se use bibliotecas Rust em substituição a bibliotecas +*runtime*, permitindo que se use bibliotecas Rust em substituição a bibliotecas em C. A primeira versão de Rust, 0.1, apareceu em janeiro de 2012, e por três anos o @@ -160837,10 +160837,10 @@ fn main() { let f: f64 = 1.3f64; // Inferência de tipos - // Em geral, o compilador Rust consegue inferir qual o tipo de uma + // Em geral, o compilador Rust consegue inferir qual o tipo de uma // variável, então você não tem que escrever uma anotação explícita de tipo. - // Ao longo desse tutorial, os tipos serão explicitamente anotados em - // muitos lugares, mas apenas com propóstico demonstrativo. A inferência de + // Ao longo desse tutorial, os tipos serão explicitamente anotados em + // muitos lugares, mas apenas com propóstico demonstrativo. A inferência de // tipos pode gerenciar isso na maioria das vezes. let implicit_x = 1; let implicit_f = 1.3; @@ -160866,7 +160866,7 @@ fn main() { // Uma String slice - uma visão imutável em outra string. // Basicamente, isso é um par imutável de ponteiros para uma string - ele - // não contém o conteúdo de uma strinf, apenas um ponteiro para o começo e + // não contém o conteúdo de uma strinf, apenas um ponteiro para o começo e // um ponteiro para o fim da área de memória para a string, estaticamente // alocada ou contida em outro objeto (nesse caso, `s`) let s_slice: &str = &s; @@ -161051,7 +161051,7 @@ fn main() { // automaticamente desalocado com segurança. let mut mine: Box = Box::new(3); *mine = 5; // dereference - // Aqui, `now_its_mine` possui o controle exclusivo de `mine`. Em outras + // Aqui, `now_its_mine` possui o controle exclusivo de `mine`. Em outras // palavras, `mine` tem o controle transferido. let mut now_its_mine = mine; *now_its_mine += 2; @@ -161089,14 +161089,14 @@ fn main() { ## Outras leituras -Existe muita coisa sobre Rust - isto aqui é apenas o básico para que você possa -entender as coisas mais importantes. Para aprender mais sobre Rust, leia [The -Rust Programming Language](http://doc.rust-lang.org/book/index.html) e +Existe muita coisa sobre Rust - isto aqui é apenas o básico para que você possa +entender as coisas mais importantes. Para aprender mais sobre Rust, leia [The +Rust Programming Language](http://doc.rust-lang.org/book/index.html) e acompanhe [/r/rust](http://reddit.com/r/rust). A galera no canal #rust do irc.mozilla.org também estão sempre dispostos a ajudar os novatos. Você pode brincar com outras característica de Rust com um compilador online -no portal oficial do projeto [Rust playpen](http://play.rust-lang.org), or ler +no portal oficial do projeto [Rust playpen](http://play.rust-lang.org), or ler mais na página oficial [Rust website](http://rust-lang.org). No Brasil acompanhe os encontros do [Meetup Rust São Paulo] @@ -162034,7 +162034,7 @@ Scala - the scalable language Scala has a tool called the REPL (Read-Eval-Print Loop) that is analogous to commandline interpreters in many other languages. You may type any Scala - expression, and the result will be evaluated and printed. + expression, and the result will be evaluated and printed. The REPL is a very handy tool to test and verify code. Use it as you read this tutorial to quickly explore concepts on your own. @@ -162483,16 +162483,16 @@ class SaintBernard extends Dog { val breed = "Saint Bernard" val color = "brown" def bite = false -} +} -scala> b -res0: SaintBernard = SaintBernard@3e57cd70 -scala> b.breed -res1: String = Saint Bernard -scala> b.bark -res2: Boolean = true -scala> b.bite -res3: Boolean = false +scala> b +res0: SaintBernard = SaintBernard@3e57cd70 +scala> b.breed +res1: String = Saint Bernard +scala> b.bark +res2: Boolean = true +scala> b.bite +res3: Boolean = false // A trait can also be used as Mixin. The class "extends" the first trait, // but the keyword "with" can add additional traits. @@ -163170,7 +163170,7 @@ $ python example.py Have a look around! Ians-Air.home:ORIGIN_ENV:I00LA1Mq# bash -imiell@Ians-Air:/space/git/shutit ⑂ master +  +imiell@Ians-Air:/space/git/shutit ⑂ master +  CTRL-] caught, continuing with run... 2017-06-05 15:12:33,577 INFO: Sending: exit 2017-06-05 15:12:33,633 INFO: Output (squashed): exitexitIans-Air.home:ORIGIN_ENV:I00LA1Mq# [...] @@ -164128,7 +164128,7 @@ Riadenie revízií je systém, ktorý postupom času zaznamenáva zmeny súboru [Ďalšie informácie](http://git-scm.com/book/en/Getting-Started-About-Version-Control) -### Prečo Používať Git? +### Prečo Používať Git? * Môžeš pracovať offline. * Spolupráca s ostatnými je jednoduchá! @@ -164320,7 +164320,7 @@ $ git push origin --tags Aktualizuje všetky súbory v pracovnom strome, aby odpovedali verzií v indexe, alebo v inom strome. ```bash -# Aktualizuj strom, aby odpovedal (predvolene) +# Aktualizuj strom, aby odpovedal (predvolene) # hlavnej vetve repozitáru (master branch) $ git checkout # Aktualizuj strom, aby odpovedal konrkétnej vetve @@ -164456,7 +164456,7 @@ Uloží obsah repozitára a zlúči ho s inou vetvou. $ git pull origin master # Predvolene, git pull aktualizuje tvoju aktuálnu vetvu -# zlúčením nových zmien zo vzdialenej vetvy +# zlúčením nových zmien zo vzdialenej vetvy $ git pull # Zlúč zmeny zo vzdialenej vetvy a presuň vetvu do nového základného commitu (rebase) @@ -164717,13 +164717,13 @@ filename: learn-latex-sk.tex \title{Nauč sa LaTeX za Y Minút!} % Teraz môžme začať pracovať na samotnom dokumente. % Všetko do tohto riadku sa nazýva "Preambula" ("The Preamble") -\begin{document} +\begin{document} % ak zadáme položky author, date a title, LaTeX vytvorí titulnú stranu. \maketitle % Väčšina odborných článkov má abstrakt, na jeho vytvorenie môžeš použiť preddefinované príkazy. % Ten by sa mal zobraziť v logickom poradí, teda po hlavičke, -% no pred hlavnými sekciami tela.. +% no pred hlavnými sekciami tela.. % Tento príkaz je tiež dostupný v triedach article a report. % Tzv. makro "abstract" je fixnou súčasťou LaTeXu, ak chceme použiť abstract % a napísať ho po slovensky, musíme ho redefinovať nasledujúcim príkazom @@ -164749,19 +164749,19 @@ To je ono! \label{subsec:pytagoras} % Použitím '*' môžeme potlačiť zabudované číslovanie LaTeXu. -% Toto funguje aj na iné príkazy. -\section*{Toto je nečíslovaná sekcia} +% Toto funguje aj na iné príkazy. +\section*{Toto je nečíslovaná sekcia} Všetky číslované byť nemusia! \section{Nejaké poznámočky} -Zarovnávať veci tam, kde ich chceš mať, je všeobecne ľahké. Ak -potrebuješ \\ nový \\ riadok \\ pridaj \textbackslash\textbackslash do -zdrojového kódu. \\ +Zarovnávať veci tam, kde ich chceš mať, je všeobecne ľahké. Ak +potrebuješ \\ nový \\ riadok \\ pridaj \textbackslash\textbackslash do +zdrojového kódu. \\ \section{Zoznamy} Zoznamy sú jednou z najjednoduchších vecí vôbec! Treba mi zajtra nakúpiť, urobím si zoznam. \begin{enumerate} % "enumerate" spustí číslovanie prvkov. - % \item povie LaTeXu, ako že treba pripočítať 1 + % \item povie LaTeXu, ako že treba pripočítať 1 \item Vlašský šalát. \item 5 rožkov. \item 3 Horalky. @@ -164781,9 +164781,9 @@ Množinové a relačné symboly, šípky, operátory a Grécke písmená sú len Množiny a relácie hrajú hlavnú rolu v mnohých matematických článkoch. Takto napíšeš, že niečo platí pre všetky x patriace do X, $\forall$ x $\in$ X. \\ -% Všimni si, že som pridal $ pred a po symboloch. Je to -% preto, lebo pri písaní sme v textovom móde, -% no matematické symboly existujú len v matematickom. +% Všimni si, že som pridal $ pred a po symboloch. Je to +% preto, lebo pri písaní sme v textovom móde, +% no matematické symboly existujú len v matematickom. % Vstúpime doňho z textového práve '$' znamienkami. % Platí to aj opačne. Premenná môže byť zobrazená v matematickom móde takisto. % Do matematického módu sa dá dostať aj s \[\] @@ -164793,11 +164793,11 @@ Takto napíšeš, že niečo platí pre všetky x patriace do X, $\forall$ x $\i Moje obľúbené Grécke písmeno je $\xi$. Tiež sa mi pozdávajú $\beta$, $\gamma$ a $\sigma$. Ešte som neprišiel na Grécke písmeno, ktoré by LaTeX nepoznal! -Operátory sú dôležitou súčasťou matematických dokumentov: -goniometrické funkcie ($\sin$, $\cos$, $\tan$), -logaritmy and exponenciálne výrazy ($\log$, $\exp$), -limity ($\lim$), atď. -majú pred-definované LaTeXové príkazy. +Operátory sú dôležitou súčasťou matematických dokumentov: +goniometrické funkcie ($\sin$, $\cos$, $\tan$), +logaritmy and exponenciálne výrazy ($\log$, $\exp$), +limity ($\lim$), atď. +majú pred-definované LaTeXové príkazy. Napíšme si rovnicu, nech vidíme, ako to funguje: \\ $\cos(2\theta) = \cos^{2}(\theta) - \sin^{2}(\theta)$ @@ -164805,13 +164805,13 @@ $\cos(2\theta) = \cos^{2}(\theta) - \sin^{2}(\theta)$ Zlomky(Čitateľ-menovateľ) sa píšu v týchto formách: % 10 / 7 -$^{10}/_{7}$ +$^{10}/_{7}$ % Relatívne komplexné zlomky sa píšu ako % \frac{čitateľ}{menovateľ} $\frac{n!}{k!(n - k)!}$ \\ -Rovnice tiež môžeme zadať v "rovnicovom prostredí". +Rovnice tiež môžeme zadať v "rovnicovom prostredí". % Takto funguje rovnicové prostredie \begin{equation} % vstúpi do matematického módu @@ -164819,28 +164819,28 @@ Rovnice tiež môžeme zadať v "rovnicovom prostredí". \label{eq:pythagoras} % na odkazovanie \end{equation} % všetky \begin príkazy musia mať konečný príkaz. -Teraz môžeme odkázať na novovytvorenú rovnicu! +Teraz môžeme odkázať na novovytvorenú rovnicu! Rovn.~\ref{eq:pythagoras} je tiež známa ako Pytagorova Veta, ktorá je tiež predmetom Sekc.~\ref{subsec:pytagoras}. Odkazovať môžme na veľa vecí, napr na: čísla, rovnice, či sekcie. Sumácie a Integrály sa píšu príkazmi sum a int: % Niektoré prekladače LaTeXu sa môžu sťažovať na prázdne riadky (ak tam sú) % v rovnicovom prostredí. -\begin{equation} +\begin{equation} \sum_{i=0}^{5} f_{i} -\end{equation} -\begin{equation} +\end{equation} +\begin{equation} \int_{0}^{\infty} \mathrm{e}^{-x} \mathrm{d}x -\end{equation} +\end{equation} \section{Obrázky} Vloženie obrázku môže byť zložitejšie. Ja si vždy možnosti vloženia pozerám pre každý obrázok. \renewcommand\figurename{Obrázok} -\begin{figure}[H] % H značí možnosť zarovnania. +\begin{figure}[H] % H značí možnosť zarovnania. \centering % nacentruje obrázok na stránku % Vloží obrázok na 80% šírky stránky. - %\includegraphics[width=0.8\linewidth]{right-triangle.png} + %\includegraphics[width=0.8\linewidth]{right-triangle.png} % Zakomentované kvôli kompilácií, použi svoju predstavivosť :). \caption{Pravouhlý trojuholník so stranami $a$, $b$, $c$} \label{fig:right-triangle} @@ -164855,7 +164855,7 @@ Tabuľky sa vkládajú podobne ako obrázky. \caption{Nadpis tabuľky.} % zátvorky: {} hovoria ako sa vykreslí každý riadok. % Toto si nikdy nepamätám a vždy to musím hľadať. Všetko. Každý. Jeden. Raz! - \begin{tabular}{c|cc} + \begin{tabular}{c|cc} Číslo & Priezvisko & Krstné meno \\ % Stĺpce sú rozdelené $ \hline % horizontálna čiara 1 & Ladislav & Meliško \\ @@ -164867,27 +164867,27 @@ Tabuľky sa vkládajú podobne ako obrázky. \section{Prikáž LaTeXu nekompilovať (napr. Zdrojový Kód)} Povedzme, že chceme do dokumentu vložiť zdrojový kód, budeme musieť LaTeXu povedať, nech sa ho nesnaží skompilovať, ale nech s ním pracuje ako s textom. -Toto sa robí vo verbatim prostredí. +Toto sa robí vo verbatim prostredí. % Tiež sú na to špeciálne balíčky, (napr. minty, lstlisting, atď.) % ale verbatim je to najzákladnejšie, čo môžeš použiť. -\begin{verbatim} +\begin{verbatim} print("Hello World!") - a%b; pozri! Vo verbatime môžme použiť % znamienka. + a%b; pozri! Vo verbatime môžme použiť % znamienka. random = 4; #priradené randomným hodom kockou \end{verbatim} -\section{Kompilácia} +\section{Kompilácia} Už by bolo načase túto nádheru skompilovať a zhliadnuť jej úžasnú úžasnosť v podobe LaTeX pdfka, čo povieš? (áno, tento dokument sa musí kompilovať). \\ Cesta k finálnemu dokumentu pomocou LaTeXu pozostáva z nasledujúcich krokov: \begin{enumerate} \item Napíš dokument v čistom texte (v "zdrojáku"). - \item Skompiluj zdroják na získanie pdfka. + \item Skompiluj zdroják na získanie pdfka. Kompilácia by mala vyzerať nasledovne (v Linuxe): \\ - \begin{verbatim} - $pdflatex learn-latex.tex learn-latex.pdf + \begin{verbatim} + $pdflatex learn-latex.tex learn-latex.pdf \end{verbatim} \end{enumerate} @@ -167703,7 +167703,7 @@ val some_result = (fn x => thermometer (x - 5) ^ thermometer (x + 5)) 37 (* Here is a higher-order function that works on lists (a list combinator) *) (* map f l - applies f to each element of l from left to right, + applies f to each element of l from left to right, returning the list of results. *) val readings = [ 34, 39, 37, 38, 35, 36, 37, 37, 37 ] (* first an int list *) val opinions = List.map thermometer readings (* gives [ "Cold", "Warm", ... ] *) @@ -168739,7 +168739,7 @@ lang: in-ta --- -இணையத்தின் ஆரம்ப காலத்தில் முழுமையாக உரைகளை மட்டுமே கொண்டிருந்தன. +இணையத்தின் ஆரம்ப காலத்தில் முழுமையாக உரைகளை மட்டுமே கொண்டிருந்தன. ஆனால் உலாவிகளில் கொண்டு வரப்பட்ட மாற்றங்களில் முழுமையான காட்சிபடுத்தல்களுடன் கூடிய இணையதளங்கள் உருவாகின. @@ -168804,7 +168804,7 @@ div { } [otherAttr|='en'] { font-size:smaller; } -/* நாம் இரண்டு selectors ஐ ஒன்றாக உபயோகித்தும் ஒரு உறுப்பை அணுக முடியும் , +/* நாம் இரண்டு selectors ஐ ஒன்றாக உபயோகித்தும் ஒரு உறுப்பை அணுக முடியும் , அவற்றுக்கு இடயே இடைவெளி காணப்படகூடாது */ div.some-class[attr$='ue'] { } @@ -168815,7 +168815,7 @@ div.some-parent > .class-name { } /* ஒரு ஒரு பிரதான உறுப்பில் உள்ள உப உறுப்புகளை அணுக*/ div.some-parent .class-name { } -/* மேலே குறிபிட்ட அணுகுமுறையில் இடைவெளி காணப்படாது விடின் +/* மேலே குறிபிட்ட அணுகுமுறையில் இடைவெளி காணப்படாது விடின் அந்த selector வேலை செய்யாது */ div.some-parent.class-name { } @@ -168826,7 +168826,7 @@ div.some-parent.class-name { } /* or அல்லது அதற்கு முந்தய உறுப்பின் மூலம் */ .i-am-any-element-before ~ .this-element { } -/* +/* சில selectors ஐ pseudo class மூலம் அணுக முடியும் , எப்போது எனில் அவை குறித்த ஒரு நிலையில் இருக்கும் போது ஆகும் */ @@ -168838,13 +168838,13 @@ selector:hover { } பார்வையிட்ட இணைப்பு */ selector:visited { } -/* அல்லது ஒரு பார்வையிடபடாத இணைப்பு */ +/* அல்லது ஒரு பார்வையிடபடாத இணைப்பு */ selected:link { } /* அல்லது ஒரு element ஐ focus செய்யும் போது */ selected:focus { } -/* +/* எல்லா elementகளையும் ஒரே நேரத்தில் அணுக `*` */ * { } /* all elements */ @@ -168856,9 +168856,9 @@ selected:focus { } #################### */ selector { - + /* நீளத்தின் அலகுகள் absolute அல்லது relative ஆக இருக்கலாம். */ - + /* Relative units */ width: 50%; /* percentage of parent element width */ font-size: 2em; /* multiples of element's original font-size */ @@ -168867,15 +168867,15 @@ selector { font-size: 2vh; /* or its height */ font-size: 2vmin; /* whichever of a vh or a vw is smaller */ font-size: 2vmax; /* or greater */ - + /* Absolute units */ width: 200px; /* pixels */ font-size: 20pt; /* points */ width: 5cm; /* centimeters */ min-width: 50mm; /* millimeters */ max-width: 5in; /* inches */ - - + + /* Colors */ color: #F6E; /* short hex format */ color: #FF66EE; /* long hex format */ @@ -168886,10 +168886,10 @@ selector { color: transparent; /* equivalent to setting the alpha to 0 */ color: hsl(0, 100%, 50%); /* as hsl percentages (CSS 3) */ color: hsla(0, 100%, 50%, 0.3); /* as hsla percentages with alpha */ - + /* Images as backgrounds of elements */ background-image: url(/img-path/img.jpg); /* quotes inside url() optional */ - + /* Fonts */ font-family: Arial; /* if the font family name has a space, it must be quoted */ @@ -168904,7 +168904,7 @@ selector { ஒரு css file ஐ save செய்ய `.css`. ```xml - @@ -168920,7 +168920,7 @@ selector { ## Precedence அல்லது Cascade -ஒரு element ஆனது ஒன்றுக்கு மேற்பட்ட selectors மூலம் அணுகபடலாம் ,இவ்வாறான சந்தர்பங்களில் +ஒரு element ஆனது ஒன்றுக்கு மேற்பட்ட selectors மூலம் அணுகபடலாம் ,இவ்வாறான சந்தர்பங்களில் ஒரு குறிபிட்ட விதிமுறையை பின்பற்றுகிறது இது cascading என அழைக்கபடுகிறது, அதனால் தன இது Cascading Style Sheets என அழைக்கபடுகிறது. @@ -168951,7 +168951,7 @@ p { property: value !important; } ``` -css முன்னுரிமை பின்வருமாறு +css முன்னுரிமை பின்வருமாறு * `E` இதுவே அதிக முக்கியத்துவம் வாய்ந்தது காரணம் இது `!important` பயன்படுத்துகிறது. இதை பயன்படுத்துவதை தவிர்க்கவும் * `F` இது இரண்டாவது காரணம் இது inline style. * `A` இது மூன்றவதாக வருகிறது, காரணம் இது மூன்று காரணிகளை குறிக்கிறது : element(உறுப்பு) பெயர் `p`, அதன் class `class1`, an அதன் பண்பு(attribute) `attr='value'`. @@ -168992,37 +168992,37 @@ lang: in-ta javascript 1995 ஆம் ஆண்டு Netscape இல் பணிபுரிந்த Brendan Eich என்பவரால் உருவாக்கபட்டது.ஆரம்பத்தில் மிகவும் எளிமையான ஸ்க்ரிப்டிங் மொழியாக இணையதளங்களில் பயன்படுத்தபட்டது. -இது ஜாவா (java ) வில் உருவாக்கபட்ட மிகவும் சிக்கலான இணைய செயலிகளுக்கு -உதவும் முகமாக உருவாக்கபட்டது. எனினும் இணையதள பக்கங்களில் இதன் முழுதான பயன்பாடு -மற்றும் உலாவிகளில் பயன்படுத்த கூடிய வகையில் இருந்தமையாலும் Java வை விட +இது ஜாவா (java ) வில் உருவாக்கபட்ட மிகவும் சிக்கலான இணைய செயலிகளுக்கு +உதவும் முகமாக உருவாக்கபட்டது. எனினும் இணையதள பக்கங்களில் இதன் முழுதான பயன்பாடு +மற்றும் உலாவிகளில் பயன்படுத்த கூடிய வகையில் இருந்தமையாலும் Java வை விட இணையதளகளின் முகப்பு உருவாக்கத்தில் இன்றளவில் முன்னிலை பெற்றுள்ளது. -உலாவிகளுக்கு மட்டும் மட்டுபடுத்தபடவில்லை , Node.js மூலமாக -மிகவும் பிரபல்யமடைந்து வருகின்றது , உதாரணமாக கூகிள்க்ரோம் உலாவியின் +உலாவிகளுக்கு மட்டும் மட்டுபடுத்தபடவில்லை , Node.js மூலமாக +மிகவும் பிரபல்யமடைந்து வருகின்றது , உதாரணமாக கூகிள்க்ரோம் உலாவியின் V8 JavaScript engine Node .js உதவியுடன் இயங்குகிறது . -உங்கள் கருத்துக்கள் மிகவும் வரவேற்கபடுகின்றன , என்னுடன் தொடர்புகொள்ள +உங்கள் கருத்துக்கள் மிகவும் வரவேற்கபடுகின்றன , என்னுடன் தொடர்புகொள்ள [@adambrenecki](https://twitter.com/adambrenecki), or [adam@brenecki.id.au](mailto:adam@brenecki.id.au). ```js -// குறிப்புக்கள் C நிரலாக்கத்தை ஒத்தது .ஒரு வரி குறிப்புக்கள் "//" குறியீடுடன் ஆரம்பமாகும் +// குறிப்புக்கள் C நிரலாக்கத்தை ஒத்தது .ஒரு வரி குறிப்புக்கள் "//" குறியீடுடன் ஆரம்பமாகும் /* பலவரி குறிப்புக்கள் "/*" ஆரம்பமாகி "/*" இல் முடிவடையும் */ // ஒரு கூற்று முற்றுபெற செய்ய ; இடல் வேண்டும் . doStuff(); -// ...ஆனால் அரைபுள்ளி இட வேண்டும் என்று அவசியம் இல்லை ஏன் எனில் +// ...ஆனால் அரைபுள்ளி இட வேண்டும் என்று அவசியம் இல்லை ஏன் எனில் // ஒரு வரி புதிதாக இடப்படும் போது அரைபுள்ளிகள் தானாகவே இடப்படும் ஆனால் சில தருணங்களை தவிர . doStuff() -// ஆனால் அவ்வாறான தருணங்கள் எதிர்பாராத முடிவுகளை தரலாம் +// ஆனால் அவ்வாறான தருணங்கள் எதிர்பாராத முடிவுகளை தரலாம் // எனவே நாம் தொடர்ந்து ஒரு கூற்று நிறைவடையும் போது அரைபுள்ளி ஒன்றை இடுவோம் . /////////////////////////////////// -// 1. எண்கள்(Number) ,சரம் (String),செயற்குறிகள்(Operators) +// 1. எண்கள்(Number) ,சரம் (String),செயற்குறிகள்(Operators) // JavaScript ஒரே ஒரு எண்வகை காணப்படுகிறது தசமி (which is a 64-bit IEEE 754 double). // தசமி எண்வகை (Doubles) 2^ 52 வரை சேமிக்க கூடியது @@ -169030,7 +169030,7 @@ doStuff() 3; // = 3 1.5; // = 1.5 -// அடிப்படை கணித பொறிமுறைகள் +// அடிப்படை கணித பொறிமுறைகள் 1 + 1; // = 2 0.1 + 0.2; // = 0.30000000000000004 8 - 1; // = 7 @@ -169041,29 +169041,29 @@ doStuff() 5 / 2; // = 2.5 -//bitwise பொறிமுறையை உபயோகிக்கும் போது -//உங்கள் தசம எண்ணின் பெறுமானமானது ஒரு நேர் அல்லது மறை அல்லது பூசியமாகவுள்ள முழு எண்ணாக -//மாற்றம் பெறுகிறது இது 32 இருமம்(bit) வரை செல்லலாம் +//bitwise பொறிமுறையை உபயோகிக்கும் போது +//உங்கள் தசம எண்ணின் பெறுமானமானது ஒரு நேர் அல்லது மறை அல்லது பூசியமாகவுள்ள முழு எண்ணாக +//மாற்றம் பெறுகிறது இது 32 இருமம்(bit) வரை செல்லலாம் 1 << 2; // = 4 -// நிரலாக்கத்தில் செயலியை அமுல்படுத்தும் வரிசைமுறையில் அடைப்பு குறிக்கு முன்னிலை வழங்கபடுகிறது +// நிரலாக்கத்தில் செயலியை அமுல்படுத்தும் வரிசைமுறையில் அடைப்பு குறிக்கு முன்னிலை வழங்கபடுகிறது (1 + 3) * 2; // = 8 // மெய் எண் அல்லாத மூன்றுபெறுமானங்கள் உள்ளன : Infinity; // result of e.g. 1/0 -Infinity; // result of e.g. -1/0 -NaN; // result of e.g. 0/0, இது எண் அல்ல என்பதை குறிக்கும் +NaN; // result of e.g. 0/0, இது எண் அல்ல என்பதை குறிக்கும் // தர்க ரீதியில் ஆன கட்டமைப்பு காணப்படுகிறது . true; false; -// சரம் (string) ' அல்லது " குறியீட்டினால் உருவாக்கபடுகிறது +// சரம் (string) ' அல்லது " குறியீட்டினால் உருவாக்கபடுகிறது 'abc'; "Hello, world"; -// ஒரு boolean பெறுமானத்தின் எதிர்மறை பெறுமானத்தை பெற ! குறியீடு பயன்படுத்தபடுகிறது +// ஒரு boolean பெறுமானத்தின் எதிர்மறை பெறுமானத்தை பெற ! குறியீடு பயன்படுத்தபடுகிறது !true; // = false !false; // = true @@ -169075,7 +169075,7 @@ false; 1 !== 1; // = false 2 !== 1; // = true -// மேலும் சில ஒப்பீடுகள் +// மேலும் சில ஒப்பீடுகள் 1 < 10; // = true 1 > 10; // = false 2 <= 2; // = true @@ -169087,15 +169087,15 @@ false; // இரண்டு மாறிகளை/பெறுமானங்களை ஒப்பிட < and > "a" < "b"; // = true -// இரண்டு பெறுமானங்கள் / மாறிகள் ஒரேவகையை சேர்ந்தவையா என பார்க்க +// இரண்டு பெறுமானங்கள் / மாறிகள் ஒரேவகையை சேர்ந்தவையா என பார்க்க "5" == 5; // = true null == undefined; // = true // ...இல்லாவிடின் === "5" === 5; // = false -null === undefined; // = false +null === undefined; // = false -// ...கிழே உள்ள கூற்றுகள் எதிர்பாராத +// ...கிழே உள்ள கூற்றுகள் எதிர்பாராத வெளியீடுகளை தரலாம் ... 13 + !0; // 14 "13" + !0; // '13true' @@ -169107,11 +169107,11 @@ null === undefined; // = false //... ஒரு சரத்தை(string ) சொற்களாக பிரிக்க (substring) `substring "Hello world".substring(0, 5); // = "Hello" -// `length` ஒரு சரத்தில்(string) உள்ள சொற்களின் எண்ணிக்கை அல்லது நீளத்தை(length)அறிய +// `length` ஒரு சரத்தில்(string) உள்ள சொற்களின் எண்ணிக்கை அல்லது நீளத்தை(length)அறிய "Hello".length; // = 5 // `null` மற்றும் `undefined` இரு பெறுமானங்கள் உள்ளன . -null; // மதிப்பு அற்ற ஒரு பெறுமானத்தை குறிக்கும் +null; // மதிப்பு அற்ற ஒரு பெறுமானத்தை குறிக்கும் undefined; // பெறுமானம் இன்னும் நிர்ணயிக்க படவில்லை என்பதை குறிக்கும் ( // `undefined` இருப்பினும் இதுவும் ஒரு பெறுமானமாக கருதபடுகிறது ) @@ -169122,35 +169122,35 @@ undefined; // பெறுமானம் இன்னும் நிர்ண // 2. மாறிகள் (Variables),அணிகள் (Arrays) மற்றும் பொருட்கள் (Objects) // மாறிகளை உருவாக்க `var ` என்னும் குறியீட்டு சொல் (keyword ) பயன்படுகிறது . -//உருவாக்கப்படும் மாறிகள் எந்த வகையை சார்ந்தன என்பதை JavaScript -//தானாகவே நிர்ணயிக்கும் . மாறிக்கு ஒரு பெறுமானத்தை வழங்க `=` பாவிக்க +//உருவாக்கப்படும் மாறிகள் எந்த வகையை சார்ந்தன என்பதை JavaScript +//தானாகவே நிர்ணயிக்கும் . மாறிக்கு ஒரு பெறுமானத்தை வழங்க `=` பாவிக்க var someVar = 5; -// //நீங்கள் மாறிகளை நிறுவ 'var' குறியீட்டு சொல்லை பயன்படுத்தா விடினும் +// //நீங்கள் மாறிகளை நிறுவ 'var' குறியீட்டு சொல்லை பயன்படுத்தா விடினும் //அது தவறில்லை ... someOtherVar = 10; -// ...ஆனால் நீங்கள் நிறுவிய மாறி(variable) எல்லா உங்கள் ப்ரோக்ராம் இன் சகல இடங்களிலும் -//அணுக கூடியதாய் அமையும் , இல்லாவிடின் அது ஒரு குறிபிட்ட இடத்திற்கு மட்டும் +// ...ஆனால் நீங்கள் நிறுவிய மாறி(variable) எல்லா உங்கள் ப்ரோக்ராம் இன் சகல இடங்களிலும் +//அணுக கூடியதாய் அமையும் , இல்லாவிடின் அது ஒரு குறிபிட்ட இடத்திற்கு மட்டும் //மட்டுபடுத்தபடும் . -//பெறுமானம் வழங்கபடாத மாறிகளுக்கு ,இயல்பாக/தானாக undefined என்ற பெறுமானம் -//வழங்கப்படும் +//பெறுமானம் வழங்கபடாத மாறிகளுக்கு ,இயல்பாக/தானாக undefined என்ற பெறுமானம் +//வழங்கப்படும் var someThirdVar; // = undefined // மாறிகளில் கணித செயல்பாடுகளை நடத்த சுருக்கெழுத்து முறைகள் காணப்படுகின்றன : someVar += 5; // இது someVar = someVar + 5; ஐ ஒத்தது someVar இன் பெறுமானம் இப்போது 10 someVar *= 10; // someVar இன் பெறுமானம் இப்போது 100 -//மிகவும் சுருக்கமான சுருகேழுத்து முறை கூட்டல் அல்லது கழித்தல் செயன்முறையை -//மேற்கொள்ள +//மிகவும் சுருக்கமான சுருகேழுத்து முறை கூட்டல் அல்லது கழித்தல் செயன்முறையை +//மேற்கொள்ள someVar++; // someVar இன் பெறுமானம் இப்போது is 101 someVar--; // someVar இன் பெறுமானம் இப்போது 100 -// அணிகள்(Arrays) எல்லாவகையான பெறுமானங்களையும் உள்ளடக்க கூடியது +// அணிகள்(Arrays) எல்லாவகையான பெறுமானங்களையும் உள்ளடக்க கூடியது var myArray = ["Hello", 45, true]; -// அணிகள்(Arrays) உறுப்பினர்கள் சதுர அடைப்புக்குறிக்குள் அதன் தான இலக்கத்தை கொண்டு +// அணிகள்(Arrays) உறுப்பினர்கள் சதுர அடைப்புக்குறிக்குள் அதன் தான இலக்கத்தை கொண்டு //அணுகமுடியும் . // அணிகளில் உள்ள உறுப்புகள் 0 இருந்து ஆரம்பமாகும் . myArray[1]; // = 45 @@ -169162,47 +169162,47 @@ myArray.length; // = 4 // அணியில்(Array) ஒரு குறிப்பிட்ட இடத்தில உள்ள பெறுமானத்தை மாற்ற . myArray[3] = "Hello"; -// JavaScript's பொருள் (objects) அகராதியை ஒத்தன -// ஒழுங்கு படுத்த படாத சேகரிப்பு (collection) ஆகும் இதில் ஒரு சாவியும்(key) +// JavaScript's பொருள் (objects) அகராதியை ஒத்தன +// ஒழுங்கு படுத்த படாத சேகரிப்பு (collection) ஆகும் இதில் ஒரு சாவியும்(key) //அதுக்குரிய பெறுமானமும்(value) காணப்படும் . var myObj = {key1: "Hello", key2: "World"}; // விசைகள் சரங்களை, ஆனால் அவர்கள் சரியான என்றால் மேற்கோள் அவசியம் இல்லை //சாவிகளை உ.ம் : "key" என நிறுவலாம் ஆனால் , மேற்கோள் ஆனது சாவி முன்பே நிறுவபட்டிருப்பின் -//அவசியம் இல்லை -// சாவிகளுக்குரிய பெறுமானங்கள் எந்த வகையாகவும் இருக்கலாம் +//அவசியம் இல்லை +// சாவிகளுக்குரிய பெறுமானங்கள் எந்த வகையாகவும் இருக்கலாம் var myObj = {myKey: "myValue", "my other key": 4}; -//பொருள் பண்புகளை சதுர அடைப்புக்குறிக்குள் அதன் சாவியின் பெயரை (key) கொண்டு +//பொருள் பண்புகளை சதுர அடைப்புக்குறிக்குள் அதன் சாவியின் பெயரை (key) கொண்டு //அணுகமுடியும் , myObj["my other key"]; // = 4 // ... அல்லது புள்ளி குறியீட்டை பயன்படுத்தி ,சாவியின் (key is a valid identifier) -//பெயர் மூலம் அணுக முடியும் +//பெயர் மூலம் அணுக முடியும் myObj.myKey; // = "myValue" -// பொருட்கள்(ஒப்ஜெக்ட்ஸ்) மாற்றபடகூடியான சாவிகளின் பெறுமதிகளை மாற்ற முடியும் அத்துடன் புதிய -//சாவிகளை(keys) இடவும் முடியும் +// பொருட்கள்(ஒப்ஜெக்ட்ஸ்) மாற்றபடகூடியான சாவிகளின் பெறுமதிகளை மாற்ற முடியும் அத்துடன் புதிய +//சாவிகளை(keys) இடவும் முடியும் myObj.myThirdKey = true; -//பெறுமதி வரையறுக்கபடாத ஒரு சாவியினை அணுகும் போது +//பெறுமதி வரையறுக்கபடாத ஒரு சாவியினை அணுகும் போது //அது வெளியிடும் பெறுமதி `undefined`. myObj.myFourthKey; // = undefined /////////////////////////////////// // 3. தர்க்கம் மற்றும் கட்டுப்பாட்டு கட்டமைப்பு -// கீழே காட்டப்பட்டுள்ள தொடரியல் ஜாவா வை ஒத்தது +// கீழே காட்டப்பட்டுள்ள தொடரியல் ஜாவா வை ஒத்தது -// The `if` ஒரு குறித்த தர்க்கம் சரியாயின் -//அல்லது என்ற வடிவமைப்பை +// The `if` ஒரு குறித்த தர்க்கம் சரியாயின் +//அல்லது என்ற வடிவமைப்பை var count = 1; if (count == 3){ - // count இன் பெறுமானம் 3 சமமா என பார்க்கபடுகிறது + // count இன் பெறுமானம் 3 சமமா என பார்க்கபடுகிறது } else if (count == 4){ - // count இன் பெறுமானம் 4க்கு சமமா என பார்க்கபடுகிறது + // count இன் பெறுமானம் 4க்கு சமமா என பார்க்கபடுகிறது } else { - // count ஆனது 3 அல்ல 4 அல்ல எனின் + // count ஆனது 3 அல்ல 4 அல்ல எனின் } // ஒரு குறிப்பிட்ட ஒப்பீடு உண்மையாக இருக்கும் வரை `while`. @@ -169210,40 +169210,40 @@ while (true){ // இந்த இருக்கும் கூற்றுகள் முடிவிலி தடவை மறுபடி செயற்படுத்தப்படும் ! } -// while போல் அல்லாது do-while ,அவை ஒரு தடவையேனும் அதனுள் உள்ள கூற்றுகள் செயற்படுத்தபடும் +// while போல் அல்லாது do-while ,அவை ஒரு தடவையேனும் அதனுள் உள்ள கூற்றுகள் செயற்படுத்தபடும் var input; do { input = getInput(); } while (!isValid(input)) -// for (loop /சுற்று ) C , ஜாவாவை ஒத்தது +// for (loop /சுற்று ) C , ஜாவாவை ஒத்தது //மாறிக்கு பெறுமானத்தை வழங்கல் , மாறியானது தர்க்கத்தை பூர்த்தி செய்கிறதா என பார்த்தல் , -//சுற்றுக்குள் இருக்கும் கூற்றை செயற்படுதல் +//சுற்றுக்குள் இருக்கும் கூற்றை செயற்படுதல் for (var i = 0; i < 5; i++){ - // இந்த சுற்று 5 தடவைகள் தொடர்ந்து செயற்படுத்தபடும் + // இந்த சுற்று 5 தடவைகள் தொடர்ந்து செயற்படுத்தபடும் } -//for /In சுற்றுகள் prototype சங்கிலியில் உள்ள சகல காரணிகள் ஊடகவும் செல்லும் +//for /In சுற்றுகள் prototype சங்கிலியில் உள்ள சகல காரணிகள் ஊடகவும் செல்லும் var description = ""; -var person = {fname:"Paul", lname:"Ken", age:18}; +var person = {fname:"Paul", lname:"Ken", age:18}; for (var x in person){ description += person[x] + " "; } //ஒரு பொருளில் (Object) இடப்பட்ட பண்புகளை (properties) கருத்தில் கொள்ளும் போது -//குறிப்பிட்ட பண்புகளை அந்த Object கொண்டுள்ளதா என பார்க்க +//குறிப்பிட்ட பண்புகளை அந்த Object கொண்டுள்ளதா என பார்க்க var description = ""; -var person = {fname:"Paul", lname:"Ken", age:18}; +var person = {fname:"Paul", lname:"Ken", age:18}; for (var x in person){ if (person.hasOwnProperty(x)){ description += person[x] + " "; } } -//for /in ஆனது அணியில் உள்ள பண்புகள் ஒழுங்குபடுத்தப்பட்டவிதம் முக்கியம் -//ஆயின் பாவிப்பதை தவிர்க்கவும் ஏனெனில் அது சரியான ஒழுங்கில் -//வெளியீட்டை தரும் என்பது ஐயம் ஆகும் +//for /in ஆனது அணியில் உள்ள பண்புகள் ஒழுங்குபடுத்தப்பட்டவிதம் முக்கியம் +//ஆயின் பாவிப்பதை தவிர்க்கவும் ஏனெனில் அது சரியான ஒழுங்கில் +//வெளியீட்டை தரும் என்பது ஐயம் ஆகும் // && is logical and, || is logical or if (house.size == "big" && house.colour == "blue"){ @@ -169278,16 +169278,16 @@ switch (grade) { /////////////////////////////////// // 4. Functions, Scope and Closures -// JavaScript இல் functions நிறுவ `function` keyword.பயன்படும் +// JavaScript இல் functions நிறுவ `function` keyword.பயன்படும் function myFunction(thing){ return thing.toUpperCase(); } myFunction("foo"); // = "FOO" -//ஒரு பெறுமானத்தை return செய்ய வேண்டும் எனின் இரண்டும் ஒரே வரியில் -//இருக்க வேண்டும் இல்லாவிடின் return ஆனது `undefined ` return செய்யும் -//காற் புள்ளி தானாகவே இடப்படும் , நீங்கள் Allman style உபயோகிக்கும் போது -//அவதானமாக இருக்கவும் +//ஒரு பெறுமானத்தை return செய்ய வேண்டும் எனின் இரண்டும் ஒரே வரியில் +//இருக்க வேண்டும் இல்லாவிடின் return ஆனது `undefined ` return செய்யும் +//காற் புள்ளி தானாகவே இடப்படும் , நீங்கள் Allman style உபயோகிக்கும் போது +//அவதானமாக இருக்கவும் function myFunction() { return // <- semicolon automatically inserted here @@ -169297,20 +169297,20 @@ function myFunction() } myFunction(); // = undefined -// JavaScript functions ஆனது first class objects ஆகும் ,எனவே அவற்றை மாறிகளுக்கு -//assign செய்ய முடியும் அதுமட்டும் அல்லது functions களில் arguments ஆக அனுப்பமுடியும் +// JavaScript functions ஆனது first class objects ஆகும் ,எனவே அவற்றை மாறிகளுக்கு +//assign செய்ய முடியும் அதுமட்டும் அல்லது functions களில் arguments ஆக அனுப்பமுடியும் // உதாரணமாக ஒரு event handler: function myFunction(){ - //இந்த code 5 செக்கன்களில் செயற்படுத்தப்படும் + //இந்த code 5 செக்கன்களில் செயற்படுத்தப்படும் } setTimeout(myFunction, 5000); -// Note: setTimeout ஆனது ஜாவஸ்க்ரிப்ட் சேர்ந்தது அன்று , ஆனால் அந்த வசதி -//உலாவிகளிலும் ,Node .js காணப்படுகிறது +// Note: setTimeout ஆனது ஜாவஸ்க்ரிப்ட் சேர்ந்தது அன்று , ஆனால் அந்த வசதி +//உலாவிகளிலும் ,Node .js காணப்படுகிறது -// Function objects கட்டாயம் பெயரிடப்பட வீண்டும் என்று அவசியம் இல்லை -// அவை anonymous(பெயரிடப்படாமல்) உருவாக்கபடலாம் +// Function objects கட்டாயம் பெயரிடப்பட வீண்டும் என்று அவசியம் இல்லை +// அவை anonymous(பெயரிடப்படாமல்) உருவாக்கபடலாம் setTimeout(function(){ - //இந்த code 5 செக்கன்களில் செயற்படுத்தப்படும் + //இந்த code 5 செக்கன்களில் செயற்படுத்தப்படும் }, 5000); // JavaScript function ஒரு குறிப்பிட்ட scope(எல்லை) கொண்டுள்ளது ; @@ -169319,28 +169319,28 @@ setTimeout(function(){ if (true){ var i = 5; } -i; // = 5 - //இது undefined அல்ல +i; // = 5 - //இது undefined அல்ல -// இதன் காரணமாக anonymous functions உடனடியாக செயற்படுத்தபடுகின்றன +// இதன் காரணமாக anonymous functions உடனடியாக செயற்படுத்தபடுகின்றன //இதன் மூலம் தற்காலிக மாறிகள்(variable) குளோபல் scope //இற்கு மாறுவதை தவிர்க்கலாம் . (function(){ var temporary = 5; //நாங்கள் ஒரு மாறியை எங்கிருந்தும் அணுக (access) அதை "global object" //ஒன்றுக்கு வழங்க வேண்டும் உலாவியில் அது எப்போதும் `window` ஆகும் . - //உலாவி அல்லாத சூழலில் (Node.js) வேறு பெயருடன் இருக்கும் + //உலாவி அல்லாத சூழலில் (Node.js) வேறு பெயருடன் இருக்கும் window.permanent = 10; })(); temporary; // raises ReferenceError permanent; // = 10 -//JavaScript's மிகவும் சக்தி வாய்ந்த ஒரு வசதி closures ஆகும் +//JavaScript's மிகவும் சக்தி வாய்ந்த ஒரு வசதி closures ஆகும் //ஒரு function இன்னொரு function உள் உருவாக்கபடின் -//அது உருவாகப்பட்ட function இன் மாறிகளை அணுக முடியும் +//அது உருவாகப்பட்ட function இன் மாறிகளை அணுக முடியும் function sayHelloInFiveSeconds(name){ var prompt = "Hello, " + name + "!"; - // Inner functions ஆனது local scope இல் காணப்படும் - //அது `var ` என்ற குறியீட்டு சொல்லால் நிறுவப்படும் + // Inner functions ஆனது local scope இல் காணப்படும் + //அது `var ` என்ற குறியீட்டு சொல்லால் நிறுவப்படும் function inner(){ alert(prompt); } @@ -169349,12 +169349,12 @@ function sayHelloInFiveSeconds(name){ //செயற்பாடு முடிவடைய ,setTimeout ஆனது inner function call செய்யும். } -sayHelloInFiveSeconds("Adam"); // //இது ஒரு popup ஐ ஐந்து செக்கன்களில் காட்டும் +sayHelloInFiveSeconds("Adam"); // //இது ஒரு popup ஐ ஐந்து செக்கன்களில் காட்டும் /////////////////////////////////// -// 5. Objects; Constructors and Prototypes பற்றி மேலும் +// 5. Objects; Constructors and Prototypes பற்றி மேலும் -// Objects functions ஐ கொண்டிருக்கலாம் +// Objects functions ஐ கொண்டிருக்கலாம் var myObj = { myFunc: function(){ return "Hello world!"; @@ -169362,8 +169362,8 @@ var myObj = { }; myObj.myFunc(); // = "Hello world!" -//functions ஆனது objects உடன் இணைக்கப்பட்டுள போது அவை object ஐ அணுக முடியும் -//அவை this என்ற குறியீட்டு சொல்லை பயன்படுத்தி இணைக்கபடுகின்றன +//functions ஆனது objects உடன் இணைக்கப்பட்டுள போது அவை object ஐ அணுக முடியும் +//அவை this என்ற குறியீட்டு சொல்லை பயன்படுத்தி இணைக்கபடுகின்றன myObj = { myString: "Hello world!", myFunc: function(){ @@ -169372,20 +169372,20 @@ myObj = { }; myObj.myFunc(); // = "Hello world!" -//எங்கள் function ஆனது தொழிற் படாமல் போகலாம் அது context(அமைப்பு ) of the object call செய்யபடவிடின் +//எங்கள் function ஆனது தொழிற் படாமல் போகலாம் அது context(அமைப்பு ) of the object call செய்யபடவிடின் var myFunc = myObj.myFunc; myFunc(); // = undefined -//function ஆனது ஒரு object உக்கு assign செய்யலாம் பிறகு அதை நாம் அணுகமுடியும் -//`this` மூலம் +//function ஆனது ஒரு object உக்கு assign செய்யலாம் பிறகு அதை நாம் அணுகமுடியும் +//`this` மூலம் var myOtherFunc = function(){ return this.myString.toUpperCase(); } myObj.myOtherFunc = myOtherFunc; myObj.myOtherFunc(); // = "HELLO WORLD!" -//ஒரு function ஒரு அமைப்பை நாம் உருவாக்க முடியும் +//ஒரு function ஒரு அமைப்பை நாம் உருவாக்க முடியும் //அதை நாம் `call` அல்லது `apply` மூலம் செயல்படுத்த முடியும் var anotherFunc = function(s){ @@ -169393,34 +169393,34 @@ var anotherFunc = function(s){ } anotherFunc.call(myObj, " And Hello Moon!"); // = "Hello World! And Hello Moon!" -//apply செயற்பாட்டளவில் ஒத்தன ,ஆனால் அது array (அணி) argument +//apply செயற்பாட்டளவில் ஒத்தன ,ஆனால் அது array (அணி) argument //ஆக எடுக்கிறது. anotherFunc.apply(myObj, [" And Hello Sun!"]); // = "Hello World! And Hello Sun!" -//இது தொடர்ச்சியான arguments ஐ நாம் function ஒன்றுக்குள் pass பண்ண -//வேண்டும் எனில் மிகவும் உபயோகமானது +//இது தொடர்ச்சியான arguments ஐ நாம் function ஒன்றுக்குள் pass பண்ண +//வேண்டும் எனில் மிகவும் உபயோகமானது Math.min(42, 6, 27); // = 6 Math.min([42, 6, 27]); // = NaN (uh-oh!) Math.min.apply(Math, [42, 6, 27]); // = 6 -//ஆனால் `call ` ,`apply ` இரண்டும் தற்காலிகமானவை -//அவற்றை நிரந்தரமாக்க bind function ஐ பயன்படுத்தவும் +//ஆனால் `call ` ,`apply ` இரண்டும் தற்காலிகமானவை +//அவற்றை நிரந்தரமாக்க bind function ஐ பயன்படுத்தவும் var boundFunc = anotherFunc.bind(myObj); boundFunc(" And Hello Saturn!"); // = "Hello World! And Hello Saturn!" -//`bind ` ஐ உபயோகித்து ஒரு function ஐ பகுதியாக apply செய்ய முடியும் +//`bind ` ஐ உபயோகித்து ஒரு function ஐ பகுதியாக apply செய்ய முடியும் var product = function(a, b){ return a * b; } var doubler = product.bind(this, 2); doubler(8); // = 16 -//ஒரு function ஐ நாம் new என்ற குறியீட்டு சொல்லை பயன்படுத்தி -//அழைக்கும் போது புதிய object உருவாக்கப்படும் .இவ்வாறான functions -//constructors என அழைக்கப்படும் +//ஒரு function ஐ நாம் new என்ற குறியீட்டு சொல்லை பயன்படுத்தி +//அழைக்கும் போது புதிய object உருவாக்கப்படும் .இவ்வாறான functions +//constructors என அழைக்கப்படும் var MyConstructor = function(){ this.myNumber = 5; @@ -169428,15 +169428,15 @@ var MyConstructor = function(){ myNewObj = new MyConstructor(); // = {myNumber: 5} myNewObj.myNumber; // = 5 -//ஒவ்வொரு JavaScript object உம் ஒரு `prototype ` கொண்டுள்ளது -//நீங்கள் object ஒன்றின் ஒரு property ஐ அணுகும் போது -//அந்த property இல்லாவிடின் interpreter ஆனது -//அதன் prototype உள்ளதா என பார்க்கும் +//ஒவ்வொரு JavaScript object உம் ஒரு `prototype ` கொண்டுள்ளது +//நீங்கள் object ஒன்றின் ஒரு property ஐ அணுகும் போது +//அந்த property இல்லாவிடின் interpreter ஆனது +//அதன் prototype உள்ளதா என பார்க்கும் -//JS இன் சில செயலாக்கங்கள் ஒரு object இன் protoype ஐ +//JS இன் சில செயலாக்கங்கள் ஒரு object இன் protoype ஐ //இலகுவாக `__proto__` மூலம் access செய்ய முடியும் . -//இது prototype பாவணை யை இலகுவாக்கினாலும் -//இது சரியான ஒரு முறை அல்ல +//இது prototype பாவணை யை இலகுவாக்கினாலும் +//இது சரியான ஒரு முறை அல்ல var myObj = { myString: "Hello world!" }; @@ -169453,21 +169453,21 @@ myObj.meaningOfLife; // = 42 // This works for functions, too. myObj.myFunc(); // = "hello world!" -//உங்கள் property prototype இல் இல்லது இருப்பின் , protype இன் -//prototype search செய்யப்படும் +//உங்கள் property prototype இல் இல்லது இருப்பின் , protype இன் +//prototype search செய்யப்படும் myPrototype.__proto__ = { myBoolean: true }; myObj.myBoolean; // = true -//ஒவ்வொரு object உம் அதன் protype க்கும் reference (மேற்கோள் ) ஒன்றை வைத்திருக்கும் +//ஒவ்வொரு object உம் அதன் protype க்கும் reference (மேற்கோள் ) ஒன்றை வைத்திருக்கும் //நாம் ஒரு protype இணை மாற்றினால் அதன் மாற்றங்கள் எல்லா இடத்திலும் (program இல் ) -//பிரதிபலிக்கும் +//பிரதிபலிக்கும் myPrototype.meaningOfLife = 43; myObj.meaningOfLife; // = 43 - -//நாம் முன்பு கூறியது போல் `__proto__` பயன்படுத்துவது சரியான முறை அல்ல + +//நாம் முன்பு கூறியது போல் `__proto__` பயன்படுத்துவது சரியான முறை அல்ல //எனவே நாம் ஒரு protype ஐ object இல் உருவாக்க இரண்டு வழிமுறைகள் //உள்ளன @@ -169530,7 +169530,7 @@ String.prototype.firstCharacter = function(){ //இது பழைய சூழல்களில் உபயோகிகப்படும். -//நாங்கள் முன்பு கூறி இருந்தோம் Object.create சில இடங்களில் இந்த முறை இன்னும் +//நாங்கள் முன்பு கூறி இருந்தோம் Object.create சில இடங்களில் இந்த முறை இன்னும் //அறிமுகம் ஆகவில்லை என்று ஆனால் இதை polyfill ஐ பயன்படுத்தி உருவாக்க //முடியும் @@ -169588,7 +169588,7 @@ lang: ta-in Learn X in Y Minutes இதுவே மிகவும் இலகுவான பகுதியாக அமைய போகிறது. -ஜேசன் இன் எளிமையான கட்டமைப்பில் குறிப்புக்கள் (Comments) இல்லை , எனினும் +ஜேசன் இன் எளிமையான கட்டமைப்பில் குறிப்புக்கள் (Comments) இல்லை , எனினும் பெரும்பாலான பாகுபடுத்திகளில் C - style முறையிலான (`//`, `/* */`) குறிப்புகளை இட முடியும். சில பாகுபடுத்திகள்(interpreter) குறிப்புகளுக்கு (comments)தொடர்ச்சியாக வரும் காற்புள்ளியை அனுமதிக்கின்றன (உதாரணமாக ஒரு அணியை (array) அடுத்துவரும் காற்புள்ளி @@ -169596,23 +169596,23 @@ Learn X in Y Minutes இதுவே மிகவும் இலகுவான எனினும் சகல இடங்களிலும் ஜேசன் பயன்படுத்த பட வேண்டும் எனில் மேற்கூறிய குறிப்புகளை தவிர்த்தல் நல்லது .\ -ஜேசன் 100% மிக சரியாக அமைவது மட்டும் இன்றி +ஜேசன் 100% மிக சரியாக அமைவது மட்டும் இன்றி இலகுவாக புரியக் கூடிய எளிய தரவு உள்மாற்றீட்டு வடிவம் ஆகும். ஜேசன் அனுமதிக்கும் தரவு வகைகள் : சரம் (string),முழு (int),பூலியன் (தர்க ரீதியில் ஆன கட்டமைப்பு), அணி (array ),கழி (null ),பொருள் (object). -ஜேசன் அனுமதிக்கும் அல்லது பாவனைக்கு உட்படுத்த கூடிய உலாவிகள் (browsers): +ஜேசன் அனுமதிக்கும் அல்லது பாவனைக்கு உட்படுத்த கூடிய உலாவிகள் (browsers): Firefox(Mozilla) 3.5, Internet Explorer 8, Chrome, Opera 10, Safari 4. ஜேசனின் கோப்புவகை(filetype) ".json " ஆகும் . -ஜேசன் உரைக்கான MIME வகை "application/json" ஆகும். -ஜேசன் இல் காணப்படும் பிரதான பின்னடைவு தரவு இனம் இதுவென்று வரையறுக்க +ஜேசன் உரைக்கான MIME வகை "application/json" ஆகும். +ஜேசன் இல் காணப்படும் பிரதான பின்னடைவு தரவு இனம் இதுவென்று வரையறுக்க படாமை ஆகும் . -ஒரு ஜேசன் இன் எளிய கட்டமைப்பு கீழே காட்டப்பட்டுள்ளது +ஒரு ஜேசன் இன் எளிய கட்டமைப்பு கீழே காட்டப்பட்டுள்ளது ```json { @@ -169673,7 +169673,7 @@ XML ஆனது ஒரு கட்டமைப்பு மொழி ஆகு தகவலை பரிமாறவும் உருவாக்கபட்டுள்ளது -HTML போல் அன்றி , XML ஆனது தகவலை மட்டும் கொண்டு செல்ல்கிறது +HTML போல் அன்றி , XML ஆனது தகவலை மட்டும் கொண்டு செல்ல்கிறது * XML வாக்கிய அமைப்பு @@ -169704,10 +169704,10 @@ HTML போல் அன்றி , XML ஆனது தகவலை மட் @@ -169777,11 +169777,11 @@ With this tool, you can check the XML data outside the application logic. ]> - +--> @@ -169919,7 +169919,7 @@ set action pu # , the following three commands are equivalent: puts $greeting -${action}ts $greeting +${action}ts $greeting [set action]ts $greeting @@ -170157,7 +170157,7 @@ if {3 > 4} { } -# Loops are implemented as routines. The first and third arguments to +# Loops are implemented as routines. The first and third arguments to # "for" are treated as scripts, while the second argument is treated as # an expression: set res 0 @@ -170247,7 +170247,7 @@ try { set replacement {Archibald Sorbisol} set command {set name $replacement} -set command [subst $command] +set command [subst $command] try { eval $command ;# The same error as before: too many arguments to "set" in \ {set name Archibald Sorbisol} @@ -170332,15 +170332,15 @@ proc countdown count { } coroutine countdown1 countdown 3 coroutine countdown2 countdown 5 -puts [countdown1] ;# -> 2 -puts [countdown2] ;# -> 4 -puts [countdown1] ;# -> 1 -puts [countdown1] ;# -> 0 +puts [countdown1] ;# -> 2 +puts [countdown2] ;# -> 4 +puts [countdown1] ;# -> 1 +puts [countdown1] ;# -> 0 catch { puts [coundown1] ;# -> invalid command name "countdown1" -} cres copts +} cres copts puts $cres -puts [countdown2] ;# -> 3 +puts [countdown2] ;# -> 3 # Coroutine stacks can yield control to each other: @@ -171439,7 +171439,7 @@ TOML stands for Tom's Obvious, Minimal Language. It is a data serialisation lang It is an alternative to YAML and JSON. It aims to be more human friendly than JSON and simpler that YAML. TOML is designed to map unambiguously to a hash table. TOML should be easy to parse into data structures in a wide variety of languages. Be warned, TOML's spec is still changing a lot. Until it's marked as 1.0, you -should assume that it is unstable and act accordingly. This document follows TOML v0.4.0. +should assume that it is unstable and act accordingly. This document follows TOML v0.4.0. ```toml # Comments in TOML look like this. @@ -171711,8 +171711,8 @@ translators: lang: tr-tr --- -Brainfuck (normalde brainfuck olarak bütün harfleri küçük olarak yazılır.) -son derece minimal bir programlama dilidir. (Sadece 8 komut) ve tamamen +Brainfuck (normalde brainfuck olarak bütün harfleri küçük olarak yazılır.) +son derece minimal bir programlama dilidir. (Sadece 8 komut) ve tamamen Turing'dir. ``` @@ -171814,23 +171814,23 @@ anlarsanız sizi isteğiniz yere götürecektir. Çoklu satırlı yorumlar bu şekilde görünür. */ -// C Standart kütüphanelerini uygulamanıza #include ile +// C Standart kütüphanelerini uygulamanıza #include ile // dahil edebilirsiniz. #include #include #include -// Kendi başlık(header) dosyalarınız dahil etmek için "çift tırnak" +// Kendi başlık(header) dosyalarınız dahil etmek için "çift tırnak" // kullanmalısınız. #include "my_header.h" -// Fonksiyonlarınızı bir .h dosyasında ya da c dosyanızın üst tarafta +// Fonksiyonlarınızı bir .h dosyasında ya da c dosyanızın üst tarafta // tanımlayın. void function_1(); void function_2(); -// Programınızın giriş noktası main isimli bir fonksiyondur ve +// Programınızın giriş noktası main isimli bir fonksiyondur ve // integer değer döner int main() { @@ -171852,31 +171852,31 @@ int main() { // short değişken tipi genellikle 2 byte boyutundadır. short x_short = 0; - // char tipi 1 byte boyutunu garanti eder. + // char tipi 1 byte boyutunu garanti eder. char x_char = 0; char y_char = 'y'; // Karakterler '' işaretleri arasına yazılır. // long tipi 4-8 byte olur; long long tipi en azından 64 bit garantiler. long x_long = 0; - long long x_long_long = 0; + long long x_long_long = 0; // float tipi 32-bit kayan noktalı sayı boyutundadır. float x_float = 0.0; - // double değişken tipi 64-bit kayan noktalı yazı tipindedir. + // double değişken tipi 64-bit kayan noktalı yazı tipindedir. double x_double = 0.0; - // Integral türleri işaretsiz olabilir. Bunun anlamı, onlar eksi değer - // olamaz demektir, ama aynı boyuttaki işaretsiz bir sayının maksimum + // Integral türleri işaretsiz olabilir. Bunun anlamı, onlar eksi değer + // olamaz demektir, ama aynı boyuttaki işaretsiz bir sayının maksimum // değeri işaretli bir sayının maksimum değeriden büyük olur. unsigned char ux_char; unsigned short ux_short; unsigned int ux_int; unsigned long long ux_long_long; - // Diğer taraftan char, ki her zaman bir byte boyutundadır, bu tipler - // makinenize göre boyut değiştirir. sizeof(T) size bir değişkenin byte - // cinsinden boyutunu verir öyle ki bu tipin boyutunu taşınabilir bir + // Diğer taraftan char, ki her zaman bir byte boyutundadır, bu tipler + // makinenize göre boyut değiştirir. sizeof(T) size bir değişkenin byte + // cinsinden boyutunu verir öyle ki bu tipin boyutunu taşınabilir bir // şekilde ifade edilebilir // Örneğin, printf("%lu\n", sizeof(int)); // => 4 (bir çok makinede 4-byte words) @@ -171886,7 +171886,7 @@ int main() { // Bu durumda verimliligin degeri derleme-zamani sabitidir. int a = 1; - // size_t bir objeyi temsil etmek için kullanılan 2 byte uzunluğundaki bir + // size_t bir objeyi temsil etmek için kullanılan 2 byte uzunluğundaki bir // işaretsiz tam sayı tipidir size_t size = sizeof(a++); // a++ is not evaluated @@ -171901,7 +171901,7 @@ int main() { // Şu şekilde bir diziyi 0 ile oluşturabilirsiniz: char my_array[20] = {0}; - // Dizinin elemanlarını indexlemek diğer diller gibidir, veya + // Dizinin elemanlarını indexlemek diğer diller gibidir, veya // diğer diller C gibi. my_array[0]; // => 0 @@ -171927,13 +171927,13 @@ int main() { // String'ler bir NUL (0x00) byte ile sonlandırılmış karakter dizileridir, // bu string içerisinde özel bir karakter olan '\0' ile gösterilir. - // (Biz Nul byte'i string karakterleri arasında bulundurmamıza gerek + // (Biz Nul byte'i string karakterleri arasında bulundurmamıza gerek // yoktur; derleyici onu bizim için dizinin sonuna ekler.) char a_string[20] = "This is a string"; printf("%s\n", a_string); // %s bir string formatıdır. /* - a_string 16 karakter uzunluğundadır. + a_string 16 karakter uzunluğundadır. 17. karakter NUL karakteridir. 18., 19. ve 20. karakterler tanımsızdır.(undefined) */ @@ -171966,7 +171966,7 @@ int main() { // Karşılaştırma operatörleri muhtemelen tanıdıktır, ama // C'de boolean tipi yoktur. Bunun yerine sayı(int) kullanırız. - // 0 false yerine ve diğer herşey true yerine geçmektedir. + // 0 false yerine ve diğer herşey true yerine geçmektedir. // (Karşılaştırma operatörleri her zaman 0 veya 1 dönmektedir.) 3 == 2; // => 0 (false) 3 != 2; // => 1 (true) @@ -172037,7 +172037,7 @@ int main() { // Tip Dönüşümleri /////////////////////////////////////// - // C'de her değer bir tipe sahiptir, ama siz bir değeri bir başka tipe + // C'de her değer bir tipe sahiptir, ama siz bir değeri bir başka tipe // dönüştürebilirsiniz. int x_hex = 0x01; // Hex literatüründe değer atayabilirsiniz. @@ -172050,11 +172050,11 @@ int main() { // Tip hiçbir hata vermeden taşacaktır(overflow). printf("%d\n", (unsigned char) 257); // => 1 (Max char = 255 eğer karakter 8 bit uzunluğunda ise) - // `char`, `signed char` ve `unsigned char` karakter tiplerinin maksimum uzunluğunu - // belirlemek için kütüphanesindeki CHAR_MAX, SCHAR_MAX ve UCHAR_MAX + // `char`, `signed char` ve `unsigned char` karakter tiplerinin maksimum uzunluğunu + // belirlemek için kütüphanesindeki CHAR_MAX, SCHAR_MAX ve UCHAR_MAX // macrolarını kullanınız. - // Integral tipi kayan noktalı yazı tipine dönüştürülecektir ve tam tersi. + // Integral tipi kayan noktalı yazı tipine dönüştürülecektir ve tam tersi. printf("%f\n", (float)100); // %f formats a float printf("%lf\n", (double)100); // %lf formats a double printf("%d\n", (char)100.0); @@ -172063,36 +172063,36 @@ int main() { // İşaretçiler (Pointers) /////////////////////////////////////// - // Bir işaretci bellek adresini barındıran bir değişkendir. Tanımlaması ile işaret - // edeceği verinin tipi de belirtilecektir. Değişkenlerininzi bellek adreslerini - // getirerek bellek ile ilgili karışıklığı ortadan kaldırabilirsiniz. + // Bir işaretci bellek adresini barındıran bir değişkendir. Tanımlaması ile işaret + // edeceği verinin tipi de belirtilecektir. Değişkenlerininzi bellek adreslerini + // getirerek bellek ile ilgili karışıklığı ortadan kaldırabilirsiniz. int x = 0; - printf("%p\n", &x); // & işareti bir değişkenin bellek adresini getirmek için kullanılır. + printf("%p\n", &x); // & işareti bir değişkenin bellek adresini getirmek için kullanılır. // (%p işaretçilerin formatıdır) // => Bazı bellek adresleri yazdırılacaktır. // İşaretçiler tanımlanırken * ile başlar - int *px, not_a_pointer; // px sayı tipinde bir işaretçidir. + int *px, not_a_pointer; // px sayı tipinde bir işaretçidir. px = &x; // X değişkeninin bellek adresi px değişkeninde tutulmaktadır. - printf("%p\n", px); // => x değişkeninin bellek adresi yazdırılacaktır. + printf("%p\n", px); // => x değişkeninin bellek adresi yazdırılacaktır. printf("%d, %d\n", (int)sizeof(px), (int)sizeof(not_a_pointer)); // => 64-bit sistemde "8, 4" yazdırılacaktır. - // İşaretçinin adres olarak gösterdiği yerdeki değeri almak için + // İşaretçinin adres olarak gösterdiği yerdeki değeri almak için // değişkenin önüne * işareti ekleyiniz. - printf("%d\n", *px); // => 0 bastıracaktır, x in değeridir, + printf("%d\n", *px); // => 0 bastıracaktır, x in değeridir, // çünkü px değişkeni x in adresini göstermektedir. - // Ayrıca siz işaretçinin gösterdiği yerin değerini - // değiştirebilirsiniz. Burada referansı parantez içerisinde göstereceğiz + // Ayrıca siz işaretçinin gösterdiği yerin değerini + // değiştirebilirsiniz. Burada referansı parantez içerisinde göstereceğiz // çünkü ++ işleminin önceliği * işleminden yüksektir. - (*px)++; // px'in işaret ettiği değeri 1 artır. + (*px)++; // px'in işaret ettiği değeri 1 artır. printf("%d\n", *px); // => 1 yazdırılır. printf("%d\n", x); // => 1 yazdırılır. - int x_array[20]; // Diziler(arrays) bellekten yan yana bellek bloklarını + int x_array[20]; // Diziler(arrays) bellekten yan yana bellek bloklarını // tahsis etmek için iyi bir yöntemdir. int xx; for (xx=0; xx<20; xx++) { @@ -172102,7 +172102,7 @@ int main() { // Bir sayı tipinde işaretçi tanımlanıyor ve x_array'i işaret ediyor. int* x_ptr = x_array; // x_ptr artık dizinin ilk elemanını işaret etmektedir (the integer 20). - // Bu çalışacaktır çünkü diziler(arrays) aslında sadece onların ilk + // Bu çalışacaktır çünkü diziler(arrays) aslında sadece onların ilk // elemanlarını gösteren birer işaretçidir. // For example, when an array is passed to a function or is assigned to a pointer, // it decays into (implicitly converted to) a pointer. @@ -172121,25 +172121,25 @@ int main() { printf("%d\n", *(x_ptr)); // => 20 yazılacaktır. printf("%d\n", x_array[0]); // => 20 yazılacaktır. - // İşaretçiler kendi tiplerinde artırılır ve azaltılır. + // İşaretçiler kendi tiplerinde artırılır ve azaltılır. printf("%d\n", *(x_ptr + 1)); // => 19 yazılacaktır. printf("%d\n", x_array[1]); // => 19 yazılacaktır. - // Ayrıca dinamik olarak bir bellek bloğunu standart kütüphanede bulunan - // malloc fonksiyonu ile uygulamanız için ayırabilirsiniz. Bu fonksiyon - // byte türünden ayırmak istediğiniz bloğun boyutunu parametre olarak alır. + // Ayrıca dinamik olarak bir bellek bloğunu standart kütüphanede bulunan + // malloc fonksiyonu ile uygulamanız için ayırabilirsiniz. Bu fonksiyon + // byte türünden ayırmak istediğiniz bloğun boyutunu parametre olarak alır. int* my_ptr = (int*) malloc(sizeof(int) * 20); for (xx=0; xx<20; xx++) { *(my_ptr + xx) = 20 - xx; // my_ptr[xx] = 20-xx 'de aynı zamanda çalışabilir } // Bellekte 20, 19, 18, 17... 2, 1 (as ints) şeklinde oluşturulmuş olacaktır. // Eğer ayrımadığınız bir bellek adresini çağırırsanız - // öngörülmeyen bir değer dönecektir. + // öngörülmeyen bir değer dönecektir. printf("%d\n", *(my_ptr + 21)); // => kim-bilir-ne-yazacak? - // Malloc fonksiyonu ile ayrıdığınız bellek kısmı ile işiniz bittiğinde - // onu free fonksiyonu ile boşaltmalısınız, aksi durumda uygulamanız - // kapatılana kadar belleğin o kısmını kimse kullanamaz. + // Malloc fonksiyonu ile ayrıdığınız bellek kısmı ile işiniz bittiğinde + // onu free fonksiyonu ile boşaltmalısınız, aksi durumda uygulamanız + // kapatılana kadar belleğin o kısmını kimse kullanamaz. free(my_ptr); // Metin Dizileri(String) birer karakter dizisidir(char array), ama @@ -172163,8 +172163,8 @@ int add_two_ints(int x1, int x2){ } /* -Fonksiyonlar pass-by-value'dür, ama isterseniz işaretçi referanslarını -kullanarak fonksiyona gönderilen parametrenin değerini değiştirebilirsiniz. +Fonksiyonlar pass-by-value'dür, ama isterseniz işaretçi referanslarını +kullanarak fonksiyona gönderilen parametrenin değerini değiştirebilirsiniz. Example: Bir metni tersine çevirme */ @@ -172194,7 +172194,7 @@ printf("%s\n", c); // => ".tset a si sihT" typedef int my_type; my_type my_type_var = 0; -// Struct'lar bir veri koleksiyonudur. +// Struct'lar bir veri koleksiyonudur. struct rectangle { int width; int height; @@ -172216,14 +172216,14 @@ void function_1(){ // Bir yapının adresini işaretçiye atayabilirsiniz. struct rectangle* my_rec_ptr = &my_rec; - // İşaretçi üzerinden bir yapıya ulaşabilirsiniz. + // İşaretçi üzerinden bir yapıya ulaşabilirsiniz. (*my_rec_ptr).width = 30; - // ya da -> işareti ile yapının elemanlarına ulaşabilirsiniz. + // ya da -> işareti ile yapının elemanlarına ulaşabilirsiniz. my_rec_ptr->height = 10; // (*my_rec_ptr).height = 10; ile aynıdır. } -// Kolaylık sağlamak için bir yapıya typedef tanımlayabilirsiniz. +// Kolaylık sağlamak için bir yapıya typedef tanımlayabilirsiniz. typedef struct rectangle rect; int area(rect r){ @@ -172237,8 +172237,8 @@ int area(rect r){ /* Çalışma zamanında, fonksiyonların bilinen bir bellek adresleri vardır. Fonksiyon işaretçileri fonksiyonları direk olarak çağırmayı sağlayan veya geri bildirim(callback) -için parametre gönderirken kullanılan başka birer işaretçidirler. Ama, syntax tanımı -başlangıçta biraz karışık gelebilir. +için parametre gönderirken kullanılan başka birer işaretçidirler. Ama, syntax tanımı +başlangıçta biraz karışık gelebilir. Örnek: bir işaretçiden str_reverse kullanımı */ @@ -172259,7 +172259,7 @@ typedef void (*my_fnp_type)(char *); // Gerçek bir işaretçi tanımlandığı zaman ki kullanımı: // ... -// my_fnp_type f; +// my_fnp_type f; ``` @@ -172297,7 +172297,7 @@ C# zarif ve tip güvenli nesne yönelimli bir dil olup geliştiricilerin .NET fr [Daha fazlasını okuyun.](http://msdn.microsoft.com/en-us/library/vstudio/z1zx9t92.aspx) ```c# -// Tek satırlık yorumlar // ile başlar +// Tek satırlık yorumlar // ile başlar /* Birden fazla satırlı yorumlar buna benzer */ @@ -172324,7 +172324,7 @@ namespace Learning public class LearnCSharp { // TEMEL SÖZ DİZİMİ - daha önce Java ya da C++ kullandıysanız İLGİNÇ ÖZELLİKLER'e geçin - public static void Syntax() + public static void Syntax() { // Satırları yazdırmak için Console.WriteLine kullanın Console.WriteLine("Merhaba Dünya"); @@ -172389,7 +172389,7 @@ namespace Learning string fooString = "\"escape\" quotes and add \n (new lines) and \t (tabs)"; Console.WriteLine(fooString); - // İndeks numarası kullanarak bir string'in bütün karakterlerine erişilebilirsiniz: + // İndeks numarası kullanarak bir string'in bütün karakterlerine erişilebilirsiniz: char charFromString = fooString[1]; // => 'e' // String'ler değiştirilemez: fooString[1] = 'X' işlemini yapamazsınız; @@ -172407,7 +172407,7 @@ namespace Learning string bazString = @"Here's some stuff on a new line! ""Wow!"", the masses cried"; - // Bir değişkeni değiştirilemez yapmak için const ya da read-only kullanın. + // Bir değişkeni değiştirilemez yapmak için const ya da read-only kullanın. // const değerleri derleme sırasında hesaplanır const int HOURS_I_WORK_PER_WEEK = 9001; @@ -172635,7 +172635,7 @@ on a new line! ""Wow!"", the masses cried"; // // İLGİNÇ ÖZELLİKLER // - + // VARSAYILAN METOD TANIMLAMALARI public // Görünebilir @@ -172647,7 +172647,7 @@ on a new line! ""Wow!"", the masses cried"; int another = 3, params string[] otherParams // Metoda gönderilen diğer bütün parametreleri alır ) - { + { return -1; } @@ -172660,8 +172660,8 @@ on a new line! ""Wow!"", the masses cried"; // TKey ve TValue değerleri kullanıcı tarafından bu fonksiyon çağırılırken belirtilir. // Bu metod Python'daki SetDefault'a benzer public static TValue SetDefault( - IDictionary dictionary, - TKey key, + IDictionary dictionary, + TKey key, TValue defaultItem) { TValue result; @@ -172706,7 +172706,7 @@ on a new line! ""Wow!"", the masses cried"; // GENERIC'LER // - var phonebook = new Dictionary() { + var phonebook = new Dictionary() { {"Sarah", "212 555 5555"} // Telefon rehberine bir kaç numara ekleyelim. }; @@ -172727,19 +172727,19 @@ on a new line! ""Wow!"", the masses cried"; writer.WriteLine("Nothing suspicious here"); // Bu bölümün sonunda kaynaklar temilenir. // Hata fırlatılmış olsa bile. - } + } // PARALEL FRAMEWORK // 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", + var websites = new string[] { + "http://www.google.com", "http://www.reddit.com", "http://www.shaunmccarthy.com" }; var responses = new Dictionary(); - - // Her istek farklı bir thread de işlem görecek + + // Her istek farklı bir thread de işlem görecek // bir sonraki işleme geçmeden birleştirilecek. - Parallel.ForEach(websites, + Parallel.ForEach(websites, new ParallelOptions() {MaxDegreeOfParallelism = 3}, // en fazla 3 thread kullanmak için website => { @@ -172784,7 +172784,7 @@ on a new line! ""Wow!"", the masses cried"; // ASPARALLEL // Linq ve paralel işlemlerini birleştirme var threeWheelers = bikes.AsParallel().Where(b => b.Wheels == 3).Select(b => b.Name); - // bu paralel bir şekilde gerçekleşecek! Threadler otomatik ve sihirli bir şekilde işleri paylaşacak! + // bu paralel bir şekilde gerçekleşecek! Threadler otomatik ve sihirli bir şekilde işleri paylaşacak! // Birden fazla çekirdeğiniz varsa büyük veri setleri ile kullanmak için oldukça uygun bir yapı. // LINQ - IQueryable objelerini mapler ve saklar, gecikmeli bir işlemdir @@ -172802,9 +172802,9 @@ on a new line! ""Wow!"", the masses cried"; .Select(b => b.Name); // hala sorgu çalışmadı // Şimdi sorgu çalışıyor, reader'ı açar ama sadece sizin sorgunuza uyanlar foreach döngüsüne girer. - foreach (string bike in query) + foreach (string bike in query) Console.WriteLine(result); - + } @@ -172887,7 +172887,7 @@ on a new line! ""Wow!"", the masses cried"; // Kurucular sınıf oluşturmanın bir yoludur // Bu bir varsayılan kurucudur. - public Bicycle() + public Bicycle() { this.Gear = 1; // bu objenin üyelerine this anahtar kelimesi ile ulaşılır Cadence = 50; // ama her zaman buna ihtiyaç duyulmaz @@ -172899,13 +172899,13 @@ on a new line! ""Wow!"", the masses cried"; // Bu belirlenmiş bir kurucudur. (argümanlar içerir) public Bicycle(int startCadence, int startSpeed, int startGear, - string name, bool hasCardsInSpokes, BikeBrand brand) + string name, bool hasCardsInSpokes, BikeBrand brand) : base() // önce base'i çağırın { - Gear = startGear; + Gear = startGear; Cadence = startCadence; _speed = startSpeed; - Name = name; + Name = name; _hasCardsInSpokes = hasCardsInSpokes; Brand = brand; } @@ -172944,7 +172944,7 @@ on a new line! ""Wow!"", the masses cried"; set { _hasTassles = value; } } - // Ayrıca tek bir satırda otomatik property tanımlayabilirsiniz. + // Ayrıca tek bir satırda otomatik property tanımlayabilirsiniz. // bu söz dizimi otomatik olarak alan oluşturacaktır. // Erişimi kısıtlamak için nitelik belirleyiciler getter veya setter'a ya da ikisine birden atanabilir: public bool IsBroken { get; private set; } @@ -173140,8 +173140,8 @@ for i=0 to n-1 LS[i] = LS[j]+1 for i=0 to n-1 if (largest < LS[i]) - -``` + +``` Bazı Ünlü Dinamik Programlama Problemleri -Floyd Warshall Algorithm - Tutorial and C Program source code:http://www.thelearningpoint.net/computer-science/algorithms-all-to-all-shortest-paths-in-graphs—floyd-warshall-algorithm-with-c-program-source-code @@ -173211,7 +173211,7 @@ let çiftler liste = List.filter çiftMi liste // List.filter 'boolean bir fonksiyon' ve // 'üzerinde çalışılacak bir liste' parametrelerinden oluşan // bir kütüphane fonksiyonu - + çiftler birdenBeşe // Şimdi fonksiyonu uygula. // Parantezleri önceliği netleştirmek için kullanabilirsiniz. Bu örnek @@ -173260,7 +173260,7 @@ optionKalıpEşleştirme geçerliDeğer optionKalıpEşleştirme geçersizDeğer // ------ Yazdırma ------ -// printf/printfn fonksiyonları C#'taki +// printf/printfn fonksiyonları C#'taki // Console.Write/WriteLine fonksiyonlarına benzer. printfn "Bir tamsayı %i, bir ondalık %f, bir boolean %b yazdırma" 1 2.0 true printfn "Bir string %s, ve jenerik bir tip %A" "merhaba" [1; 2; 3; 4] @@ -173314,8 +173314,8 @@ module FonksiyonOrnekleri = // Üç çesit sıralı fonksiyon vardır: // * Listeler en temel değiştirilemez kolleksiyonlardır. // * Diziler değiştirilebilir ve gerektiğinde daha verimlidirler. -// * Seriler tembel (lazy evaluation) ve sonsuzdurlar (Enumeratörler gibi). -// +// * Seriler tembel (lazy evaluation) ve sonsuzdurlar (Enumeratörler gibi). +// // Değiştirilmez map'ler ve kümeler ve bütün .NET kolleksiyonları // diğer kolleksiyon türleridir. @@ -173435,7 +173435,7 @@ module VeriTipiÖrnekleri = // -- Tuple oluşturmak için virgül kullan let ikiliTuple = 1, 2 let üçlüTuple = "a", 2, true - + // Tuple'lar çabuk ve kolay anonim tiplerdir. // paketi açmak için kalıp eşleştirme kullan let x, y = ikiliTuple // x = 1, y = 2 @@ -173621,7 +173621,7 @@ module AlgoritmaÖrnekleri = [] // boş listeyi döndür // Liste boş değilse | ilkEleman::diğerElemanlar -> // İlk elemanı al - let küçükElemanlar = // Daha küçük elemanları + let küçükElemanlar = // Daha küçük elemanları diğerElemanlar // diğerlerinden ayır |> List.filter (fun e -> e < ilkEleman) |> sırala // ve sırala @@ -174325,7 +174325,7 @@ Bu da 3. paragrafım! paragrafı bitirdikten sonra 2 veya daha fazla boşluk bırakın ve yeni paragrafa başlayın, bu bir
      etiketi sayılacaktır --> -Bu yazının sonunda 2 boşluk var (bu satırı seçerek kontrol edebilirsiniz). +Bu yazının sonunda 2 boşluk var (bu satırı seçerek kontrol edebilirsiniz). Bir üst satırda
      etiketi var! @@ -174333,7 +174333,7 @@ Bir üst satırda
      etiketi var! > Bu bir blok etiketi. Satırlara ayırmak için > her satırın başında `>` karakter yerleştirmeli veya tek satırda bütün içeriği yazabilirsiniz. -> Satır `>` karakteri ile başladığı sürece sorun yok. +> Satır `>` karakteri ile başladığı sürece sorun yok. > Ayrıca alt alta da blok elementi açabilirsiniz >> iç içe yani @@ -174416,7 +174416,7 @@ def foobar end \`\`\` - @@ -174429,7 +174429,7 @@ syntax aydınlatmaları uygulanacaktır --> **************** - @@ -174451,7 +174451,7 @@ gideceği adresi belirtin --> [foobar]: http://foobar.biz/ "okey!" - + @@ -182052,11 +182052,11 @@ if __name__ == '__main__': # Gọi phương thức tĩnh print(Human.grunt()) # => "*grunt*" - + # Không thể gọi phương thức tĩnh với một thực thể/đối tượng # bởi vì i.grunt() sẽ tự động đặt "self" (tức là đối tượng i) làm đối số thứ nhất print(i.grunt()) # => TypeError: grunt() takes 0 positional arguments but 1 was given - + # Thay đổi thuộc tính của đối tượng i.age = 42 # Truy cập thuộc tính @@ -182942,9 +182942,9 @@ filename: LearnVim.txt [Vim](http://www.vim.org) -(Vi IMproved) is a clone of the popular vi editor for Unix. It is a text -editor designed for speed and increased productivity, and is ubiquitous in most -unix-based systems. It has numerous keybindings for speedy navigation to +(Vi IMproved) is a clone of the popular vi editor for Unix. It is a text +editor designed for speed and increased productivity, and is ubiquitous in most +unix-based systems. It has numerous keybindings for speedy navigation to specific points in the file, and for fast editing. ## Basics of navigating Vim @@ -182985,12 +182985,12 @@ specific points in the file, and for fast editing. # Jumping to characters f # Jump forward and land on - t # Jump forward and land right before + t # Jump forward and land right before - # For example, + # For example, f< # Jump forward and land on < t< # Jump forward and land right before < - + # Moving by word w # Move forward by one word @@ -183011,15 +183011,15 @@ specific points in the file, and for fast editing. Vim is based on the concept on **modes**. -Command Mode - vim starts up in this mode, used to navigate and write commands -Insert Mode - used to make changes in your file -Visual Mode - used to highlight text and do operations to them +Command Mode - vim starts up in this mode, used to navigate and write commands +Insert Mode - used to make changes in your file +Visual Mode - used to highlight text and do operations to them Ex Mode - used to drop down to the bottom with the ':' prompt to enter commands ``` i # Puts vim into insert mode, before the cursor position a # Puts vim into insert mode, after the cursor position - v # Puts vim into visual mode + v # Puts vim into visual mode : # Puts vim into ex mode # 'Escapes' from whichever mode you're in, into Command mode @@ -183036,18 +183036,18 @@ Ex Mode - used to drop down to the bottom with the ':' prompt to enter comm ## The 'Grammar' of vim -Vim can be thought of as a set of commands in a +Vim can be thought of as a set of commands in a 'Verb-Modifier-Noun' format, where: -Verb - your action -Modifier - how you're doing your action +Verb - your action +Modifier - how you're doing your action Noun - the object on which your action acts on A few important examples of 'Verbs', 'Modifiers', and 'Nouns': ``` # 'Verbs' - + d # Delete c # Change y # Yank (copy) @@ -183069,7 +183069,7 @@ A few important examples of 'Verbs', 'Modifiers', and 'Nouns': s # Sentence p # Paragraph b # Block - + # Sample 'sentences' or commands d2w # Delete 2 words @@ -183114,7 +183114,7 @@ Here's a sample ~/.vimrc file: ``` " Example ~/.vimrc -" 2015.10 +" 2015.10 " Required for vim to be iMproved set nocompatible @@ -183972,7 +183972,7 @@ A XML document is *well-formed* if it is syntactically correct. However, it is p ## DTD Compatibility and XML Schema Definitions -Support for DTDs is ubiquitous because they are so old. Unfortunately, modern XML features like namespaces are not supported by DTDs. XML Schema Definitions (XSDs) are meant to replace DTDs for defining XML document grammar. +Support for DTDs is ubiquitous because they are so old. Unfortunately, modern XML features like namespaces are not supported by DTDs. XML Schema Definitions (XSDs) are meant to replace DTDs for defining XML document grammar. ## Resources @@ -184872,7 +184872,7 @@ angular.module('myApp', []).controller('namesCtrl', function($scope) {

      Total = {{ (quantity * price) | currency }}

      - + //一个过滤器可以通过一个管道符 (|) 及一个过滤器表达式添加到一个指令上。 //orderBy 过滤器根据一个表达式排序一个数组: @@ -184886,7 +184886,7 @@ angular.module('myApp', []).controller('namesCtrl', function($scope) {
      -//一个输入框过滤器可以通过一个管道符 (|) +//一个输入框过滤器可以通过一个管道符 (|) //以及后跟一个冒号和模式名的 filter 添加到一个指令上。 //该过滤器从一个数组中选择一个子集: @@ -184913,7 +184913,7 @@ angular.module('myApp', []).controller('namesCtrl', function($scope) { // AngularJS $http 是一个从 web 服务器上读取数据的核心服务。 // $http.get(url) 这个函数用来读取服务器数据。 -
      +
      • @@ -184954,7 +184954,7 @@ header("Access-Control-Allow-Origin: *"); // AngularJS 表格 // 使用 angular 显示表格非常简单: -
        +
    {{ $index + 1 }}
    @@ -185185,7 +185185,7 @@ app.controller("myCtrl", function($scope) { //myApp.js -var app = angular.module("myApp", []); +var app = angular.module("myApp", []); // 模块定义中的 [] 参数可用来定义依赖的模块。 @@ -185516,7 +185516,7 @@ grep "^foo.*bar$" file.txt # 使用选项 "-c" 统计行数 grep -c "^foo.*bar$" file.txt # 如果只是要按字面形式搜索字符串而不是按正则表达式,使用 fgrep (或 grep -F) -fgrep "^foo.*bar$" file.txt +fgrep "^foo.*bar$" file.txt # 以 bash 内建的 'help' 指令阅读 Bash 自带文档: @@ -186263,7 +186263,7 @@ char y_char = 'y'; // 字符变量的字面值需要用单引号包住 // long型(长整型)一般需要4个字节到8个字节; 而long long型则至少需要8个字节(64位) long x_long = 0; -long long x_long_long = 0; +long long x_long_long = 0; // float一般是用32位表示的浮点数字 float x_float = 0.0; @@ -186283,7 +186283,7 @@ unsigned long long ux_long_long; 'A' // => 在ASCII字符集中是65 // char类型一定会占用1个字节,但是其他的类型却会因具体机器的不同而各异 -// sizeof(T) 可以返回T类型在运行的机器上占用多少个字节 +// sizeof(T) 可以返回T类型在运行的机器上占用多少个字节 // 这样你的代码就可以在各处正确运行了 // sizeof(obj)返回表达式(变量、字面量等)的尺寸 printf("%zu\n", sizeof(int)); // => 4 (大多数的机器字长为4) @@ -186334,7 +186334,7 @@ char a_string[20] = "This is a string"; printf("%s\n", a_string); // %s 可以对字符串进行格式化 /* 也许你会注意到 a_string 实际上只有16个字节长. -第17个字节是一个空字符(NUL) +第17个字节是一个空字符(NUL) 而第18, 19 和 20 个字符的值是未定义。 */ @@ -186555,7 +186555,7 @@ for (xx=0; xx<20; xx++) { // 声明一个整型的指针,并初始化为指向x_array int* x_ptr = x_array; -// x_ptr现在指向了数组的第一个元素(即整数20). +// x_ptr现在指向了数组的第一个元素(即整数20). // 这是因为数组通常衰减为指向它们的第一个元素的指针。 // 例如,当一个数组被传递给一个函数或者绑定到一个指针时, //它衰减为(隐式转化为)一个指针。 @@ -186723,7 +186723,7 @@ int area(const rect *r) 例子:通过指针调用str_reverse */ void str_reverse_through_pointer(char *str_in) { - // 定义一个函数指针 f. + // 定义一个函数指针 f. void (*f)(char *); // 签名一定要与目标函数相同 f = &str_reverse; // 将函数的地址在运行时赋给指针 (*f)(str_in); // 通过指针调用函数 @@ -186739,7 +186739,7 @@ typedef void (*my_fnp_type)(char *); // 实际声明函数指针会这么用: // ... -// my_fnp_type f; +// my_fnp_type f; // 特殊字符 '\a' // bell @@ -187249,7 +187249,7 @@ lang: zh-cn ;; -> ;; (if (clojure.core/not true) (do (reverse "Hello World"))) -;; 当第一个参数为假时,(unless)会演算、返回主体。 +;; 当第一个参数为假时,(unless)会演算、返回主体。 ;; 否则返回nil。 (unless true "Hello") ; -> nil @@ -187410,7 +187410,7 @@ alert "I knew it!" if elvis? #=> if(typeof elvis !== "undefined" && elvis !== null) { alert("I knew it!"); } # 数组推导: -cubes = (math.cube num for num in list) +cubes = (math.cube num for num in list) #=>cubes = (function() { # var _i, _len, _results; # _results = []; @@ -187693,7 +187693,7 @@ nil ; 逻辑假,或者空列表 (defparameter *adjvec* (make-array '(3) :initial-contents '(1 2 3) :adjustable t :fill-pointer t)) - + *adjvec* ; => #(1 2 3) ;; 添加新的元素: @@ -188029,7 +188029,7 @@ nil ; 逻辑假,或者空列表 ;; 然而,在一个比较现代化的编译环境下,这样的WHILE是没有必要的; ;; LOOP形式的循环和这个WHILE同样的好,并且更易于阅读。 -;; 注意反引号'`',逗号','以及'@'这三个符号; +;; 注意反引号'`',逗号','以及'@'这三个符号; ;; 反引号'`'是一种所谓“quasiquote”的引用类型的运算符,有了它,之后的逗号“,”才有意义。 ;; 逗号“,”意味着解除引用(unquote,即开始求值); ;; “@”符号则表示将当前的参数插入到当前整个列表中。 @@ -188104,7 +188104,7 @@ namespace Learning public class LearnCSharp { // 基本语法 - 如果你以前用过 Java 或 C++ 的话,可以直接跳到后文「有趣的特性」 - public static void Syntax() + public static void Syntax() { // 使用 Console.WriteLine 打印信息 Console.WriteLine("Hello World"); @@ -188415,7 +188415,7 @@ on a new line! ""Wow!"", the masses cried"; // // 有趣的特性 // - + // 默认方法签名 public // 可见性 @@ -188427,7 +188427,7 @@ on a new line! ""Wow!"", the masses cried"; int another = 3, params string[] otherParams // 捕获其他参数 ) - { + { return -1; } @@ -188440,8 +188440,8 @@ on a new line! ""Wow!"", the masses cried"; // TKey和TValue类由用用户调用函数时指定。 // 以下函数模拟了Python的SetDefault public static TValue SetDefault( - IDictionary dictionary, - TKey key, + IDictionary dictionary, + TKey key, TValue defaultItem) { TValue result; @@ -188461,13 +188461,13 @@ on a new line! ""Wow!"", the masses cried"; public static void OtherInterestingFeatures() { - // 可选参数 + // 可选参数 MethodSignatures(3, 1, 3, "Some", "Extra", "Strings"); MethodSignatures(3, another: 3); // 显式指定参数,忽略可选参数 // 扩展方法 int i = 3; - i.Print(); // 参见下面的定义 + i.Print(); // 参见下面的定义 // 可为null的类型 对数据库交互、返回值很有用 // 任何值类型 (i.e. 不为类) 添加后缀 ? 后会变为可为null的值 @@ -188481,11 +188481,11 @@ on a new line! ""Wow!"", the masses cried"; // 变量类型推断 - 你可以让编译器推断变量类型: var magic = "编译器确定magic是一个字符串,所以仍然是类型安全的"; - // magic = 9; // 不工作,因为magic是字符串,而不是整数。 + // magic = 9; // 不工作,因为magic是字符串,而不是整数。 // 泛型 // - var phonebook = new Dictionary() { + var phonebook = new Dictionary() { {"Sarah", "212 555 5555"} // 在电话簿中加入新条目 }; @@ -188500,26 +188500,26 @@ on a new line! ""Wow!"", the masses cried"; // 可抛弃的资源管理 - 让你很容易地处理未管理的资源 // 大多数访问未管理资源 (文件操作符、设备上下文, etc.)的对象 - // 都实现了IDisposable接口。 + // 都实现了IDisposable接口。 // using语句会为你清理IDisposable对象。 using (StreamWriter writer = new StreamWriter("log.txt")) { writer.WriteLine("这里没有什么可疑的东西"); // 在作用域的结尾,资源会被回收 // (即使有异常抛出,也一样会回收) - } + } // 并行框架 // 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", + var websites = new string[] { + "http://www.google.com", "http://www.reddit.com", "http://www.shaunmccarthy.com" }; var responses = new Dictionary(); - + // 为每个请求新开一个线程 // 在运行下一步前合并结果 - Parallel.ForEach(websites, + Parallel.ForEach(websites, new ParallelOptions() {MaxDegreeOfParallelism = 3}, // max of 3 threads website => { @@ -188574,7 +188574,7 @@ on a new line! ""Wow!"", the masses cried"; // 执行被延迟了,这对于查询数据库来说很好 var filter = db.Bikes.Where(b => b.HasTassles); // 不运行查询 if (42 > 6) // 你可以不断地增加筛选,包括有条件的筛选,例如用于“高级搜索”功能 - filter = filter.Where(b => b.IsBroken); // 不运行查询 + filter = filter.Where(b => b.IsBroken); // 不运行查询 var query = filter .OrderBy(b => b.Wheels) @@ -188582,9 +188582,9 @@ on a new line! ""Wow!"", the masses cried"; .Select(b => b.Name); // 仍然不运行查询 // 现在运行查询,运行查询的时候会打开一个读取器,所以你迭代的是一个副本 - foreach (string bike in query) + foreach (string bike in query) Console.WriteLine(result); - + } @@ -188658,14 +188658,14 @@ on a new line! ""Wow!"", the masses cried"; // 你无需引用对象就可以访问他们。 // Console.WriteLine("Bicycles created: " + Bicycle.bicyclesCreated); static public int BicyclesCreated = 0; - + // 只读值在运行时确定 // 它们只能在声明或构造器内被赋值 readonly bool _hasCardsInSpokes = false; // read-only private // 构造器是创建类的一种方式 // 下面是一个默认的构造器 - public Bicycle() + public Bicycle() { this.Gear = 1; // 你可以使用关键词this访问对象的成员 Cadence = 50; // 不过你并不总是需要它 @@ -188677,13 +188677,13 @@ on a new line! ""Wow!"", the masses cried"; // 另一个构造器的例子(包含参数) public Bicycle(int startCadence, int startSpeed, int startGear, - string name, bool hasCardsInSpokes, BikeBrand brand) + string name, bool hasCardsInSpokes, BikeBrand brand) : base() // 首先调用base { - Gear = startGear; + Gear = startGear; Cadence = startCadence; _speed = startSpeed; - Name = name; + Name = name; _hasCardsInSpokes = hasCardsInSpokes; Brand = brand; } @@ -188720,7 +188720,7 @@ on a new line! ""Wow!"", the masses cried"; get { return _hasTassles; } set { _hasTassles = value; } } - + // 你可以在一行之内定义自动属性 // 这个语法会自动创建后备字段 // 你可以给getter或setter设置访问修饰符 @@ -188966,7 +188966,7 @@ div.some-parent.class-name {} ####################*/ 选择器 { - + /* 单位 */ width: 50%; /* 百分比 */ font-size: 2em; /* 当前字体大小的两倍 */ @@ -188975,7 +188975,7 @@ div.some-parent.class-name {} width: 5cm; /* 厘米 */ width: 50mm; /* 毫米 */ width: 5in; /* 英尺 */ - + /* 颜色 */ background-color: #F6E; /* 短16位 */ background-color: #F262E2; /* 长16位 */ @@ -188983,10 +188983,10 @@ div.some-parent.class-name {} background-color: rgb(255, 255, 255); /* rgb */ background-color: rgb(10%, 20%, 50%); /* rgb 百分比 */ background-color: rgba(255, 0, 0, 0.3); /* rgb 加透明度 */ - + /* 图片 */ background-image: url(/path-to-image/image.jpg); - + /* 字体 */ font-family: Arial; font-family: "Courier New"; /* 使用双引号包裹含空格的字体名称 */ @@ -189153,7 +189153,7 @@ example5() { // classBody 中可以包含实例方法和变量, // 还可以包含类方法和变量。 class Example6Class { - var example6InstanceVariable = "Example6 instance variable"; + var example6InstanceVariable = "Example6 instance variable"; sayIt() { print(example6InstanceVariable); } @@ -189164,7 +189164,7 @@ example6() { // 类方法和变量使用 static 关键词声明。 class Example7Class { - static var example7ClassVariable = "Example7 class variable"; + static var example7ClassVariable = "Example7 class variable"; static sayItFromClass() { print(example7ClassVariable); } @@ -189182,7 +189182,7 @@ example7() { // 字符串和数字默认是常量。 // 但是 array 和 map 不是。他们需要用 "const" 声明为常量。 var example8A = const ["Example8 const array"], - example8M = const {"someKey": "Example8 const map"}; + example8M = const {"someKey": "Example8 const map"}; example8() { print(example8A[0]); print(example8M["someKey"]); @@ -189314,7 +189314,7 @@ example18() { // 用三个单引号或三个双引号表示的字符串 // 可以跨越多行,并且包含行分隔符。 example19() { - print('''Example19 + print('''Example19 Example19 Don't can't I'm Etc Example19 '''); } @@ -189340,7 +189340,7 @@ example20() { class Example21 { List _names; Example21() { - _names = ["a", "b"]; + _names = ["a", "b"]; } List get names => _names; set names(List list) { @@ -189430,7 +189430,7 @@ example25() { // 可以在大括号 {} 中声明命名参数。 // 大括号 {} 中声明的参数的顺序是随意的。 -// 在中括号 [] 中声明的参数也是可选的。 +// 在中括号 [] 中声明的参数也是可选的。 example26() { var _name, _surname, _email; setConfig1({name, surname}) { @@ -189466,7 +189466,7 @@ example27() { // 要导入一个库,使用 import "libraryPath" 的形式,或者如果要导入的是 // 核心库使用 import "dart:libraryName" 。还有一个称为 "pub" 的包管理工具, // 它使用 import "package:packageName" 的约定形式。 -// 看下这个文件顶部的 import "dart:collection"; 语句。 +// 看下这个文件顶部的 import "dart:collection"; 语句。 // 导入语句必需在其它代码声明之前出现。IterableBase 来自于 dart:collection 。 class Example28 extends IterableBase { var names; @@ -189482,7 +189482,7 @@ example28() { // 对于控制流语句,我们有: // * 必需带 break 的标准 switch 语句 -// * if-else 和三元操作符 ..?..:.. +// * if-else 和三元操作符 ..?..:.. // * 闭包和匿名函数 // * break, continue 和 return 语句 example29() { @@ -189637,7 +189637,7 @@ lang: zh-cn ```scheme ;; 15分钟学会Emacs Lisp (v0.2a) -;;(作者:bzg,https://github.com/bzg +;;(作者:bzg,https://github.com/bzg ;; 译者:lichenbo,http://douban.com/people/lichenbo) ;; ;; 请先阅读Peter Norvig的一篇好文: @@ -189652,7 +189652,7 @@ lang: zh-cn ;; ;; 更多信息可以在这里找到: ;; http://www.gnu.org/software/emacs/#Obtaining - + ;; 很重要的警告: ;; ;; 按照这个教程来学习并不会对你的电脑有任何损坏 @@ -189660,7 +189660,7 @@ lang: zh-cn ;; 如果出现了这种情况,我不会承担任何责任 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; +;; ;; 打开emacs ;; ;; 按'q'消除欢迎界面 @@ -189673,138 +189673,138 @@ lang: zh-cn ;; 每当你打开Emacs时,都会默认打开这个scratch buffer ;; 此时你并没有在编辑任何文件,而是在编辑一个buffer ;; 之后你可以将这个buffer保存到一个文件中。 -;; +;; ;; 之后的"Lisp interaction" 则是表明我们可以用的某组命令 -;; +;; ;; Emacs在每个buffer中都有一组内置的命令 ;; 而当你激活某种特定的模式时,就可以使用相应的命令 ;; 这里我们使用`lisp-interaction-mode', ;; 这样我们就可以使用内置的Emacs Lisp(以下简称Elisp)命令了。 - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; 分号是注释开始的标志 ;; ;; Elisp 是由符号表达式构成的 (即"s-表达式"或"s式"): (+ 2 2) - + ;; 这个s式的意思是 "对2进行加2操作". - + ;; s式周围有括号,而且也可以嵌套: (+ 2 (+ 1 1)) - + ;; 一个s式可以包含原子符号或者其他s式 ;; 在上面的例子中,1和2是原子符号 ;; (+ 2 (+ 1 1)) 和 (+ 1 1) 是s式. - + ;; 在 `lisp-interaction-mode' 中你可以计算s式. ;; 把光标移到闭括号后,之后按下ctrl+j(以后简写为'C-j') - + (+ 3 (+ 1 2)) ;; ^ 光标放到这里 ;; 按下`C-j' 就会输出 6 - + ;; `C-j' 会在buffer中插入当前运算的结果 - + ;; 而`C-xC-e' 则会在emacs最底部显示结果,也就是被称作"minibuffer"的区域 ;; 为了避免把我们的buffer填满无用的结果,我们以后会一直用`C-xC-e' - + ;; `setq' 可以将一个值赋给一个变量 (setq my-name "Bastien") ;; `C-xC-e' 输出 "Bastien" (在 mini-buffer 中显示) - + ;; `insert' 会在光标处插入字符串: (insert "Hello!") ;; `C-xC-e' 输出 "Hello!" - + ;; 在这里我们只传给了insert一个参数"Hello!", 但是 ;; 我们也可以传给它更多的参数,比如2个: - + (insert "Hello" " world!") ;; `C-xC-e' 输出 "Hello world!" - + ;; 你也可以用变量名来代替字符串 (insert "Hello, I am " my-name) ;; `C-xC-e' 输出 "Hello, I am Bastien" - + ;; 你可以把s式嵌入函数中 (defun hello () (insert "Hello, I am " my-name)) ;; `C-xC-e' 输出 hello - + ;; 现在执行这个函数 (hello) ;; `C-xC-e' 输出 Hello, I am Bastien - + ;; 函数中空括号的意思是我们不需要接受任何参数 ;; 但是我们不能一直总是用my-name这个变量 -;; 所以我们现在使我们的函数接受一个叫做"name"的参数 - +;; 所以我们现在使我们的函数接受一个叫做"name"的参数 + (defun hello (name) (insert "Hello " name)) ;; `C-xC-e' 输出 hello - + ;; 现在我们调用这个函数,并且将"you"作为参数传递 - + (hello "you") ;; `C-xC-e' 输出 "Hello you" - + ;; 成功! - + ;; 现在我们可以休息一下 - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; 下面我们在新的窗口中新建一个名为 "*test*" 的buffer: - + (switch-to-buffer-other-window "*test*") ;; `C-xC-e' 这时屏幕上会显示两个窗口,而光标此时位于*test* buffer内 - + ;; 用鼠标单击上面的buffer就会使光标移回。 ;; 或者你可以使用 `C-xo' 使得光标跳到另一个窗口中 - + ;; 你可以用 `progn'命令将s式结合起来: (progn (switch-to-buffer-other-window "*test*") (hello "you")) ;; `C-xC-e' 此时屏幕分为两个窗口,并且在*test* buffer中显示"Hello you" - + ;; 现在为了简洁,我们需要在每个s式后面都使用`C-xC-e'来执行,后面就不再说明了 - + ;; 记得可以用过鼠标或者`C-xo'回到*scratch*这个buffer。 - + ;; 清除当前buffer也是常用操作之一: (progn (switch-to-buffer-other-window "*test*") (erase-buffer) (hello "there")) - + ;; 也可以回到其他的窗口中 (progn (switch-to-buffer-other-window "*test*") (erase-buffer) (hello "you") (other-window 1)) - + ;; 你可以用 `let' 将一个值和一个局部变量绑定: (let ((local-name "you")) (switch-to-buffer-other-window "*test*") (erase-buffer) (hello local-name) (other-window 1)) - + ;; 这里我们就不需要使用 `progn' 了, 因为 `let' 也可以将很多s式组合起来。 - + ;; 格式化字符串的方法: (format "Hello %s!\n" "visitor") - + ;; %s 是字符串占位符,这里被"visitor"替代. ;; \n 是换行符。 - + ;; 现在我们用格式化的方法再重写一下我们的函数: (defun hello (name) (insert (format "Hello %s!\n" name))) - + (hello "you") - + ;; 我们再用`let'新建另一个函数: (defun greeting (name) (let ((your-name "Bastien")) @@ -189812,15 +189812,15 @@ lang: zh-cn name ; the argument of the function your-name ; the let-bound variable "Bastien" )))) - + ;; 之后执行: (greeting "you") - + ;; 有些函数可以和用户交互: (read-from-minibuffer "Enter your name: ") - + ;; 这个函数会返回在执行时用户输入的信息 - + ;; 现在我们让`greeting'函数显示你的名字: (defun greeting (from-name) (let ((your-name (read-from-minibuffer "Enter your name: "))) @@ -189828,9 +189828,9 @@ lang: zh-cn from-name ; the argument of the function your-name ; the let-bound var, entered at prompt )))) - + (greeting "Bastien") - + ;; 我们让结果在另一个窗口中显示: (defun greeting (from-name) (let ((your-name (read-from-minibuffer "Enter your name: "))) @@ -189838,75 +189838,75 @@ lang: zh-cn (erase-buffer) (insert (format "Hello %s!\n\nI am %s." your-name from-name)) (other-window 1))) - + ;; 测试一下: (greeting "Bastien") - + ;; 第二节结束,休息一下吧。 - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; 我们将一些名字存到列表中: (setq list-of-names '("Sarah" "Chloe" "Mathilde")) - + ;; 用 `car'来取得第一个名字: (car list-of-names) - + ;; 用 `cdr'取得剩下的名字: (cdr list-of-names) - + ;; 用 `push'把名字添加到列表的开头: (push "Stephanie" list-of-names) - + ;; 注意: `car' 和 `cdr' 并不修改列表本身, 但是 `push' 却会对列表本身进行操作. ;; 这个区别是很重要的: 有些函数没有任何副作用(比如`car') ;; 但还有一些却是有的 (比如 `push'). - + ;; 我们来对`list-of-names'列表中的每一个元素都使用hello函数: (mapcar 'hello list-of-names) - + ;; 将 `greeting' 改进,使的我们能够对`list-of-names'中的所有名字执行: (defun greeting () (switch-to-buffer-other-window "*test*") (erase-buffer) (mapcar 'hello list-of-names) (other-window 1)) - + (greeting) - + ;; 记得我们之前定义的 `hello' 函数吗? 这个函数接受一个参数,名字。 ;; `mapcar' 调用 `hello', 并将`list-of-names'作为参数先后传给`hello' - + ;; 现在我们对显示的buffer中的内容进行一些更改: - + (defun replace-hello-by-bonjour () (switch-to-buffer-other-window "*test*") (goto-char (point-min)) (while (search-forward "Hello") (replace-match "Bonjour")) (other-window 1)) - + ;; (goto-char (point-min)) 将光标移到buffer的开始 ;; (search-forward "Hello") 查找字符串"Hello" ;; (while x y) 当x返回某个值时执行y这个s式 ;; 当x返回`nil' (空), 退出循环 - + (replace-hello-by-bonjour) - + ;; 你会看到所有在*test* buffer中出现的"Hello"字样都被换成了"Bonjour" - + ;; 你也会得到以下错误提示: "Search failed: Hello". ;; ;; 如果要避免这个错误, 你需要告诉 `search-forward' 这个命令是否在 ;; buffer的某个地方停止查找, 并且在什么都没找到时是否应该不给出错误提示 - + ;; (search-forward "Hello" nil t) 可以达到这个要求: - + ;; `nil' 参数的意思是 : 查找并不限于某个范围内 ;; `t' 参数的意思是: 当什么都没找到时,不给出错误提示 - + ;; 在下面的函数中,我们用到了s式,并且不给出任何错误提示: - + (defun hello-to-bonjour () (switch-to-buffer-other-window "*test*") (erase-buffer) @@ -189917,11 +189917,11 @@ lang: zh-cn (while (search-forward "Hello" nil t) (replace-match "Bonjour")) (other-window 1)) - + (hello-to-bonjour) - + ;; 给这些名字加粗: - + (defun boldify-names () (switch-to-buffer-other-window "*test*") (goto-char (point-min)) @@ -189930,25 +189930,25 @@ lang: zh-cn (match-end 1) (list 'face 'bold))) (other-window 1)) - + ;; 这个函数使用了 `re-search-forward': ;; 和查找一个字符串不同,你用这个命令可以查找一个模式,即正则表达式 - + ;; 正则表达式 "Bonjour \\(.+\\)!" 的意思是: ;; 字符串 "Bonjour ", 之后跟着 ;; 一组 | \\( ... \\) 结构 ;; 任意字符 | . 的含义 ;; 有可能重复的 | + 的含义 ;; 之后跟着 "!" 这个字符串 - + ;; 准备好了?试试看。 - + (boldify-names) - + ;; `add-text-properties' 可以添加文字属性, 比如文字样式 - + ;; 好的,我们成功了! - + ;; 如果你想对一个变量或者函数有更多的了解: ;; ;; C-h v 变量 回车 @@ -189960,7 +189960,7 @@ lang: zh-cn ;; ;; 在线阅读Emacs Lisp文档: ;; https://www.gnu.org/software/emacs/manual/html_node/eintr/index.html - + ;; 感谢以下同学的建议和反馈: ;; - Wes Hardaker ;; - notbob @@ -189980,7 +189980,7 @@ filename: learnelixir-cn.ex lang: zh-cn --- -Elixir 是一门构建在Erlang VM 之上的函数式编程语言。Elixir 完全兼容 Erlang, +Elixir 是一门构建在Erlang VM 之上的函数式编程语言。Elixir 完全兼容 Erlang, 另外还提供了更标准的语法,特性。 ```elixir @@ -190021,11 +190021,11 @@ elem({1, 2, 3}, 0) #=> 1 head #=> 1 tail #=> [2,3] -# 在elixir,就像在Erlang, `=` 表示模式匹配 (pattern matching) +# 在elixir,就像在Erlang, `=` 表示模式匹配 (pattern matching) # 不是赋值。 # # 这表示会用左边的模式(pattern)匹配右侧 -# +# # 上面的例子中访问列表的头部和尾部就是这样工作的。 # 当左右两边不匹配时,会返回error, 在这个 @@ -190053,7 +190053,7 @@ string. <> #=> "abc" [?a, ?b, ?c] #=> 'abc' -# 在 elixir中,`?a`返回 `a` 的 ASCII 整型值 +# 在 elixir中,`?a`返回 `a` 的 ASCII 整型值 ?a #=> 97 # 合并列表使用 `++`, 对于二进制类型则使用 `<>` @@ -190143,7 +190143,7 @@ case {:one, :two} do "This will match any value" end -# 模式匹配时,如果不需要某个值,通用的做法是把值 匹配到 `_` +# 模式匹配时,如果不需要某个值,通用的做法是把值 匹配到 `_` # 例如,我们只需要要列表的头元素: [head | _] = [1,2,3] head #=> 1 @@ -190175,7 +190175,7 @@ end # `try/catch` 用于捕获被抛出的值, 它也支持 `after` 子句, # 无论是否值被捕获,after 子句都会被调用 -# `try/catch` +# `try/catch` try do throw(:hello) catch @@ -190359,7 +190359,7 @@ pid <- {:circle, 2} #=> Area = 12.56000000000000049738 # {:circle,2} -# shell也是一个进程(process), 你可以使用`self`获取当前 pid +# shell也是一个进程(process), 你可以使用`self`获取当前 pid self() #=> #PID<0.27.0> ``` @@ -190638,7 +190638,7 @@ translators: lang: zh-cn --- -Git是一个分布式版本控制及源代码管理工具 +Git是一个分布式版本控制及源代码管理工具 Git可以为你的项目保存若干快照,以此来对整个项目进行版本管理 @@ -190873,7 +190873,7 @@ $ git config --global alias.g "grep --break --heading --line-number" $ git grep 'variableName' -- '*.java' # 搜索包含 "arrayListName" 和, "add" 或 "remove" 的所有行 -$ git grep -e 'arrayListName' --and \( -e add -e remove \) +$ git grep -e 'arrayListName' --and \( -e add -e remove \) ``` 更多的例子可以查看: @@ -190943,7 +190943,7 @@ $ git pull origin master $ git push origin master ``` -### rebase (谨慎使用) +### rebase (谨慎使用) 将一个分支上所有的提交历史都应用到另一个分支上 *不要在一个已经公开的远端分支上使用rebase*. @@ -191831,7 +191831,7 @@ assert sum(2,5) == 7 --- -language: Haskell +language: Haskell filename: learn-haskell-zh.hs contributors: - ["Adit Bhargava", "http://adit.io"] @@ -192137,7 +192137,7 @@ Nothing -- 对任意 `a` 为 `Maybe a` 类型 -- 当执行一个 Haskell 程序时,函数 `main` 就被调用。 -- 它必须返回一个类型 `IO ()` 的值。例如: main :: IO () -main = putStrLn $ "Hello, sky! " ++ (say Blue) +main = putStrLn $ "Hello, sky! " ++ (say Blue) -- putStrLn 的类型是 String -> IO () -- 如果你的程序输入 String 返回 String,那样编写 IO 是最简单的。 @@ -192154,13 +192154,13 @@ main' = interact countLines -- 我们可以使用 `do` 声明来把动作连接到一起。 -- 举个列子 sayHello :: IO () -sayHello = do +sayHello = do putStrLn "What is your name?" name <- getLine -- 这里接受一行输入并绑定至 "name" putStrLn $ "Hello, " ++ name - + -- 练习:编写只读取一行输入的 `interact` - + -- 然而,`sayHello` 中的代码将不会被执行。唯一被执行的动作是 `main` 的值。 -- 为了运行 `sayHello`,注释上面 `main` 的定义,替换为: -- main = sayHello @@ -192174,7 +192174,7 @@ sayHello = do action :: IO String action = do putStrLn "This is a line. Duh" - input1 <- getLine + input1 <- getLine input2 <- getLine -- `do` 语句的类型是它的最后一行 -- `return` 不是关键字,只是一个普通函数 @@ -192183,7 +192183,7 @@ action = do -- 我们可以像调用 `getLine` 一样调用它 main'' = do putStrLn "I will echo two lines!" - result <- action + result <- action putStrLn result putStrLn "This was all, folks!" @@ -192256,7 +192256,7 @@ HTML是超文本标记语言的缩写。 - + @@ -192847,7 +192847,7 @@ false; 1 !== 1; // = false 2 !== 1; // = true -// 更多的比较操作符 +// 更多的比较操作符 1 < 10; // = true 1 > 10; // = false 2 <= 2; // = true @@ -192865,7 +192865,7 @@ null == undefined; // = true // ...除非你是用 === "5" === 5; // = false -null === undefined; // = false +null === undefined; // = false // ...但会导致奇怪的行为 13 + !0; // 14 @@ -192891,7 +192891,7 @@ undefined; // 用来表示还没有设置的值(尽管`undefined`自身实际是 // 2. 变量、数组和对象 // 变量需要用`var`关键字声明。Javascript是动态类型语言, -// 所以你无需指定类型。 赋值需要用 `=` +// 所以你无需指定类型。 赋值需要用 `=` var someVar = 5; // 如果你在声明时没有加var关键字,你也不会得到错误... @@ -192903,7 +192903,7 @@ someOtherVar = 10; var someThirdVar; // = undefined // 对变量进行数学运算有一些简写法: -someVar += 5; // 等价于 someVar = someVar + 5; someVar 现在是 10 +someVar += 5; // 等价于 someVar = someVar + 5; someVar 现在是 10 someVar *= 10; // 现在 someVar 是 100 // 自增和自减也有简写 @@ -192955,7 +192955,7 @@ if (count == 3){ } else if (count == 4){ // count 是 4 时执行 } else { - // 其他情况下执行 + // 其他情况下执行 } // while循环 @@ -192983,12 +192983,12 @@ if (colour == "red" || colour == "blue"){ // colour是red或者blue时执行 } -// && 和 || 是“短路”语句,它在设定初始化值时特别有用 +// && 和 || 是“短路”语句,它在设定初始化值时特别有用 var name = otherName || "default"; // `switch`语句使用`===`检查相等性。 // 在每一个case结束时使用 'break' -// 否则其后的case语句也将被执行。 +// 否则其后的case语句也将被执行。 grade = 'B'; switch (grade) { case 'A': @@ -193050,7 +193050,7 @@ i; // = 5 - 并非我们在其他语言中所期望得到的undefined (function(){ var temporary = 5; // 我们可以访问修改全局对象("global object")来访问全局作用域, - // 在web浏览器中是`window`这个对象。 + // 在web浏览器中是`window`这个对象。 // 在其他环境如Node.js中这个对象的名字可能会不同。 window.permanent = 10; })(); @@ -194567,7 +194567,7 @@ Svetlana Golubeva} % 现在我们开始正文 % 这一行之前都是“序章” -\begin{document} +\begin{document} % 如果想设定作者,时间,标题字段我们可使用 LaTeX 来建立标题页 \maketitle @@ -194605,15 +194605,15 @@ Much better now. % 使用型号我们可以借助 LaTeX 内置的编号功能 % 这一技巧也在其他指令中有效 -\section*{This is an unnumbered section} +\section*{This is an unnumbered section} 然而并不是所有章节都要被标序号 \section{Some Text notes} %\section{Spacing} % 需要增加有关空白间隔的信息 \LaTeX \hspace{1pt} is generally pretty good about placing text where it should -go. If -a line \\ needs \\ to \\ break \\ you add \textbackslash\textbackslash -\hspace{1pt} to the source code. \\ +go. If +a line \\ needs \\ to \\ break \\ you add \textbackslash\textbackslash +\hspace{1pt} to the source code. \\ \section{Lists} Lists are one of the easiest things to create in \LaTeX! I need to go shopping @@ -194633,7 +194633,7 @@ tomorrow, so let's make a grocery list. \section{Math} 使用 \LaTeX \hspace{1pt} 的一个最主要的方面是学术论文和技术文章 -通常在数学和科学的领域 +通常在数学和科学的领域 因此我们需要在文章中插入特殊符号! \\ 数学符号极多,远超出你能在键盘上找到的那些; @@ -194653,11 +194653,11 @@ My favorite Greek letter is $\xi$. I also like $\beta$, $\gamma$ and $\sigma$. I haven't found a Greek letter yet that \LaTeX \hspace{1pt} doesn't know about! \\ -常用函数操作符同样很重要: -trigonometric functions ($\sin$, $\cos$, $\tan$), -logarithms 和 exponentials ($\log$, $\exp$), -limits ($\lim$), etc. -在 LaTeX 指令中预定义 +常用函数操作符同样很重要: +trigonometric functions ($\sin$, $\cos$, $\tan$), +logarithms 和 exponentials ($\log$, $\exp$), +limits ($\lim$), etc. +在 LaTeX 指令中预定义 让我们写一个等式看看发生了什么: $\cos(2\theta) = \cos^{2}(\theta) - \sin^{2}(\theta)$ \\ @@ -194680,19 +194680,19 @@ $$ \frac{n!}{k!(n - k)!} $$ \\ 引用我们的新等式! Eqn.~\ref{eq:pythagoras} is also known as the Pythagoras Theorem which is also -the subject of Sec.~\ref{subsec:pythagoras}. A lot of things can be labeled: +the subject of Sec.~\ref{subsec:pythagoras}. A lot of things can be labeled: figures, equations, sections, etc. 求和(Summations)与整合(Integrals)写作 sum 和 int : % 一些编译器会提醒在等式环境中的空行 -\begin{equation} +\begin{equation} \sum_{i=0}^{5} f_{i} -\end{equation} -\begin{equation} +\end{equation} +\begin{equation} \int_{0}^{\infty} \mathrm{e}^{-x} \mathrm{d}x -\end{equation} +\end{equation} \section{Figures} @@ -194702,7 +194702,7 @@ figures, equations, sections, etc. \begin{figure}[H] % H 是放置选项的符号 \centering % 图片在本页居中 % 宽度放缩为页面的0.8倍 - %\includegraphics[width=0.8\linewidth]{right-triangle.png} + %\includegraphics[width=0.8\linewidth]{right-triangle.png} % 需要使用想象力决定是否语句超出编译预期 \caption{Right triangle with sides $a$, $b$, $c$} \label{fig:right-triangle} @@ -194715,7 +194715,7 @@ figures, equations, sections, etc. \caption{Caption for the Table.} % 下方的 {} 描述了表格中每一行的绘制方式 % 同样,我在每次使用时都会查找可用选项。 - \begin{tabular}{c|cc} + \begin{tabular}{c|cc} Number & Last Name & First Name \\ % 每一列被 & 分开 \hline % 水平线 1 & Biggus & Dickus \\ @@ -194726,17 +194726,17 @@ figures, equations, sections, etc. \section{Getting \LaTeX \hspace{1pt} to not compile something (i.e. Source Code)} 现在增加一些源代码在 \LaTeX \hspace{1pt} 文档中, 我们之后需要 \LaTeX \hspace{1pt} 不翻译这些内容而仅仅是把他们打印出来 -这里使用 verbatim environment。 +这里使用 verbatim environment。 % 也有其他库存在 (如. minty, lstlisting, 等) % 但是 verbatim 是最基础和简单的一个 -\begin{verbatim} +\begin{verbatim} print("Hello World!") a%b; % 在这一环境下我们可以使用 % random = 4; #decided by fair random dice roll \end{verbatim} -\section{Compiling} +\section{Compiling} 现在你大概想了解如何编译这个美妙的文档 然后得到饱受称赞的 \LaTeX \hspace{1pt} pdf文档 @@ -194744,9 +194744,9 @@ figures, equations, sections, etc. 得到最终文档,使用 \LaTeX \hspace{1pt} 组合步骤: \begin{enumerate} \item Write the document in plain text (the ``source code''). - \item Compile source code to produce a pdf. + \item Compile source code to produce a pdf. The compilation step looks like this (in Linux): \\ - \begin{verbatim} + \begin{verbatim} > pdflatex learn-latex.tex \end{verbatim} \end{enumerate} @@ -194764,12 +194764,12 @@ figures, equations, sections, etc. \section{Hyperlinks} 同样可以在文档中加入超链接 使用如下命令在序言中引入库: -\begin{verbatim} +\begin{verbatim} \usepackage{hyperref} \end{verbatim} 有两种主要的超链接方式 \\ -\url{https://learnxinyminutes.com/docs/latex/}, 或 +\url{https://learnxinyminutes.com/docs/latex/}, 或 \href{https://learnxinyminutes.com/docs/latex/}{shadowed by text} % 你不可以增加特殊空格和符号,因为这将会造成编译错误 @@ -194785,7 +194785,7 @@ figures, equations, sections, etc. \begin{thebibliography}{1} % 与其他列表相同, \bibitem 命令被用来列出条目 % 每个记录可以直接被文章主体引用 - \bibitem{latexwiki} The amazing \LaTeX \hspace{1pt} wikibook: {\em + \bibitem{latexwiki} The amazing \LaTeX \hspace{1pt} wikibook: {\em https://en.wikibooks.org/wiki/LaTeX} \bibitem{latextutorial} An actual tutorial: {\em http://www.latex-tutorial.com} \end{thebibliography} @@ -195192,11 +195192,11 @@ contributors: - ["Christina Whyte", "http://github.com/kurisuwhyte/"] translators: - ["ShengDa Lyu", "http://github.com/SDLyu/"] -lang: zh-cn +lang: zh-cn --- LiveScript 是一种具有函数式特性且编译成 JavaScript 的语言,能对应 JavaScript 的基本语法。 -还有些额外的特性如:柯里化,组合函数,模式匹配,还有借镜于 Haskell,F# 和 Scala 的许多特点。 +还有些额外的特性如:柯里化,组合函数,模式匹配,还有借镜于 Haskell,F# 和 Scala 的许多特点。 LiveScript 诞生于 [Coco][],而 Coco 诞生于 [CoffeeScript][]。 LiveScript 目前已释出稳定版本,开发中的新版本将会加入更多特性。 @@ -195346,7 +195346,7 @@ not false # => true ######################################################################## ## 3. 函数 -######################################################################## +######################################################################## # 因为 LiveScript 是函数式特性的语言,你可以期待函数在语言里被高规格的对待。 add = (left, right) -> left + right @@ -195458,7 +195458,7 @@ take = (n, [x, ...xs]) --> ######################################################################## # 在 JavaScript 的标准函式库里有一些辅助函数能帮助处理列表及对象 -#(LiveScript 则带有一个 prelude.ls ,作为标准函式库的补充 ), +#(LiveScript 则带有一个 prelude.ls ,作为标准函式库的补充 ), # 推导式能让你使用优雅的语法且快速地处理这些事: oneToTwenty = [1 to 20] evens = [x for x in oneToTwenty when x % 2 == 0] @@ -195500,17 +195500,17 @@ kitten.hug! # => "*Mei (a cat) is hugged*" ## 延伸阅读 -LiveScript 还有许多强大之处,但这些应该足够启发你写些小型函数式程式了。 +LiveScript 还有许多强大之处,但这些应该足够启发你写些小型函数式程式了。 [LiveScript](http://livescript.net/)有更多关于 LiveScript 的资讯 和线上编译器等着你来试! 你也可以参考 -[prelude.ls](http://gkz.github.io/prelude-ls/),和一些 `#livescript` +[prelude.ls](http://gkz.github.io/prelude-ls/),和一些 `#livescript` 的网络聊天室频道。 --- language: Lua lang: zh-cn -contributors: +contributors: - ["Tyler Neylon", "http://tylerneylon.com/"] - ["Rob Hoelz", "http://hoelz.ro"] - ["Jakukyo Friel", "http://weakish.github.io"] @@ -195522,388 +195522,388 @@ filename: lua-cn.lua --- ```lua --- 单行注释以两个连字符开头 +-- 单行注释以两个连字符开头 ---[[ +--[[ 多行注释 --]] ----------------------------------------------------- +---------------------------------------------------- -- 1. 变量和流程控制 ----------------------------------------------------- +---------------------------------------------------- num = 42 -- 所有的数字都是双精度浮点型。 --- 别害怕,64位的双精度浮点型数字中有52位用于 --- 保存精确的整型值; 对于52位以内的整型值, +-- 别害怕,64位的双精度浮点型数字中有52位用于 +-- 保存精确的整型值; 对于52位以内的整型值, -- 不用担心精度问题。 -s = 'walternate' -- 和Python一样,字符串不可变。 -t = "也可以用双引号" +s = 'walternate' -- 和Python一样,字符串不可变。 +t = "也可以用双引号" u = [[ 多行的字符串 以两个方括号 - 开始和结尾。]] -t = nil -- 撤销t的定义; Lua 支持垃圾回收。 - --- 块使用do/end之类的关键字标识: -while num < 50 do - num = num + 1 -- 不支持 ++ 或 += 运算符。 -end - --- If语句: -if num > 40 then - print('over 40') -elseif s ~= 'walternate' then -- ~= 表示不等于。 - -- 像Python一样,用 == 检查是否相等 ;字符串同样适用。 + 开始和结尾。]] +t = nil -- 撤销t的定义; Lua 支持垃圾回收。 + +-- 块使用do/end之类的关键字标识: +while num < 50 do + num = num + 1 -- 不支持 ++ 或 += 运算符。 +end + +-- If语句: +if num > 40 then + print('over 40') +elseif s ~= 'walternate' then -- ~= 表示不等于。 + -- 像Python一样,用 == 检查是否相等 ;字符串同样适用。 io.write('not over 40\n') -- 默认标准输出。 -else - -- 默认全局变量。 +else + -- 默认全局变量。 thisIsGlobal = 5 -- 通常使用驼峰。 - -- 如何定义局部变量: - local line = io.read() -- 读取标准输入的下一行。 + -- 如何定义局部变量: + local line = io.read() -- 读取标准输入的下一行。 - -- ..操作符用于连接字符串: - print('Winter is coming, ' .. line) -end + -- ..操作符用于连接字符串: + print('Winter is coming, ' .. line) +end --- 未定义的变量返回nil。 --- 这不是错误: -foo = anUnknownVariable -- 现在 foo = nil. +-- 未定义的变量返回nil。 +-- 这不是错误: +foo = anUnknownVariable -- 现在 foo = nil. -aBoolValue = false +aBoolValue = false ---只有nil和false为假; 0和 ''均为真! -if not aBoolValue then print('false') end +--只有nil和false为假; 0和 ''均为真! +if not aBoolValue then print('false') end --- 'or'和 'and'短路 --- 类似于C/js里的 a?b:c 操作符: -ans = aBoolValue and 'yes' or 'no' --> 'no' +-- 'or'和 'and'短路 +-- 类似于C/js里的 a?b:c 操作符: +ans = aBoolValue and 'yes' or 'no' --> 'no' -karlSum = 0 -for i = 1, 100 do -- 范围包含两端 - karlSum = karlSum + i -end +karlSum = 0 +for i = 1, 100 do -- 范围包含两端 + karlSum = karlSum + i +end --- 使用 "100, 1, -1" 表示递减的范围: -fredSum = 0 -for j = 100, 1, -1 do fredSum = fredSum + j end +-- 使用 "100, 1, -1" 表示递减的范围: +fredSum = 0 +for j = 100, 1, -1 do fredSum = fredSum + j end --- 通常,范围表达式为begin, end[, step]. +-- 通常,范围表达式为begin, end[, step]. --- 循环的另一种结构: -repeat - print('the way of the future') - num = num - 1 -until num == 0 +-- 循环的另一种结构: +repeat + print('the way of the future') + num = num - 1 +until num == 0 ----------------------------------------------------- --- 2. 函数。 ----------------------------------------------------- +---------------------------------------------------- +-- 2. 函数。 +---------------------------------------------------- function fib(n) if n < 2 then return n end return fib(n - 2) + fib(n - 1) end --- 支持闭包及匿名函数: -function adder(x) +-- 支持闭包及匿名函数: +function adder(x) -- 调用adder时,会创建返回的函数, - -- 并且会记住x的值: - return function (y) return x + y end -end -a1 = adder(9) -a2 = adder(36) -print(a1(16)) --> 25 -print(a2(64)) --> 100 + -- 并且会记住x的值: + return function (y) return x + y end +end +a1 = adder(9) +a2 = adder(36) +print(a1(16)) --> 25 +print(a2(64)) --> 100 -- 返回值、函数调用和赋值都可以 --- 使用长度不匹配的list。 --- 不匹配的接收方会被赋值nil; --- 不匹配的发送方会被丢弃。 +-- 使用长度不匹配的list。 +-- 不匹配的接收方会被赋值nil; +-- 不匹配的发送方会被丢弃。 -x, y, z = 1, 2, 3, 4 --- x = 1、y = 2、z = 3, 而 4 会被丢弃。 +x, y, z = 1, 2, 3, 4 +-- x = 1、y = 2、z = 3, 而 4 会被丢弃。 -function bar(a, b, c) - print(a, b, c) - return 4, 8, 15, 16, 23, 42 -end +function bar(a, b, c) + print(a, b, c) + return 4, 8, 15, 16, 23, 42 +end -x, y = bar('zaphod') --> 打印 "zaphod nil nil" --- 现在 x = 4, y = 8, 而值15..42被丢弃。 +x, y = bar('zaphod') --> 打印 "zaphod nil nil" +-- 现在 x = 4, y = 8, 而值15..42被丢弃。 --- 函数是一等公民,可以是局部的,也可以是全局的。 --- 以下表达式等价: -function f(x) return x * x end -f = function (x) return x * x end +-- 函数是一等公民,可以是局部的,也可以是全局的。 +-- 以下表达式等价: +function f(x) return x * x end +f = function (x) return x * x end --- 这些也是等价的: +-- 这些也是等价的: local function g(x) return math.sin(x) end local g; g = function (x) return math.sin(x) end -- 以上均因'local g',使得g可以自引用。 local g = function(x) return math.sin(x) end -- 等价于 local function g(x)..., 但函数体中g不可自引用 --- 顺便提下,三角函数以弧度为单位。 +-- 顺便提下,三角函数以弧度为单位。 --- 用一个字符串参数调用函数,可以省略括号: -print 'hello' --可以工作。 +-- 用一个字符串参数调用函数,可以省略括号: +print 'hello' --可以工作。 -- 调用函数时,如果只有一个table参数, -- 同样可以省略括号(table详情见下): print {} -- 一样可以工作。 ----------------------------------------------------- --- 3. Table。 ----------------------------------------------------- +---------------------------------------------------- +-- 3. Table。 +---------------------------------------------------- --- Table = Lua唯一的组合数据结构; --- 它们是关联数组。 --- 类似于PHP的数组或者js的对象, --- 它们是哈希表或者字典,也可以当列表使用。 +-- Table = Lua唯一的组合数据结构; +-- 它们是关联数组。 +-- 类似于PHP的数组或者js的对象, +-- 它们是哈希表或者字典,也可以当列表使用。 --- 按字典/map的方式使用Table: +-- 按字典/map的方式使用Table: --- Dict字面量默认使用字符串类型的key: -t = {key1 = 'value1', key2 = false} +-- Dict字面量默认使用字符串类型的key: +t = {key1 = 'value1', key2 = false} --- 字符串key可以使用类似js的点标记: -print(t.key1) -- 打印 'value1'. -t.newKey = {} -- 添加新的键值对。 -t.key2 = nil -- 从table删除 key2。 +-- 字符串key可以使用类似js的点标记: +print(t.key1) -- 打印 'value1'. +t.newKey = {} -- 添加新的键值对。 +t.key2 = nil -- 从table删除 key2。 --- 使用任何非nil的值作为key: -u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'} -print(u[6.28]) -- 打印 "tau" +-- 使用任何非nil的值作为key: +u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'} +print(u[6.28]) -- 打印 "tau" -- 数字和字符串的key按值匹配的 --- table按id匹配。 -a = u['@!#'] -- 现在 a = 'qbert'. -b = u[{}] -- 我们或许期待的是 1729, 但是得到的是nil: --- b = nil ,因为没有找到。 +-- table按id匹配。 +a = u['@!#'] -- 现在 a = 'qbert'. +b = u[{}] -- 我们或许期待的是 1729, 但是得到的是nil: +-- b = nil ,因为没有找到。 -- 之所以没找到,是因为我们用的key与保存数据时用的不是同 --- 一个对象。 --- 所以字符串和数字是移植性更好的key。 +-- 一个对象。 +-- 所以字符串和数字是移植性更好的key。 --- 只需要一个table参数的函数调用不需要括号: -function h(x) print(x.key1) end -h{key1 = 'Sonmi~451'} -- 打印'Sonmi~451'. +-- 只需要一个table参数的函数调用不需要括号: +function h(x) print(x.key1) end +h{key1 = 'Sonmi~451'} -- 打印'Sonmi~451'. for key, val in pairs(u) do -- 遍历Table - print(key, val) -end + print(key, val) +end --- _G 是一个特殊的table,用于保存所有的全局变量 -print(_G['_G'] == _G) -- 打印'true'. +-- _G 是一个特殊的table,用于保存所有的全局变量 +print(_G['_G'] == _G) -- 打印'true'. --- 按列表/数组的方式使用: +-- 按列表/数组的方式使用: --- 列表字面量隐式添加整数键: -v = {'value1', 'value2', 1.21, 'gigawatts'} +-- 列表字面量隐式添加整数键: +v = {'value1', 'value2', 1.21, 'gigawatts'} for i = 1, #v do -- #v 是列表的大小 - print(v[i]) -- 索引从 1 开始!! 太疯狂了! + print(v[i]) -- 索引从 1 开始!! 太疯狂了! end --- 'list'并非真正的类型,v 其实是一个table, --- 只不过它用连续的整数作为key,可以像list那样去使用。 +-- 'list'并非真正的类型,v 其实是一个table, +-- 只不过它用连续的整数作为key,可以像list那样去使用。 ----------------------------------------------------- --- 3.1 元表(metatable) 和元方法(metamethod)。 ----------------------------------------------------- +---------------------------------------------------- +-- 3.1 元表(metatable) 和元方法(metamethod)。 +---------------------------------------------------- -- table的元表提供了一种机制,支持类似操作符重载的行为。 --- 稍后我们会看到元表如何支持类似js prototype的行为。 +-- 稍后我们会看到元表如何支持类似js prototype的行为。 -f1 = {a = 1, b = 2} -- 表示一个分数 a/b. -f2 = {a = 2, b = 3} +f1 = {a = 1, b = 2} -- 表示一个分数 a/b. +f2 = {a = 2, b = 3} -- 这会失败: --- s = f1 + f2 +-- s = f1 + f2 -metafraction = {} -function metafraction.__add(f1, f2) - local sum = {} - sum.b = f1.b * f2.b - sum.a = f1.a * f2.b + f2.a * f1.b +metafraction = {} +function metafraction.__add(f1, f2) + local sum = {} + sum.b = f1.b * f2.b + sum.a = f1.a * f2.b + f2.a * f1.b return sum end -setmetatable(f1, metafraction) -setmetatable(f2, metafraction) +setmetatable(f1, metafraction) +setmetatable(f2, metafraction) -s = f1 + f2 -- 调用在f1的元表上的__add(f1, f2) 方法 +s = f1 + f2 -- 调用在f1的元表上的__add(f1, f2) 方法 --- f1, f2 没有关于元表的key,这点和js的prototype不一样。 +-- f1, f2 没有关于元表的key,这点和js的prototype不一样。 -- 因此你必须用getmetatable(f1)获取元表。 --- 元表是一个普通的table, --- 元表的key是普通的Lua中的key,例如__add。 +-- 元表是一个普通的table, +-- 元表的key是普通的Lua中的key,例如__add。 --- 但是下面一行代码会失败,因为s没有元表: --- t = s + s --- 下面提供的与类相似的模式可以解决这个问题: +-- 但是下面一行代码会失败,因为s没有元表: +-- t = s + s +-- 下面提供的与类相似的模式可以解决这个问题: --- 元表的__index 可以重载用于查找的点操作符: -defaultFavs = {animal = 'gru', food = 'donuts'} -myFavs = {food = 'pizza'} -setmetatable(myFavs, {__index = defaultFavs}) -eatenBy = myFavs.animal -- 可以工作!感谢元表 +-- 元表的__index 可以重载用于查找的点操作符: +defaultFavs = {animal = 'gru', food = 'donuts'} +myFavs = {food = 'pizza'} +setmetatable(myFavs, {__index = defaultFavs}) +eatenBy = myFavs.animal -- 可以工作!感谢元表 -- 如果在table中直接查找key失败,会使用 -- 元表的__index 递归地重试。 -- __index的值也可以是function(tbl, key) --- 这样可以支持自定义查找。 - --- __index、__add等的值,被称为元方法。 --- 这里是一个table元方法的清单: - --- __add(a, b) for a + b --- __sub(a, b) for a - b --- __mul(a, b) for a * b --- __div(a, b) for a / b --- __mod(a, b) for a % b --- __pow(a, b) for a ^ b --- __unm(a) for -a --- __concat(a, b) for a .. b --- __len(a) for #a --- __eq(a, b) for a == b --- __lt(a, b) for a < b --- __le(a, b) for a <= b --- __index(a, b) for a.b --- __newindex(a, b, c) for a.b = c --- __call(a, ...) for a(...) - ----------------------------------------------------- --- 3.2 与类相似的table和继承。 ----------------------------------------------------- +-- 这样可以支持自定义查找。 + +-- __index、__add等的值,被称为元方法。 +-- 这里是一个table元方法的清单: + +-- __add(a, b) for a + b +-- __sub(a, b) for a - b +-- __mul(a, b) for a * b +-- __div(a, b) for a / b +-- __mod(a, b) for a % b +-- __pow(a, b) for a ^ b +-- __unm(a) for -a +-- __concat(a, b) for a .. b +-- __len(a) for #a +-- __eq(a, b) for a == b +-- __lt(a, b) for a < b +-- __le(a, b) for a <= b +-- __index(a, b) for a.b +-- __newindex(a, b, c) for a.b = c +-- __call(a, ...) for a(...) + +---------------------------------------------------- +-- 3.2 与类相似的table和继承。 +---------------------------------------------------- -- Lua没有内建的类;可以通过不同的方法,利用表和元表 --- 来实现类。 +-- 来实现类。 --- 下面是一个例子,解释在后面: +-- 下面是一个例子,解释在后面: -Dog = {} -- 1. +Dog = {} -- 1. -function Dog:new() -- 2. - local newObj = {sound = 'woof'} -- 3. - self.__index = self -- 4. - return setmetatable(newObj, self) -- 5. -end +function Dog:new() -- 2. + local newObj = {sound = 'woof'} -- 3. + self.__index = self -- 4. + return setmetatable(newObj, self) -- 5. +end -function Dog:makeSound() -- 6. - print('I say ' .. self.sound) -end +function Dog:makeSound() -- 6. + print('I say ' .. self.sound) +end -mrDog = Dog:new() -- 7. -mrDog:makeSound() -- 'I say woof' -- 8. +mrDog = Dog:new() -- 7. +mrDog:makeSound() -- 'I say woof' -- 8. --- 1. Dog看上去像一个类;其实它是一个table。 +-- 1. Dog看上去像一个类;其实它是一个table。 -- 2. 函数tablename:fn(...) 等价于 -- 函数tablename.fn(self, ...) --- 冒号(:)只是添加了self作为第一个参数。 --- 阅读7 & 8条 了解self变量是如何得到其值的。 --- 3. newObj是类Dog的一个实例。 --- 4. self = 被继承的类。通常self = Dog,不过继承可以改变它。 --- 如果把newObj的元表和__index都设置为self, --- newObj就可以得到self的函数。 --- 5. 备忘:setmetatable返回其第一个参数。 --- 6. 冒号(:)的作用和第2条一样,不过这里 --- self是一个实例,而不是类 --- 7. 等价于Dog.new(Dog),所以在new()中,self = Dog。 --- 8. 等价于mrDog.makeSound(mrDog); self = mrDog。 - ----------------------------------------------------- - --- 继承的例子: - -LoudDog = Dog:new() -- 1. - -function LoudDog:makeSound() - local s = self.sound .. ' ' -- 2. - print(s .. s .. s) -end - -seymour = LoudDog:new() -- 3. -seymour:makeSound() -- 'woof woof woof' -- 4. - --- 1. LoudDog获得Dog的方法和变量列表。 --- 2. 因为new()的缘故,self拥有了一个'sound' key,参见第3条。 --- 3. 等价于LoudDog.new(LoudDog),转换一下就是 --- Dog.new(LoudDog),这是因为LoudDog没有'new' key, --- 但是它的元表中有 __index = Dog。 --- 结果: seymour的元表是LoudDog,并且 --- LoudDog.__index = Dog。所以有seymour.key --- = seymour.key, LoudDog.key, Dog.key --- 从其中第一个有指定key的table获取。 --- 4. 在LoudDog可以找到'makeSound'的key; --- 等价于LoudDog.makeSound(seymour)。 - --- 如果有必要,子类也可以有new(),与基类相似: -function LoudDog:new() - local newObj = {} - -- 初始化newObj - self.__index = self - return setmetatable(newObj, self) -end - ----------------------------------------------------- --- 4. 模块 ----------------------------------------------------- - - ---[[ 我把这部分给注释了,这样脚本剩下的部分可以运行 +-- 冒号(:)只是添加了self作为第一个参数。 +-- 阅读7 & 8条 了解self变量是如何得到其值的。 +-- 3. newObj是类Dog的一个实例。 +-- 4. self = 被继承的类。通常self = Dog,不过继承可以改变它。 +-- 如果把newObj的元表和__index都设置为self, +-- newObj就可以得到self的函数。 +-- 5. 备忘:setmetatable返回其第一个参数。 +-- 6. 冒号(:)的作用和第2条一样,不过这里 +-- self是一个实例,而不是类 +-- 7. 等价于Dog.new(Dog),所以在new()中,self = Dog。 +-- 8. 等价于mrDog.makeSound(mrDog); self = mrDog。 + +---------------------------------------------------- + +-- 继承的例子: + +LoudDog = Dog:new() -- 1. + +function LoudDog:makeSound() + local s = self.sound .. ' ' -- 2. + print(s .. s .. s) +end + +seymour = LoudDog:new() -- 3. +seymour:makeSound() -- 'woof woof woof' -- 4. + +-- 1. LoudDog获得Dog的方法和变量列表。 +-- 2. 因为new()的缘故,self拥有了一个'sound' key,参见第3条。 +-- 3. 等价于LoudDog.new(LoudDog),转换一下就是 +-- Dog.new(LoudDog),这是因为LoudDog没有'new' key, +-- 但是它的元表中有 __index = Dog。 +-- 结果: seymour的元表是LoudDog,并且 +-- LoudDog.__index = Dog。所以有seymour.key +-- = seymour.key, LoudDog.key, Dog.key +-- 从其中第一个有指定key的table获取。 +-- 4. 在LoudDog可以找到'makeSound'的key; +-- 等价于LoudDog.makeSound(seymour)。 + +-- 如果有必要,子类也可以有new(),与基类相似: +function LoudDog:new() + local newObj = {} + -- 初始化newObj + self.__index = self + return setmetatable(newObj, self) +end + +---------------------------------------------------- +-- 4. 模块 +---------------------------------------------------- + + +--[[ 我把这部分给注释了,这样脚本剩下的部分可以运行 ``` ```lua --- 假设文件mod.lua的内容类似这样: -local M = {} +-- 假设文件mod.lua的内容类似这样: +local M = {} -local function sayMyName() - print('Hrunkner') -end +local function sayMyName() + print('Hrunkner') +end -function M.sayHello() - print('Why hello there') - sayMyName() -end +function M.sayHello() + print('Why hello there') + sayMyName() +end -return M +return M --- 另一个文件可以使用mod.lua的功能: -local mod = require('mod') -- 运行文件mod.lua. +-- 另一个文件可以使用mod.lua的功能: +local mod = require('mod') -- 运行文件mod.lua. --- require是包含模块的标准做法。 --- require等价于: (针对没有被缓存的情况;参见后面的内容) -local mod = (function () - -end)() +-- require是包含模块的标准做法。 +-- require等价于: (针对没有被缓存的情况;参见后面的内容) +local mod = (function () + +end)() -- mod.lua被包在一个函数体中,因此mod.lua的局部变量 --- 对外不可见。 +-- 对外不可见。 --- 下面的代码可以工作,因为在这里mod = mod.lua 中的 M: -mod.sayHello() -- Says hello to Hrunkner. +-- 下面的代码可以工作,因为在这里mod = mod.lua 中的 M: +mod.sayHello() -- Says hello to Hrunkner. --- 这是错误的;sayMyName只在mod.lua中存在: -mod.sayMyName() -- 错误 +-- 这是错误的;sayMyName只在mod.lua中存在: +mod.sayMyName() -- 错误 --- require返回的值会被缓存,所以一个文件只会被运行一次, --- 即使它被require了多次。 +-- require返回的值会被缓存,所以一个文件只会被运行一次, +-- 即使它被require了多次。 --- 假设mod2.lua包含代码"print('Hi!')"。 -local a = require('mod2') -- 打印Hi! -local b = require('mod2') -- 不再打印; a=b. +-- 假设mod2.lua包含代码"print('Hi!')"。 +local a = require('mod2') -- 打印Hi! +local b = require('mod2') -- 不再打印; a=b. --- dofile与require类似,但是不缓存: -dofile('mod2') --> Hi! -dofile('mod2') --> Hi! (再次运行,与require不同) +-- dofile与require类似,但是不缓存: +dofile('mod2') --> Hi! +dofile('mod2') --> Hi! (再次运行,与require不同) --- loadfile加载一个lua文件,但是并不运行它。 -f = loadfile('mod2') -- Calling f() runs mod2.lua. +-- loadfile加载一个lua文件,但是并不运行它。 +f = loadfile('mod2') -- Calling f() runs mod2.lua. --- loadstring是loadfile的字符串版本。 -g = loadstring('print(343)') --返回一个函数。 -g() -- 打印343; 在此之前什么也不打印。 +-- loadstring是loadfile的字符串版本。 +g = loadstring('print(343)') --返回一个函数。 +g() -- 打印343; 在此之前什么也不打印。 ---]] +--]] ``` ## 参考 @@ -195917,14 +195917,14 @@ g() -- 打印343; 在此之前什么也不打印。 lua-users.org上的[Lua简明参考](http://lua-users.org/files/wiki_insecure/users/thomasl/luarefv51.pdf)应该值得一看。 本文没有涉及标准库的内容: - + * string library * table library * math library * io library * os library -顺便说一下,整个文件是可运行的Lua; +顺便说一下,整个文件是可运行的Lua; 保存为 learn-cn.lua 用命令 `lua learn-cn.lua` 启动吧! 本文首次撰写于 [tylerneylon.com](http://tylerneylon.com) 同时也有 [github gist](https://gist.github.com/tylerneylon/5853042) 版. @@ -195955,7 +195955,7 @@ Markdown 由 John Gruber 于 2004年创立. 它旨在成为一门容易读写的 此教程会指出当某功能是否通用及是否只对某一解析器有效。 --> - # 这是一个

    @@ -196001,7 +196001,7 @@ __此文本也是__ -此段落结尾有两个空格(选中以显示)。 +此段落结尾有两个空格(选中以显示)。 上文有一个
    ! @@ -196028,7 +196028,7 @@ __此文本也是__ + 项目 + 另一个项目 -或者 +或者 - 项目 - 项目 @@ -196089,7 +196089,7 @@ end *** --- -- - - +- - - **************** @@ -196237,10 +196237,10 @@ disp('text') % 在命令窗口中显示 "text" % 变量与表达式 myVariable = 4 % 命令窗口中将新创建的变量 myVariable = 4; % 加上分号可使命令窗口中不显示当前语句执行结果 -4 + 6 % ans = 10 -8 * myVariable % ans = 32 -2 ^ 3 % ans = 8 -a = 2; b = 3; +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 @@ -196283,7 +196283,7 @@ b(2) % ans = 符 % 元组(cell 数组) -a = {'one', 'two', 'three'} +a = {'one', 'two', 'three'} a(1) % ans = 'one' - 返回一个元组 char(a(1)) % ans = one - 返回一个字符串 @@ -196295,7 +196295,7 @@ A.d.e = false; % 向量 -x = [4 32 53 7 1] +x = [4 32 53 7 1] x(2) % ans = 32,MATLAB中向量的下标索引从1开始,不是0 x(2:3) % ans = 32 53 x(2:end) % ans = 32 53 7 1 @@ -196306,7 +196306,7 @@ x = [1:10] % x = 1 2 3 4 5 6 7 8 9 10 % 矩阵 -A = [1 2 3; 4 5 6; 7 8 9] +A = [1 2 3; 4 5 6; 7 8 9] % 以分号分隔不同的行,以空格或逗号分隔同一行中的不同元素 % A = @@ -196315,7 +196315,7 @@ A = [1 2 3; 4 5 6; 7 8 9] % 7 8 9 A(2,3) % ans = 6,A(row, column) -A(6) % ans = 8 +A(6) % ans = 8 % (隐式地将 A 的三列首尾相接组成一个列向量,然后取其下标为 6 的元素) @@ -196354,7 +196354,7 @@ A(1,:) % 第 1 行的所有元素 % 4 5 42 % 7 8 9 -% 等价于 +% 等价于 vertcat(A, A); @@ -196394,7 +196394,7 @@ A * B % 矩阵乘法,要求 A 的列数等于 B 的行数 A .* B % 元素乘法,要求 A 和 B 形状一致(A 的行数等于 B 的行数, A 的列数等于 B 的列数) % 元素乘法的结果是与 A 和 B 形状一致的矩阵,其每个元素等于 A 对应位置的元素乘 B 对应位置的元素 -% 以下函数中,函数名以 m 结尾的执行矩阵运算,其余执行元素运算: +% 以下函数中,函数名以 m 结尾的执行矩阵运算,其余执行元素运算: exp(A) % 对矩阵中每个元素做指数运算 expm(A) % 对矩阵整体做指数运算 sqrt(A) % 对矩阵中每个元素做开方运算 @@ -196457,7 +196457,7 @@ clf clear % 清除图形窗口中的图像,并重置图像属性 % 图像属性可以通过图像句柄进行设定 % 在创建图像时可以保存图像句柄以便于设置 -% 也可以用 gcf 函数返回当前图像的句柄 +% 也可以用 gcf 函数返回当前图像的句柄 h = plot(x, y); % 在创建图像时显式地保存图像句柄 set(h, 'Color', 'r') % 颜色代码:'y' 黄色,'m' 洋红色,'c' 青色,'r' 红色,'g' 绿色,'b' 蓝色,'w' 白色,'k' 黑色 @@ -196487,8 +196487,8 @@ cd /path/to/move/into % 以制定路径作为当前工作目录 % 变量可保存到 .mat 格式的本地文件 -save('myFileName.mat') % 保存当前工作空间中的所有变量 -load('myFileName.mat') % 将指定文件中的变量载入到当前工作空间 +save('myFileName.mat') % 保存当前工作空间中的所有变量 +load('myFileName.mat') % 将指定文件中的变量载入到当前工作空间 % .m 脚本文件 @@ -196502,11 +196502,11 @@ load('myFileName.mat') % 将指定文件中的变量载入到当前工作空间 % 并且函数拥有自己的工作空间(变量域),不必担心变量名称冲突 % 函数文件的名称应当与其所定义的函数的名称一致(比如下面例子中函数文件就应命名为 double_input.m) % 使用 'help double_input.m' 可返回函数定义中第一行注释信息 -function output = double_input(x) +function output = double_input(x) % double_input(x) 返回 x 的 2 倍 output = 2*x; end -double_input(6) % ans = 12 +double_input(6) % ans = 12 % 同样还可以定义子函数和内嵌函数 @@ -196552,8 +196552,8 @@ end for k = 1:5 disp(k) end - -k = 0; + +k = 0; while (k < 5) k = k + 1; end @@ -196574,7 +196574,7 @@ driver = 'com.mysql.jdbc.Driver'; dburl = ['jdbc:mysql://localhost:8889/' dbname]; javaclasspath('mysql-connector-java-5.1.xx-bin.jar'); % 此处 xx 代表具体版本号 % 这里的 mysql-connector-java-5.1.xx-bin.jar 可从 http://dev.mysql.com/downloads/connector/j/ 下载 -conn = database(dbname, username, password, driver, dburl); +conn = database(dbname, username, password, driver, dburl); sql = ['SELECT * from table_name where id = 22'] % SQL 语句 a = fetch(conn, sql) % a 即包含所需数据 @@ -196586,7 +196586,7 @@ tan(x) asin(x) acos(x) atan(x) -exp(x) +exp(x) sqrt(x) log(x) log10(x) @@ -196619,7 +196619,7 @@ pinv(A) % 伪逆矩阵 zeros(m, n) % m x n 阶矩阵,元素全为 0 ones(m, n) % m x n 阶矩阵,元素全为 1 diag(A) % 返回矩阵 A 的对角线元素 -diag(x) % 构造一个对角阵,对角线元素就是向量 x 的各元素 +diag(x) % 构造一个对角阵,对角线元素就是向量 x 的各元素 eye(m, n) % m x n 阶单位矩阵 linspace(x1, x2, n) % 返回介于 x1 和 x2 之间的 n 个等距节点 inv(A) % 矩阵 A 的逆矩阵 @@ -196646,14 +196646,14 @@ flipud(A) % 将一个矩阵上下翻转 % 常用向量函数 max % 最大值 -min % 最小值 +min % 最小值 length % 元素个数 -sort % 按升序排列 -sum % 各元素之和 +sort % 按升序排列 +sum % 各元素之和 prod % 各元素之积 mode % 众数 -median % 中位数 -mean % 平均值 +median % 中位数 +mean % 平均值 std % 标准差 perms(x) % x 元素的全排列 @@ -196948,7 +196948,7 @@ print('Hello World!'); // 和echo相同 // echo和print实际上也属于这个语言本身,所以我们省略括号 echo 'Hello World!'; -print 'Hello World!'; +print 'Hello World!'; $paragraph = 'paragraph'; @@ -197149,7 +197149,7 @@ function my_function () { echo my_function(); // => "Hello" -// 函数名需要以字母或者下划线开头, +// 函数名需要以字母或者下划线开头, // 后面可以跟着任意的字母、下划线、数字. function add ($x, $y = 1) { // $y 是可选参数,默认值为 1 @@ -197444,7 +197444,7 @@ $cls = new SomeOtherNamespace\MyClass(); ## 更多阅读 -访问 [PHP 官方文档](http://www.php.net/manual/) +访问 [PHP 官方文档](http://www.php.net/manual/) 如果你对最佳实践感兴趣(实时更新) [PHP The Right Way](http://www.phptherightway.com/). @@ -198861,7 +198861,7 @@ if (4 > 3) { # 定义如下 jiggle <- function(x) { - x = x + rnorm(1, sd=.1) # 添加一点(正态)波动 + x = x + rnorm(1, sd=.1) # 添加一点(正态)波动 return(x) } @@ -199962,7 +199962,7 @@ translators: # 算术符号只是语法糖而已 # 实际上是调用对象的方法 1.+(3) #=> 4 -10.* 5 #=> 50 +10.* 5 #=> 50 # 特殊的值也是对象 nil # 相当于其它语言中的 null @@ -200234,7 +200234,7 @@ when 'D' puts "Scraping through" when 'F' puts "You failed!" -else +else puts "Alternative grading system, eh?" end #=> "Better luck next time" @@ -200343,7 +200343,7 @@ class Human # 一个类变量,它被这个类的所有实例变量共享 @@species = "H. sapiens" - + # 基本构造函数 def initialize(name, age = 0) # 将参数值赋给实例变量"name" @@ -200351,30 +200351,30 @@ class Human # 如果没有给出age,那么会采用参数列表中的默认值 @age = age end - + # 基本的setter方法 def name=(name) @name = name end - + # 基本地getter方法 def name @name end - + # 以上的功能也可以用下面的attr_accessor来封装 attr_accessor :name - + # Getter/setter方法也可以像这样单独创建 attr_reader :name attr_writer :name - + # 类方法通过使用self与实例方法区别开来。 # 它只能通过类来调用,不能通过实例调用。 def self.say(msg) puts "#{msg}" end - + def species @@species end @@ -200918,7 +200918,7 @@ $debug: true !default; /* @for是控制循环,它能遍历区间值。 它对于设置一组元素的类型特别有用。 有两种形式,"through"和"to"。前者包括最末那个值, -而后者止于最末那个值。 +而后者止于最末那个值。 */ @for $c from 1 to 4 { @@ -201458,7 +201458,7 @@ print("Hello world") // val 声明是不可变的,var 声明是可修改的。不可变性是好事。 val x = 10 // x 现在是 10 x = 20 // 错误: 对 val 声明的变量重新赋值 -var y = 10 +var y = 10 y = 20 // y 现在是 20 /* @@ -201729,7 +201729,7 @@ d._2 /* 旁白: 教程中到现在为止我们所做的一切只是简单的表达式(值,函数等)。 - 这些表达式可以输入到命令行解释器中作为快速测试,但它们不能独立存在于 Scala + 这些表达式可以输入到命令行解释器中作为快速测试,但它们不能独立存在于 Scala 文件。举个例子,您不能在 Scala 文件上简单的写上 "val x = 5"。相反 Scala 文件 允许的顶级结构是: @@ -202085,7 +202085,7 @@ val is_wrong_phone_no = (phone_no <> 5551337) (* false *) (* 'andalso' 和 'orelse' 在很多其他语言里被叫做 && 和 || 。 *) (* 实际上,上面大部分的圆括号都是不需要的。比如表达上面内容的一些不同的方式: *) -fun is_large x = x > 37 +fun is_large x = x > 37 val is_sad = not has_something val pays_same_rent = rent = 1300 (* 看起来很奇怪,但是就是这样的。 *) val is_wrong_phone_no = phone_no <> 5551337 @@ -202255,7 +202255,7 @@ fun solve2 (a : real, b : real, c : real) = (~b - sqr) / denom) end -(* 模式匹配是函数式编程的一个精巧的部分,它是实现 if 的另一种方式。 +(* 模式匹配是函数式编程的一个精巧的部分,它是实现 if 的另一种方式。 斐波那契函数可以被重写为如下方式: *) fun fibonacci 0 = 0 (* 终止条件 *) | fibonacci 1 = 1 (* 终止条件 *) @@ -202398,7 +202398,7 @@ val err_msg = failing_function [1,2] handle Fail _ => "Fail was raised" | Empty => "Empty was raised" | _ => "Unknown exception" -(* err_msg 的值会是 "Unknown exception" +(* err_msg 的值会是 "Unknown exception" 因为 Overflow 没有在模式中列出,因此匹配到了通配符_。 *) (* 我们也可以定义自己的异常 *) @@ -203514,7 +203514,7 @@ lang: zh-cn vim # 在 Vim 中打开 :q # 退出 Vim :w # 保存当前文件 - :wq # 保存文件并退出 Vim + :wq # 保存文件并退出 Vim :q! # 退出 Vim 并且不保存文件 # ! *强制* 执行 :q, 因此没有保存就退出 Vim :x # 保存文件并且退出 Vim, 是 :wq 的简写版本 @@ -203548,17 +203548,17 @@ lang: zh-cn f<字符> # 向前跳移到 <字符> 上 t<字符> # 向前跳移到 <字符> 的左侧 - # 例如, + # 例如,    f<               # 向前跳移到 < 上 t< # 向前跳移到 < 的左侧 - + # 按词移动 # 默认一个单词由字母,数字和下划线组成    w               # 移动到下一个词首    b               # 移动到前一个词首    e               # 移动到下一个词尾 - + # 移动的其它命令 @@ -203609,7 +203609,7 @@ Vim 可以被认为是按 '动词-修饰词-名词' 格式编排的一组命令 ``` # '动词' - + d # 删除 c # 修改 y # 复制 @@ -203631,7 +203631,7 @@ Vim 可以被认为是按 '动词-修饰词-名词' 格式编排的一组命令 s # 句子 p # 段落 b # 块 - + # 示例 '语句' 或命令 d2w # 删除 2 个词 @@ -203675,7 +203675,7 @@ Vim 可以被认为是按 '动词-修饰词-名词' 格式编排的一组命令 ``` " 示例 ~/.vimrc -" 2015.10 +" 2015.10 " 需要 Vim iMproved 版本 set nocompatible @@ -203805,14 +203805,14 @@ Module Module1 ' 一、对应程序目录1,下同 - ' 使用 private subs 声明函数。 + ' 使用 private subs 声明函数。 Private Sub HelloWorldOutput() ' 程序名 Console.Title = "Hello World Output | Learn X in Y Minutes" ' 使用 Console.Write("") 或者 Console.WriteLine("") 来输出文本到屏幕上 ' 对应的 Console.Read() 或 Console.Readline() 用来读取键盘输入 Console.WriteLine("Hello World") - Console.ReadLine() + Console.ReadLine() ' Console.WriteLine()后加Console.ReadLine()是为了防止屏幕输出信息一闪而过 ' 类似平时常见的“单击任意键继续”的意思。 End Sub @@ -203919,7 +203919,7 @@ Module Module1 Console.Write(a.ToString() + " / " + b.ToString()) Console.WriteLine(" = " + e.ToString.PadLeft(3)) Console.ReadLine() - ' 询问用户是否继续,注意大小写。 + ' 询问用户是否继续,注意大小写。 Console.Write("Would you like to continue? (yes / no)") ' 程序读入用户输入 answer = Console.ReadLine() ' added a bracket here @@ -203934,12 +203934,12 @@ Module Module1 ' 这个程序我们将实现从10倒数计数. Console.Title = "Using For Loops | Learn X in Y Minutes" - ' 声明变量和Step (步长,即递减的速度,如-1,-2,-3等)。 - For i As Integer = 10 To 0 Step -1 + ' 声明变量和Step (步长,即递减的速度,如-1,-2,-3等)。 + For i As Integer = 10 To 0 Step -1 Console.WriteLine(i.ToString) ' 将计数结果输出的屏幕 Next i ' 计算新的i值 - Console.WriteLine("Start") - Console.ReadLine() + Console.WriteLine("Start") + Console.ReadLine() End Sub ' 八 @@ -203998,11 +203998,11 @@ End Module ## 参考 -我(译注:原作者)在命令行下学习的VB。命令行编程使我能够更好的了解程序编译运行机制,并使学习其它语言变得容易。 +我(译注:原作者)在命令行下学习的VB。命令行编程使我能够更好的了解程序编译运行机制,并使学习其它语言变得容易。 -如果希望进一步学习VB,这里还有更深层次的 VB教学(英文)。 +如果希望进一步学习VB,这里还有更深层次的 VB教学(英文)。 -所有代码均通过测试。只需复制粘帖到Visual Basic中,并按F5运行即可。 +所有代码均通过测试。只需复制粘帖到Visual Basic中,并按F5运行即可。 --- language: xml contributors: @@ -204047,10 +204047,10 @@ XML是一种标记语言,被设计用来存储数据和传输数据。 @@ -204062,8 +204062,8 @@ XML是一种标记语言,被设计用来存储数据和传输数据。 2 - 元素 -> 那是纯数据。 那就是解析器将从XML文件提取的东西。 元素出现在开放和关闭标签之间,没插入语。--> - - + + computer.gif @@ -204105,7 +204105,7 @@ XML是一种标记语言,被设计用来存储数据和传输数据。 @@ -204335,7 +204335,7 @@ VDEV的类型 数据会以条带方式存储于存储池中的所有VDEV上。因此一个存储池中的VDEV越多,IOPS就越高。 -### storage pool (存储池) +### storage pool (存储池) ZFS 使用存储池来作为底层存储提供者(VDEV)的抽象。这样可以把用户可见的文件系统和底层的物理磁盘 布局分离开来。 @@ -204358,7 +204358,7 @@ ZFS 数据集类似于传统的文件系统(译者注:或者说是目录) ### 存储池 -Actions: (存储池操作) +Actions: (存储池操作) * List (列举) * Status (查看状态) * Destroy (删除) @@ -204709,7 +204709,7 @@ contributors: - ["Rahil Momin", "https://github.com/iamrahil"] - ["Gregrory Kielian", "https://github.com/gskielian"] - ["Etan Reisner", "https://github.com/deryni"] - - ["Jonathan Wang", "https://github.com/Jonathansw"] + - ["Jonathan Wang", "https://github.com/Jonathansw"] - ["Leo Rudberg", "https://github.com/LOZORD"] - ["Betsy Lorton", "https://github.com/schbetsy"] - ["John Detter", "https://github.com/jdetter"] @@ -205627,7 +205627,7 @@ z = "The items in the basket are %s and %s" % (x,y) None # => None # 不要用等於符號 "==" 對 無(None)做比較 -# 用 "is" +# 用 "is" "etc" is None # => False None is None # => True @@ -205997,7 +205997,7 @@ def set_x(num): def set_global_x(num): global x print x # => 5 - x = num # 全域變數 x 在set_global_x(6)被設定為 6 + x = num # 全域變數 x 在set_global_x(6)被設定為 6 print x # => 6 set_x(43) diff --git a/examples/c_lexer/c_lexer.hancho b/examples/c_lexer/c_lexer.hancho index c3cfc7f..6164755 100644 --- a/examples/c_lexer/c_lexer.hancho +++ b/examples/c_lexer/c_lexer.hancho @@ -1,22 +1,22 @@ #------------------------------------------------------------------------------- # Matcheroni C lexer demo -rules = hancho.load("{repo_path}/config/rules.hancho") - -c_lexer_lib = rules.c_library( +c_lexer_lib = hancho.rules.c_library( ["CLexer.cpp", "CToken.cpp"], "c_lexer.a", ) -rules.c_test( +hancho.rules.c_test( "c_lexer_test.cpp", "c_lexer_test", libs = c_lexer_lib, quiet = True, ) -rules.c_binary( +hancho.rules.c_binary( "c_lexer_benchmark.cpp", "c_lexer_benchmark", libs = c_lexer_lib, ) + +hancho.lib = c_lexer_lib diff --git a/examples/c_parser/c_parser.hancho b/examples/c_parser/c_parser.hancho index 18110d3..39fb1b1 100644 --- a/examples/c_parser/c_parser.hancho +++ b/examples/c_parser/c_parser.hancho @@ -1,19 +1,15 @@ #------------------------------------------------------------------------------- # C parser example (not finished) -import sys - -rules = hancho.load("{repo_path}/config/rules.hancho") - -c_parser_lib = rules.c_library( +c_parser_lib = hancho.rules.c_library( source_files = ["CContext.cpp", "CNode.cpp", "CScope.cpp"], build_files = "c_parser.a", ) -rules.c_binary( +hancho.rules.c_binary( "c_parser_benchmark.cpp", "c_parser_benchmark", - libs = [hancho.c_lexer_lib, c_parser_lib], + libs = [hancho.c_lexer.lib, c_parser_lib], ) # Broken? @@ -23,3 +19,5 @@ rules.c_binary( # libs = [c_lexer.c_lexer_lib, c_parser_lib], # quiet = True #) + +hancho.lib = c_parser_lib diff --git a/examples/ini/ini.hancho b/examples/ini/ini.hancho deleted file mode 100644 index 513f782..0000000 --- a/examples/ini/ini.hancho +++ /dev/null @@ -1,6 +0,0 @@ -#------------------------------------------------------------------------------- -# INI parser example - -rules = hancho.load("{repo_path}/config/rules.hancho") - -ini_parser_lib = rules.c_library("ini_parser.cpp", "ini_parser.a") diff --git a/examples/json/json.hancho b/examples/json/json.hancho index 6eea377..37a5425 100644 --- a/examples/json/json.hancho +++ b/examples/json/json.hancho @@ -1,34 +1,34 @@ #------------------------------------------------------------------------------- # Matcheroni JSON parser example -rules = hancho.load("{repo_path}/config/rules.hancho") - -json_parser = rules.c_library( +json_parser = hancho.rules.c_library( ["json_matcher.cpp", "json_parser.cpp"], "json_parser.a", ) -rules.c_binary( +hancho.rules.c_binary( "json_conformance.cpp", "json_conformance", libs = json_parser ) -rules.c_binary( +hancho.rules.c_binary( "json_benchmark.cpp", "json_benchmark", libs = json_parser, ) -rules.c_binary( +hancho.rules.c_binary( "json_demo.cpp", "json_demo", libs = json_parser, ) -rules.c_test( +hancho.rules.c_test( "json_test.cpp", "json_test", libs = json_parser, quiet = True ) + +hancho.lib = json_parser diff --git a/examples/regex/regex.hancho b/examples/regex/regex.hancho index f65c97f..38f9d5e 100644 --- a/examples/regex/regex.hancho +++ b/examples/regex/regex.hancho @@ -1,8 +1,6 @@ #------------------------------------------------------------------------------- # Matcheroni regex parsing example -rules = hancho.load("{repo_path}/config/rules.hancho") - # These are the various regex libraries that Matcheroni can be benchmarked # against. CTRE and SRELL require that you copy their header into matcheroni/. @@ -13,27 +11,29 @@ rules = hancho.load("{repo_path}/config/rules.hancho") #benchmark_defs = ${benchmark_defs} -DSRELL_NO_NAMEDCAPTURE #benchmark_defs = ${benchmark_defs} -DSRELL_NO_VMODE -regex_parser = rules.c_library( +regex_parser = hancho.rules.c_library( "regex_parser.cpp", "regex_parser.a", ) -rules.c_binary( +hancho.rules.c_binary( "regex_demo.cpp", "regex_demo", libs = regex_parser, ) -rules.c_binary( +hancho.rules.c_binary( "regex_benchmark.cpp", "regex_benchmark", libs = regex_parser, sys_libs = "-lboost_system -lboost_regex", ) -rules.c_test( +hancho.rules.c_test( "regex_test.cpp", "regex_test", libs = regex_parser, quiet = True ) + +hancho.lib = regex_parser diff --git a/examples/toml/toml.hancho b/examples/toml/toml.hancho index 79c5573..b44fff4 100644 --- a/examples/toml/toml.hancho +++ b/examples/toml/toml.hancho @@ -1,14 +1,12 @@ #------------------------------------------------------------------------------- # TOML parser example -rules = hancho.load("{repo_path}/config/rules.hancho") - -toml_lib = rules.c_library( +toml_lib = hancho.rules.c_library( "toml_parser.cpp", "toml_lib.a", ) -rules.c_test( +hancho.rules.c_test( "toml_test.cpp", "toml_test", libs = toml_lib, diff --git a/examples/tutorial/tutorial.hancho b/examples/tutorial/tutorial.hancho index ce94b20..88e2c63 100644 --- a/examples/tutorial/tutorial.hancho +++ b/examples/tutorial/tutorial.hancho @@ -1,17 +1,15 @@ #------------------------------------------------------------------------------- # Tutorial examples -rules = hancho.load("{repo_path}/config/rules.hancho") +hancho.rules.c_test("json_tut0a.cpp", "json_tut0a", command_path="{repo_path}", quiet = True) +hancho.rules.c_test("json_tut1a.cpp", "json_tut1a", command_path="{repo_path}", quiet = True) +hancho.rules.c_test("json_tut1b.cpp", "json_tut1b", command_path="{repo_path}", quiet = True) +hancho.rules.c_test("json_tut1c.cpp", "json_tut1c", command_path="{repo_path}", quiet = True) +hancho.rules.c_test("json_tut2a.cpp", "json_tut2a", command_path="{repo_path}", quiet = True) +hancho.rules.c_test("json_tut2b.cpp", "json_tut2b", command_path="{repo_path}", quiet = True) -rules.c_test("json_tut0a.cpp", "json_tut0a", command_path="{repo_path}", quiet = True) -rules.c_test("json_tut1a.cpp", "json_tut1a", command_path="{repo_path}", quiet = True) -rules.c_test("json_tut1b.cpp", "json_tut1b", command_path="{repo_path}", quiet = True) -rules.c_test("json_tut1c.cpp", "json_tut1c", command_path="{repo_path}", quiet = True) -rules.c_test("json_tut2a.cpp", "json_tut2a", command_path="{repo_path}", quiet = True) -rules.c_test("json_tut2b.cpp", "json_tut2b", command_path="{repo_path}", quiet = True) - -rules.c_binary( +hancho.rules.c_binary( "tiny_c_parser.cpp", "tiny_c_parser", - libs = [hancho.c_lexer_lib, hancho.c_parser_lib], + libs = [hancho.c_lexer.lib, hancho.c_parser.lib], ) diff --git a/tests/tests.hancho b/tests/tests.hancho index 67ae0c0..d5a2cfd 100644 --- a/tests/tests.hancho +++ b/tests/tests.hancho @@ -1,19 +1,17 @@ #------------------------------------------------------------------------------- # Tests -rules = hancho.load("{repo_path}/config/rules.hancho") - #build obj/matcheroni/Matcheroni.hpp.iwyu : iwyu matcheroni/Matcheroni.hpp #build obj/matcheroni/Parseroni.hpp.iwyu : iwyu matcheroni/Parseroni.hpp #build obj/matcheroni/Utilities.hpp.iwyu : iwyu matcheroni/Utilities.hpp -rules.c_test( +hancho.rules.c_test( "matcheroni_test.cpp", "matcheroni_test", quiet = True, ) -rules.c_test( +hancho.rules.c_test( "parseroni_test.cpp", "parseroni_test", quiet = True,