Когато приключите да четете това, ще знаете как да кодирате.

Ще бъдете лоши в това, но каквото и да е.

Това е ранна версия на глава от първата ви година в Code, книга с практически насоки и съвети за нови разработчици. Ако обмисляте кариера в софтуера, проверете го на https://leanpub.com/firstyearincode.

Това не е пълно ръководство за кодиране. Това е въвеждане на ключови думи за достатъчно кодиращи концепции и ключови думи, за да ви изведе от нула до основен скрипт. Това е 30-минутно четене.

Пиша това за:

  • хора, които се интересуват от кодирането, но искат да опитат какво е, преди да поемат време или усилия за това;
  • хора, които работят директно с кодери и искат да разберат гайките и болтовете на това, което правят;
  • хора, които започват своето пътуване по компютърни науки и искат грунд на 100 нива накратко;
  • хора, които са виждали програмисти по телевизията и им е любопитно да знаят какво въвеждат през цялото време.

На първо място: поемете дълбоко въздух. Картината на корицата в тази публикация не е истински код. Поне това не е код, който някой използва. Реалният код - това, което пиша в работата - се състои най-вече от английски думи, символи, числа (всичките десет от тях, а не само такива и нули) и съставени имена. След като научите малко речник, той е четим. Ще разгледам всяко от тях по-късно.

Едно искане за вас: ако не разбирате нещо, моля, подчертайте го и оставете коментар, за да мога да го направя по-ясно. Аз съм натрапчив редактор и искам това да се чете гладко.

Да започваме.

Какво е компютърна програма?

Компютърна програма - известна още като приложение, приложение или част от софтуера - е съвкупност от много редове със специален текст. Те са специални, защото компютърът може да ги разбере, а компютрите са невероятно тъпи. Най-малките практически приложения имат сто или повече реда текст в тях. Най-големите приложения имат милиарди.

Ние наричаме този специален текстов код. Кодът е набор от стъпка по стъпка инструкции, като рецепта. Той казва на компютрите какво да правят с данните. Данните са всяка информация, която компютърът може да съхранява в своята памет. Съвременните компютри са доста добри в държането на неща като дати и изречения. Ако имате акаунт в Twitter, тогава Twitter има някои плоски, грозни компютри в склад, в които се провежда вашият рожден ден и всеки туит, който някога сте туитвали. Заедно с рождените дни и туитовете на други 300 милиона други хора.

Това са всички данни. Не се притеснявайте, компютрите не седят около четене на старите си туитове за забавление. И ако го направиха, така или иначе нямаше да е „забавно“. Би било болезнено. Туитовете ти са тъпи.

Когато посетите twitter.com, вашият компютър заема цял куп код от един от тези грозни складови компютри. Той отчита скоростта от този код. И тогава той изпълнява този код, което означава, че компютърът прави точно това, което инструкциите стъпка по стъпка го казват да прави.

Ако инструкциите са написани много внимателно, това е всички праскови от тук нататък. Twitter ще работи. Той ще публикува вашите тъпи туитове пред целия свят. Той ще ви позволи да четете тъпите туитове на други хора. Това ще ви позволи тези туитове.

Ако има някакъв недостатък в тези инструкции - каквото и да е от печатна грешка до пълно погрешно тълкуване на данните - тогава Twitter няма да работи. Той или ще покаже съобщение „Грешка“, ще срине приложението или ще пострада в мълчание, като прави тайно неща с вашите данни, които бихте предпочели да не го правят.

Това е уловката. Кодирането не е много трудно. Изисква ви да запомните няколкостотин термина и да научите някои граматични правила - бихте могли да направите това с английски до момента, когато сте били две, а английският език е бъркотия. Трудното е да бъдете извиквани от анално-задържащ компютър всеки път, когато натиснете грешен клавиш или разберете погрешно понятие. Трудната част за кодирането е самото количество разочарование, което трябва да поемеш.

Забавната част е решаването на проблеми. В съвременния софтуер проблемите в реалния свят се превръщат в загадки, които могат да бъдат решени с код - но само след като наистина ги разберете. След като обвиете ума си около всяка възможна пермутация на проблем, можете да напишете код, който да го адресира старателно, стъпка по стъпка.

Инструментите на търговията

Пакетът с инструменти на програмист обикновено се състои от няколко неща:

  • Компютър.
  • Интернет връзка. Имате нужда от интернет връзка, за да можете да използвате Google. Когато не знаете как да направите нещо (което се случва около 787283493857 пъти на ден), го изпращате с Google. Когато приложението ви даде съобщение за грешка, го изпращате на Google. Google всичко.
  • Кодов редактор (или IDE, който е редактор на кодове на стероиди). Мислете за това като Microsoft Word (или още по-добре, Edward the App) за кодиране. Помага ви да организирате и препрочетете кода си.
  • Компилатор или преводач. Това е програма, която чете кода ви, опитва се да открие грешки, за да може да ви забърка за тях, събира вашия код в хубав малък пакет и след това го предава на компютъра за изпълнение. Освен това прави и много други неща, но това са нещата, които трябва да знаете за момента.
  • Добър чифт слушалки. Те ви помагат да игнорирате хората, за да можете да се съсредоточите.

Вероятно вече имате компютър. Тъй като четете това, определено имате връзка с интернет и преводач (Internet Explorer и Google Chrome са вградени преводачи). Има много безплатни редактори на кодове, достъпни онлайн (като този). Не мога да ти помогна със слушалките, но добра алтернатива е да се взираш в хората, докато не си тръгнат.

Значи сте готови, нали?

Програмни езици

В света има хиляди програмни езици. Много от тях са тъпи и безполезни. Можете да имате дълга и щастлива кариера, като знаете само три или четири, но не се притеснявайте, това не е толкова трудно, колкото да научите три или четири човешки езика.

Езиците за програмиране често се описват от тяхната парадигма, което е начин за категоризиране на видовете функции, които имат. Например, JavaScript е езикът, който работят всички уеб браузъри, и вероятно най-популярният език за програмиране в света. Той има разнообразен набор от функции; Бих могъл да кажа, че JavaScript поддържа императивни, структурирани, обектно-ориентирани и управлявани от събития парадигми. И може да кажете, че съм претенциозен маниер.

Не е нужно да знаете какво означават всички тези думи. Това, което трябва да знаете, е, че езиците за програмиране с подобни парадигми обикновено имат подобен синтаксис - тоест лексика и граматика. Така че след като научите един език (като JavaScript), вие вече сте 75% от пътя за изучаване на подобни езици, като Python и Ruby.

Най-добрите кодери разбират проблемите по отношение на алгоритъм - поредица от стъпки, които могат да бъдат използвани за извършване на определено нещо, дори ако детайлите са различни всеки път. Някога купували ли сте нещо на Amazon? Опитът на касата е нещо като алгоритъм. Без значение какво купувате, стъпките са приблизително еднакви: попълнете количката си, изберете вашата кредитна карта и адрес за доставка, изберете скорост на доставка и направете поръчката си. Всъщност кодът е един и същ за всяка покупка. Разликата е всичко в данните. Сега вземете това: всеки алгоритъм, който евентуално може да съществува, може да бъде написан на всеки нормален език за програмиране. Това е математически факт. След като се научите да мислите в алгоритмите, езикът на програмиране е второстепенно. Разбира се, че рита и влачи краката си малко. Но в крайна сметка не става дума за ключовите думи и символи, които използвате. Става дума за процесите, които описвате.

От тук нататък, ще използвам езика за програмиране на JavaScript, за да давам примери. Правя това в моя полза, а не ваша. Добър съм в JavaScript.

Примерите за кодове ще бъдат отпечатани в монопространството, което е специален шрифт, който изглежда така. Моноразмерените шрифтове дават еднаква точна ширина на всяка буква, число, символ и интервал. Целият код е написан в monospace, въпреки че е по-трудно да се чете от нормалните шрифтове. Това е така, защото помага за подравняване на блокове от код и позволява на кодерите да отделят еднакво внимание на всяка буква и символ, което им помага да избегнат грешки. Като пример, погледнете следното изречение както в обикновен шрифт, така и в едно пространство:

Има три грешки в изречението: допълнително място след „за“, допълнително апостроф в „Алиса“ и експлоатация на Боб от приятелството и доверието на Алиса. О, и „без“ е написана неправилно. Вероятно сте виждали всички тези грешки в първото изречение, но те са по-очевидни във второто и очевидно е най-добрият ви приятел, когато сканирате документ с 200 реда с код.

Поставяне на данни в код

Достатъчен фон: нека напишем някакъв код. Най-основният градивен елемент на компютърна програма е променлива. Променливата е име за част от данните, като число или изречение. Трябва да посочите своите данни.

Има две причини да назовете данните си:

  1. Не знаеш какво е предварително. Facebook знае ли рождения ти ден, преди да го въведете? Не разбира се, че не. Кодът на Facebook използва име като манекена_birthday зад кулисите (подчертаването е налице, защото променливите имена не могат да имат интервали в тях). Той прикрепя това име към какъвто и рожден ден да въведете. По този начин кодът може да бъде абсолютно същия, независимо дали вашият рожден ден е на 10 юни, 9 септември или на 86 декември. Той просто премества манекен на рождения ден в програмата, докато стигне до грозен склад на компютър.
  2. Не искате да забравяте какво означава. Да предположим, че компютърната програма трябва да знае, че 86-и декември не е истинска дата. Така че някъде трябва да му кажете, че декември има 31 дни. 31 е число, част от данните. Но ако използвате числото 31 през целия си код, а също и използвате числа като 30 и 28 (защото, слава богу, декември не е единственият месец), кодът ви ще бъде объркващ за четене. За какво са всички тези числа? Значи ги назовавате. 31 става the_number_of_days_in_december, а вашият код става обяснителен. Красив.

Компютрите очакват да декларирате променливите си. Променлива декларация е като свидетелство за раждане за част от данните. Изглежда така:

var the_number_of_days_in_december

Оперативната дума тук е var. Това е кратко за „променлива.“ Съкращението е хубаво, защото е по-бързо да пишете. Той може да бъде въведен само с една ръка, така че ако всичко, което правите, е деклариране на променливи през целия ден, другата ви ръка е свободна да правите страхотни неща като сокове грейпфрути и да практикувате с четвърт стаф.

Друго нещо, което правите с променливи, е да им присвоите. Това е мястото, където прикачвате името към част от данните. Изглежда така:

the_number_of_days_in_december = 31

Лесни неща. Декларирате променливата, след това я присвоявате и след това всеки път, когато искате да използвате числото 31 в програмата си, можете да напишете the_number_of_days_in_december и компютърът ще разбере какво имате предвид.

Не е нужно да присвоявате всяка променлива на изричен фрагмент от данни, когато пишете програмата си. Можете да декларирате променливи и да ги присвоите на неща, които все още не съществуват. Например, можете да декларирате var dummy's_birthday и да кажете на приложението да изчака потребителя да го въведе. Каквото и да въведе, това ще стане манекен на_birthday. Не е нужно дори да се притеснявате за това.

Променливите могат да държат много повече от само числа и дати. Например, можете да декларирате низ или част от текст:

var great_song_lyrics = 'La la la, la la la тази вечер'

Уау. Curveball. Току-що декларирах променлива и я назначих едновременно. Толкова съм адски ефективен. Донесете на този човек грейпфрут.

Сега мога да напиша great_song_lyrics в кода си, където искам, и компютърът ще знае, че имам предвид „La la la, la la la тази вечер“. Сякаш говорим ... в код.

Не ми вярваш? Опитайте веднага. Ако четете това на телефона си, ще трябва да отворите уеб браузър, като Google Chrome, на компютър. Натиснете клавиша F12 на клавиатурата си (ако сте на Mac, опитайте това вместо това). Ще видите нещо подобно:

Това може да бъде подравнено към десния или долния край на вашия браузър.

Уверете се, че е избран раздел „Конзола“. Щракнете в празната област до символа>, въведете променлива декларация и задание и натиснете Enter:

Конзолата казва неопределена, защото редът на кода, който сте въвели, не е генерирал никакви данни. Това е добре, не е трябвало. Сега въведете името на вашата променлива и натиснете Enter отново:

Ура! Конзолата (която е интерпретатор) разбира вашата променлива. Променливата great_song_lyrics оцени (разбра се) като "La la la, la la la тази вечер". Това е перфектно (между другото, няма значение дали използвате единични кавички или двойни кавички, стига да ги използвате в съвпадащи двойки).

Ще говорим за други неща, които променливите могат да задържат само за секунда.

Много езици за програмиране изискват да бъдете конкретни за това каква променлива декларирате. В C ++, например, няма ключова дума var. Има ключова дума int (за деклариране на малки цели числа), дълга ключова дума (за деклариране на големи цели числа), float и двойни ключови думи (за деклариране на десетични числа), низ ключова дума (за деклариране на части от текст) и няколко други. Не се тревожете за това в момента. Можете да го научите по-късно.

Сложни типове

обекти

Важна част от кодирането е да научите как да организирате данни. Вземете пример за рождения ден: Facebook има стотици милиони рождени дни (и годишнини и дати на разпадане), съхранявани в компютърната памет в неговия склад. Как се знае какво има? Ако ви дам списък с милиардни дати, бихте ли разбрали към кого принадлежат и за какво са? Разбира се, че бихте, защото сте големият Календифус, гръцки бог на случайно значимите дати.

За щастие, Facebook няма просто купчина произволни дати. Те свързват вашия рожден ден, годишнина, роден град, вашата история на работа, вашето име и всичко останало, което знаят за вас, заедно с уникален документ за самоличност (като този на вашата карта за социално осигуряване или шофьорска книжка). Вероятно е голям брой те да са взели от шапка, така да се каже. Тоест, вие сте номер 12884002 и всяка част от данните, която имат върху вас, има етикет с надпис „12884002“ и когато влезете, те преглеждат всичко с този номер. Всичко е организирано точно така.

В код бихте направили това с обект. Обектът е куп парчета данни, всички организирани заедно. Можем да наречем това и асоциативен масив, речник или карта. Но най-често казвам само обект.

В JavaScript обектите се декларират и присвояват почти като други променливи. Ето пример за обект:

вар манекен = {
    id: 12884002,
    възраст: 28,
    име: „Боб“,
    favorite_song: „Снимка, от Nickelback“
}

Всяка част от данните в даден обект е като мощност. Името е отляво, данните отдясно и има: в средата, за да балансирате. Наистина всичко, което направихме, е да декларираме четири променливи: първите две са числа, а последните две са низове. Но те са организирани заедно, така че можем да ги намерим винаги, когато трябва да знаем нещо за манекена. И вместо да ги наричаме „променливи“, ние ги наричаме „свойства“ или „полета“. Един обект може да има всякакви свойства, които искате, стига да ги сложите всичките в {curly скоби}.

Можем да преместваме манекенен обект наоколо и да го отнасяме както всяка друга променлива. Компютърът знае какво имаме предвид. Ако някога искаме да се позоваваме само на едно свойство на манекена, използваме точка, като тази:

dummy.id
dummy.name
dummy.age
dummy.favorite_song

Всяко от тях е като всяка друга променлива. Можем да му присвоим нещо и да го отнесем по-късно. Искате ли да промените името на Боб? Лесно:

dummy.name = 'Алиса'

И това е Това е наистина добро надграждане, нали? Отсега нататък, когато въвеждате dummy.name, ще се отнася до „Алиса“.

Масивите

Понякога не искате да измисляте уникално име за всеки имот в обект, особено ако всички те са много сходни. Или не знаете колко ще бъдат. Тогава е време да използвате масив, който представлява списък с подобни данни. Масивите могат да растат или да се свиват според нуждите.

Добър пример са всичките ви тъпи туитове. Twitter не знае колко туитове ще напишете. Започнахте от 0 и вижте къде се намирате сега. Twitter използва масив, за да ги задържи всички. Масивите в JavaScript изглеждат така:

var dumb_tweets = ['Здравей, Twitter!', 'Моите приятели са толкова готини', 'Някой иска ли LaCroix?']

Спомнете ли си как са използвани обекти {къдрави скоби}? Използват се масиви [квадратни скоби]. Този масив има три низа в него, разделени със запетаи. И да, тя е променлива, както всичко друго. Можете да използвате dumb_tweets навсякъде в кода си и той ще се отнася до масива, който сме дефинирали точно сега.

Ако искате да препратите към определен низ в масива, ще го направите така:

dumb_tweets [0]
dumb_tweets [1]
dumb_tweets [2]

Използваме името на масива, dumb_tweets и след това вътре в [квадратни скоби] използваме числото (или индексът) на нещата (или елемента), към които искаме да се отнасяме. Знам, че е странно, че първият елемент в масива е номер 0. Но това е твоят живот сега. От този ден нататък винаги ще започнете да броите от 0. Това е програмистът.

Всеки от горните изрази (израз е всеки код, който се превръща в част от данните, когато го стартирате) е променлива. Можете да зададете нещо ново, ако искате.

dumb_tweets [2] = 'Съжалявам буквално за всичко, което някога съм казвал'

Какво се е случило с „Иска ли някой LaCroix?“? Замина завинаги. Погълнат от бездната. G'bye!

Масивите могат да съдържат низове, числа, дати, обекти и дори други масиви. Можете да поставите масиви вътре в масиви вътре в масиви вътре в масиви.

Всеки път, когато кодът или данните получат всичко по-нататък по този начин, казваме, че са вложени.

Масивите също могат да бъдат свойства на обекти. Обектът може да има свойство, представляващо масив от обекти, всеки от които има свойство, което е масив от обекти ... и аз го направих отново. Звучи като руска кукла, но това е начинът на структуриране на данните. Например, вашият акаунт в Twitter може да бъде обект, който има свойство, което е масив от туитове; всеки туит може да бъде обект със свойства, които са масиви от отговори, харесвания и ретуити; всеки отговор, като или ретуит може да бъде обект, който има свойства, които са името, снимката на профила и биографията на потребителя, който ги е дал; и така нататък.

var nested_object = {
    масив: [
        {
            another_array: [
                {
                    още един: [
                        {
                            съобщение: „Мигайте два пъти, ако се нуждаете от помощ“
                        }
                    ]
                }
            ]
        }
    ]
}

За достъп до съобщение можете да напишете:

nested_object.an_array [0] .another_array [0] .yet_another [0] .message

И компютърът ще знае, че имаш предвид „Мигай два пъти, ако имаш нужда от помощ“.

Обекти (продължение)

Още една тройна част и тогава можем да преминем към забавните неща.

Всичко в JavaScript е тайно обект (не казвайте! Родителите му биха били толкова луди). Например, нашият масив dumb_tweets има свойство, което никога не сме декларирали:

dumb_tweets.length

Каква е по дяволите дължина? Е, това е свойство, което JavaScript създава и актуализира автоматично за вас. Той ви казва колко елементи има в масива. В този случай би било 3. В масива има 3 елемента. Отиди ги брои, но не започвай от 0 този път, защото излъгах и ти трябва само да започнеш да броиш от 0 при специални случаи. По дяволите.

APIs

Време е за страшна история за огъня.

Някога в една алтернативна вселена имаше програмист на име McChuck. Той беше единственият кодер в цялата Вселена. Той трябваше да напише целия код, който някога ще съществува, и самият той.

Sheesh, това беше просто история. Успокой се.

Истината е, че никой кодер не е остров. Всички постоянно използваме код, който не сме писали - всъщност кофи от него

Дори ако сте плодовит кодер и пишете милиони редове код през живота си, ще използвате много повече редове от код, които е написал някой друг. По-голямата част от този код ще дойде от напълно непознати. Някои от тези непознати ще бъдат мъртви. Техният код живее, въпреки че пръстите, които го въведоха, се разлагат в гроб. Това е зомби код. Но вместо да яде мозъка ви, това спасява мозъка ви от много тежка работа. Най-добър. зомби. всякога.

Как използвате този зомби код? Копиране и поставяне? Понякога, да, но не често. През повечето време ще получите достъп до него чрез API. API е съвкупност от набор от свойства и методи (създадени по предназначение части от код), които са именувани, като променливи, така че можете да се обърнете към тях с името им и да ги оставите да свършат своята работа. Те правят всякакви полезни неща за вас.

JavaScript масивите имат свой собствен API. Свойството дължина е част от този API. Друга част от него е методът push, който добавя елемент в края на масива:

dumb_tweets.push („Човек, който мразя добри отношения“)

Методът е като свойство, тъй като достъп до него с точка. Методът е различен от свойството, защото трябва да поставите (скоби) след него. Тези скоби държат данните, които искаме да добавим към нашия масив. Сега dumb_tweets има четири елемента. Изглежда така:

[„Здравей, Twitter!“, „Приятелите ми са толкова готини“, „Съжалявам буквално за всичко, което съм казвал някога“, „Човек, който мразя добрите отношения“]

Не забравяйте, че индексът на този последен елемент е 3 (защото сте започнали да броите от 0), така че бихте го посочили като dumb_tweets [3]. И dumb_tweets.length сега би оценил до 4.

API на масива на JavaScript има много различни методи в него, но не е целта на тази публикация да ги обясни всички. Можете да ги видите в пълната им слава на този линк.

Уеб браузърите имат огромен API, който кодиращите JavaScript използват всеки ден. Този API има методи за неща като анимиране на неща в уебсайт, получаване на потребителски принос, комуникация с други компютри през интернет, манипулиране на струни и много други неща. Изграждането на работещ речник в този API е съществена част от превръщането в уеб програмист.

Функции

Функцията е друга дума за метод. Това е просто парче код, което прави нещо и (обикновено) има име. Функциите са лесни за деклариране в JavaScript:

функция giveMeOne () {
    връщане 1
}

Започваме с функцията за ключови думи. След това даваме име на функцията, точно както ако декларирахме променлива (тук използвах главни букви, вместо подчертаване, за да разделям думи). След това използваме скоби (ще видите защо след секунда). Тогава използваме {къдрави скоби}. Вътре в къдравите скоби са всички редове от код, които искаме да изпълняваме всеки път, когато се извика функцията (винаги, когато един израз се отнася до нея по име).

Думата връщане е друга специална ключова дума. Това прави стойност (част от данните) да изскочи от функцията. Тогава тя прекратява функцията (ако напишете някакъв код след декларация за връщане, този код няма да се изпълни). Така че можете да направите нещо подобно:

var the_loneliest_number = giveMeOne ()

Това не е твърде трудно, нали? Декларираме променлива с име the_loneliest_number. Частта за присвояване на нашето извикване извиква giveMeOne (), и тъй като тази функция казва връщане 1, изскача 1. Така че нашата променлива ще държи числото 1. Продължете и изпълнете и двата блока код в конзолата на браузъра си. След това въведете_loneliest_number, натиснете Enter и ще видите, че той оценява на 1.

Функцията може да бъде свойство на обект. Тя може да бъде елемент от масив. Той може да върне число, дата, низ, обект, масив, друга функция, масив, пълен с функции и т.н. Тези неща са като тухли LEGO. Поставете всякакъв вид парче навсякъде, където искате и то ще се побере.

giveMeOne () е нещо като dumb_tweets.push (). Основните разлики са:

  1. giveMeOne () е функция, която написахме сами. push () е функция, която някои непознати написаха. Добре е, те нямат нищо против, ако го използваме.
  2. push () е метод на dumb_tweets (и всеки друг масив, който някога ще създадем). giveMeOne () е глобален, което означава, че не е необходимо да се отнасяме към конкретен обект, за да го използваме.

Ще забележите още едно нещо, което изглежда различно за тях: giveMeOne () използва празни скоби, но push () очаква от нас да поставим част от скобите в скобите. Всъщност push () би било безполезно, ако не можахме да му кажем какво да добавим към нашия масив. Частта от данни, която му даваме, се нарича аргумент. Аргументът е просто част от данните, които попадаме във функция. Декларирането на функция, която очаква аргументи, изглежда така:

функция addTheseNumbersTogetherPlz (number1, number2) {
    връщане номер1 + номер2
}

Тази функция не е твърде различна от giveMeOne (). Но вместо празни скоби, те имат променливи имена в тях, разделени със запетая. Това са нашите аргументи. Декларацията за връщане прави точно това, което изглежда като прави: добавя числа1 и число2 заедно, след което извежда резултата. Ще извикате функцията по този начин: addTheseNumbersTogetherPlz (3, 4). И ще излезе 7.

Ооо! Математика! Страшно, нали? Почти всички езици за кодиране ви позволяват да пишете математически изрази по същия начин, по който сте ги използвали в онези тухлени TI калкулатори, които сте използвали в гимназията. Можете да използвате + за добавяне, - за изваждане, / разделяне, * за умножение, (скоби), за да изпълните ред на операциите,% за получаване на остатъка от деление и ^ за незабавно отглеждане на шията (не, не става ' не правите експоненти; за това ви е необходим API).

Можете също така да напишете функцията по този начин:

функция addTheseNumbersTogetherPlz (number1, number2) {
    var sum = число1 + число2
    сума за връщане
}

Тази функция прави точно същото. Той просто използва променлива с име сума като посредник.

Има много начини да напишете функция. Трябва да изберете начина, който най-ясно изразява какво прави кодът. Кодът, който е кратък и лесен за разбиране, често се нарича експресивен или красноречив. Има артистично удоволствие от писането на този вид код.

Програмите трябва да бъдат написани, за да могат хората да четат и само случайно, за да се изпълняват машини. ~ Харолд Абелсън

Логически клонове и сравнения

Това е мястото, където кодът получава допълнително забавление. (Вече беше забавно.)

Компютърните програми не правят едно и също нещо всеки път, когато ги стартирате. Ако го направиха, тогава видеоигрите щяха да играят сами. Това би било пропадане. Трябва само да седнете там и да гледате как историята се разиграва на екрана, като ... хм ... не знам, но би било скучно. Определено нямаше да има цяла индустрия, посветена на него.

Програмите трябва да реагират в различни ситуации. Те трябва да вземат решения. И там са нещата, ако влизат изявления.

Да речем, че пишем приложение, което определя дали определен човек има право да влиза в нощен клуб. Преструвайте се, че в JavaScript API има метод, който достига възрастта на потребителя. Ще го наречем getUserAge (). Също така ще си представим, че има два други метода, позволяватThemInTheNightclub () и хвърлятThemOutOnTheirButt (). Как можем да помогнем на нашата програма да реши кой от тези два последни метода да се обади, въз основа на върнатата стойност на първия метод?

var age = getUserAge ()
ако (възраст> = 21) {
    allowThemInTheNightclub ()
} else {
    throwThemOutOnTheirButt ()
}

Вижте колко хубаво е подравняването от дясната страна? Монотип за печалбата.

Вече знаете какво прави първият ред. възрастта ще има стойност като 13 или 21 или 101. Сега трябва да знаем: възраст на 21 или повече? Ако е така, те могат да купонясват. Ако не, ще трябва да напуснат

Правим това, използвайки оператор if. ако е ключова дума, която прилича малко на метод. Аргументът, който очаква, е израз на някакъв вид, обикновено сравнение. Сравненията вземат две стойности и ги сравняват помежду си, което води до стойност на true (ако сравнението е вярно) или false (ако не е вярно). Тези две стойности се наричат ​​булеви и те са единствените две булеви съществуващи. Можем да направим шест различни вида сравнения:

  • === (три знака за равенство) сравнява стойностите от двете страни, за да види дали те са абсолютно равни. Ако са равни, резултатът е верен. 6 === 6 би било вярно.
  • ! == сравнява стойностите от двете страни, за да види дали не са точно равни. Ако те не са равни, резултатът е верен. 6! == 3 би било вярно.
  • > проверява дали стойността от лявата страна е по-голяма от стойността от дясната страна. 6> 3 би било вярно.
  • <проверява дали стойността от дясната страна е по-голяма от стойността от лявата страна. 3 <6 би било вярно.
  • > = проверява дали стойността от лявата страна е по-голяма или равна на стойността от дясната страна. 6> = 6 и 6> = 5 са ​​истина.
  • <= проверява дали стойността от дясната страна е по-голяма или равна на стойността от лявата страна. 6 <= 6 и 6 <= 7 са истина.

ако изявленията оценяват сравнението, което им давате. Ако се оцени на true, те изпълняват кода в блока си (редовете на кода вътре {curly скоби}). Ако се оцени на невярно, те пропускат този код.

ако изявленията могат да имат и друго изявление, прикрепено към опашния им край. Операторът else има блок, който ще бъде изпълнен, ако сравнението е невярно. Погледнете отново нашето приложение за нощни клубове. Това би трябвало да има много смисъл сега.

Ей, току-що направихме излишен изхвърчач (той беше заменен от компютърна програма). Това не е ли добро чувство?

Loops

Понякога, особено когато работите с масив, искате да изпълните блок код няколко пъти подред. Това не е моментът за използване на копие и поставяне. Вместо това трябва да използвате контур. Най-простият вид цикъл в JavaScript е цикъл за време:

var the_real_slim_shady = ['Моето име е', 'Моето име е', 'Моето име е', 'Waka waka Slim Shadyyy']
вар индекс = 0
докато (индекс 

докато циклите използват същия синтаксис, както ако операторите. Използвате скоби, предавате в сравнение, следвате го с блок. Но блокът if изпълнява кода вътре в него само веднъж (или нула пъти, ако сравнението се оцени на невярно). Блок време изпълнява кода вътре в него отново и отново, докато условието е невярно. Тоест оценява състоянието; ако е вярно, той изпълнява блока; след това отново оценява състоянието; ако е вярно, той изпълнява блока отново; след това отново оценява състоянието; и така нататък, завинаги. Тук съм измислил въображаем API, който има метод rap (), но всичко останало е редовен JavaScript.

Колко пъти ще се изпълни цикълът? Е, първият път, когато оценява сравнението, проверява дали индексът (който е 0) е по-малък от the_real_slim_shady.length (което е - продължете, пребройте ги - 4). Тъй като сравнението е вярно, той изпълнява кода, който рапира the_real_slim_shady [0], защото индексът все още е 0. Тогава магията се случва: той променя индекс в индекс + 1, или 0 + 1, което е 1. След това оценява сравнителен израз отново. 1 все още е по-малък от 4, така че изпълнява блока отново - но този път, тъй като индексът е 1, той рапира the_real_slim_shady [1]. Вземи го? Той ще спре да изпълнява блока, когато индексът е равен на 4, което е добре, тъй като the_real_slim_shady [4] не съществува. Когато цикълът работи на множество елементи в масива, казваме, че той се повтаря.

Нула и неопределена

Ако декларирате променлива и не й присвоите стойност, тя ще съдържа специална стойност, наречена неопределена. Това е умопомрачителна дума, която означава „движете се, няма какво да видите тук.“ Това е предимно безполезно.

JavaScript също има специална стойност, наречена null. Това означава приблизително същото като неопределеното. Те наистина не трябва да включват двете думи в езика. Но те го направиха и вече е късно.

Скоупс

Функциите са много егоистични. Ако декларирате променлива вътре във функция, функцията няма да позволи на никой от кода извън себе си да използва променливата. Например:

функция whatHappensInVegas () {
    var wildIndiscretions = ['partied', 'danced']
    връщане „Не признавам нищо“
}
каквото стане във Вегас()
каквото стане във Вегас()
каквото стане във Вегас()
ако (wildIndiscretions.length> 0) {
    getADivorce ()
}

Имаме много проста функция. Той декларира променливата wildIndiscretions, но не я връща. Външният свят не знае нищо за него! Ние дори изпълняваме функцията три пъти, защото сме млади и издръжливи. Изразът if се опитва да влезе в личния живот на функцията, но не може. Кодът на блока if никога няма да се изпълни. В действителност, сравнението wildIndiscretions.length> 0 ще хвърли грешка (няма да работи и ще видите съобщение, обясняващо защо), тъй като wildIndiscretions не е дефиниран извън функцията whatHappensInVegas. Той няма свойства, камо ли дължина.

Ако обаче преместите това, ако блок вътре във функционалния блок (преди операцията за връщане, разбира се), той ще получи достъп до wildIndiscretions. Надявам се, че сте имали предусещане, бабо!

Коментари

Не винаги е очевидно какво прави код или какво все още трябва да се направи с него. Ако трябва да излезете от компютърния език и да говорите истински какво се случва в кода (или просто да пуснете някои текстове на наркотици), можете да използвате коментар или ред код, който компютърът ще пренебрегне. Започвате коментар с // две наклонени черти. Като този:

функция еEven (num) {
    // Тази функция определя дали числото е четно или нечетно.
    // Ако е дори, то връща истина. Ако е странно, той връща невярно.
    // TO DO: добавете втори аргумент, който ви позволява да посочите
    // съобщение за показване, ако „num“ е нечетно.
    връщане (число% 2) === 0
    // Хей, йо, направи го като Исаак
    // Ако не си с мен, бебето не е разумно
}

Не се притеснявайте за математиките в декларацията за връщане. Просто демонстрирам, че можете да използвате коментари, за да обясните какво се случва, да оставите бележка за бъдещето си и да плюете барове. Последната употреба вероятно е намръщена в сериозни кодови бази. Но не позволявайте на мъжа да ви задържи. Вие сте родени да правите това, което сте родени да правите.

O Google дърво, O Google дърво ...

Последното и най-важно нещо, на което мога да ви науча, е следното: когато не знаете как да направите нещо, незабавно отидете на google.com и попитайте. Щедростта на програмната общност ще ви изуми. Хиляди разработчици по целия свят свободно споделят своя код и знания на сайтове като GitHub и Stack Overflow, което означава, че всичко, което трябва да станете експерт по всеки език за програмиране, е стабилна интернет връзка и възможност за четене.

Добрите заявки от Google изискват малко практика за писане. Добрият шаблон е нещо подобно:

[език за програмиране] как да [нещо]

Например, искате да знаете как да премахнете елемент от масива в JavaScript? Няма да те науча. Опитайте да въведете това в Google: „JavaScript как да премахнете елемент от масива“. Първите няколко резултата трябва да ви дадат цялата необходима информация (с примери!)

синтез

Повечето широкомащабни приложения използват всички описани от мен понятия и ключови думи. Техният код се състои от хиляди и хиляди реда от код, всички изградени от същите тези основни елементи. И така, какво правят?

На основно ниво те получават входове (данни, които въвеждат кода от някъде другаде, като клавиатура на потребителя), трансформират ги (често чрез итерация над тях, извършване на математика върху тях или реорганизиране на техните свойства) и предоставяне на изходи ( данни, които оставят кода). Всяка компютърна програма може да бъде описана по отношение на нейните входове и изходи. Всеки език за програмиране има методи в своя API за приемане на входове и предоставяне на изходи.

Ледогенераторът е добра аналогия за компютърна програма. Неговите входове са вода и електричество (идват от API, известен като „общински комунални услуги“). Резултатът от него е лед (който се подава в API, известен като „висока чаша кокс“). Да те интересува какво се случва в средата? Не в момента, стига да вземете леда си без много проблеми. Но някой ден ледогенераторът ще се развали. И който трябва да го поправи, ще се интересува много от това колко прости, здрави и добре изградени са вътрешните му компоненти.

Задачата на кодера не е само да осигурява леда, въпреки че това е важно. Задачата на кодера е да се увери, че когато ледогенераторът се счупи, човекът, който трябва да го оправи, не развие експлозивна стрес-херния в процеса. Това е разликата между любителски кодер и професионалист.

заключение

Ya направи добро. Научих ви достатъчно основи за програмиране, че с малко въображение и много Googling можете да научите себе си на всичко, което трябва да знаете, за да пишете приложения. Ако искаш.

Все още може да се чувствате като че ли ви липсва някаква жизненоважна информация. И вие сте. Но никога няма да научите всичко това и това е добро начало.

Ако все още сте треперещи на крака, прегледайте още някои уроци с JavaScript. Има тонове безплатни онлайн. И след като се почувствате достатъчно уверени, за да напишете някакъв собствен код, преминете към изграждането на нещо. Няма заместител за изцапването на ръцете ви.

Късмет!

Допълнителна информация

  • Как да мислим като компютърен учен, от Алън Дауни, Джефри Елкнър и Крис Майерс. Това е по-добре написана и изчерпателна (но може би по-малко забавна) версия на написаното тук, насочена към езика за програмиране Python.

Прочетете тази история по-късно в Journal.

Събуждайте се всяка неделя сутрин, за да отбележите най-забележителните истории в Tech във вашата пощенска кутия. Прочетете бюлетина „Забележимото в Tech“.