Псст! Ево зашто је РеасонРеацт најбољи начин за писање Реацт-а

Да ли користите Реацт за изградњу корисничких интерфејса? Па и ја сам. А сада ћете научити зашто бисте требали писати своје Реацт апликације помоћу РеасонМЛ-а.

Реацт је прилично згодан начин за писање корисничких интерфејса. Али, можемо ли учинити још хладнијим? Боље?

Да бисмо га побољшали, прво морамо да идентификујемо његове проблеме. Дакле, шта је главни проблем Реацт-а као ЈаваСцрипт библиотеке?

Реацт није првобитно развијен за ЈаваСцрипт

Ако детаљније погледате Реацт, видећете да су неки од његових главних принципа страни ЈаваСцрипт. Хајде да разговарамо о непроменљивости, принципима функционалног програмирања и систему система посебно.

Непромењивост је један од главних принципа Реацт-а. Не желите да мутирате реквизите или стање јер ако то учините, може доћи до непредвидивих последица. У ЈаваСцрипт-у немамо непромењивости ван оквира. Своју структуру података одржавамо непромењивом конвенцијом или користимо библиотеке попут непромењивих ЈС да бисмо је постигли.

Реацт се заснива на принципима функционалног програмирања јер су његове апликације композиције функција. Иако ЈаваСцрипт има неке од ових функција, као што су првокласне функције, то није функционалан програмски језик. Кад желимо написати неки лијеп декларативни код, потребно је користити вањске библиотеке попут Лодасх / фп или Рамда.

Па, шта је са системом типа? У Реацт-у смо имали ПропТипес. Користили смо их за опонашање типова у ЈаваСцрипт-у јер то није језик који је статички укуцан. Да бисмо искористили предности напредног статичког куцања, поново морамо користити спољне зависности, као што су Флов и ТипеСцрипт.

Реакција и поређење ЈаваСцрипта

Као што видите, ЈаваСцрипт није компатибилан са суштинским принципима компаније Реацт.

Постоји ли други програмски језик који би био компатибилнији са Реацтом него ЈаваСцрипт?

Срећом, имамо РеасонМЛ.

У Разлогу, измијењамо се из оквира. Будући да је заснован на ОЦамл, функционалном програмском језику, имамо такве карактеристике уграђене и у сам језик. Разлог нам такође обезбеђује систем јаког типа.

Поређење Реацт, ЈаваСцрипт-а и разлога

Разлог је компатибилан са основним принципима компаније Реацт.

Разлог

То није нови језик. То је алтернатива синтакси и ланцу алата сличних ЈаваСцрипт-у за ОЦамл, функционални програмски језик који постоји већ више од 20 година. Разлог су створили Фацебоок програмери који су већ користили ОЦамл у својим пројектима (Флов, Инфер).

Разлог са синтаксом сличном Ц-у чини ОЦамл приступачним за људе који долазе из главних језика као што су ЈаваСцрипт или Јава. Омогућава вам бољу документацију (у поређењу са ОЦамл-ом) и растућу заједницу око ње. Поред тога, олакшава се интеграција са постојећом ЈаваСцрипт кодом.

ОЦамл служи као помоћни језик за Разлог. Разлог има исту семантику као и ОЦамл - само је синтакса другачија. То значи да можете написати ОЦамл користећи синтаксу сличну Реасон-овој ЈаваСцрипт. Као резултат тога, можете да искористите сјајне карактеристике ОЦамл-а, као што су његов снажни систем типова и подударање образаца.

Погледајмо пример синтакса Разума.

нека физзбузз = (и) =>
  склопка (и мод 3, и мод 5) {
  | (0, 0) => "ФиззБузз"
  | (0, _) => "Физз"
  | (_, 0) => "Бузз"
  | _ => стринг_оф_инт (и)
  };
за (и у 1 до 100) {
  Јс.лог (физзбузз (и))
};

Иако у овом примјеру користимо подударање образаца, он је још увијек прилично сличан ЈаваСцрипт-у, зар не?

Међутим, једини употребљиви језик прегледача и даље је ЈаваСцрипт, што значи да га морамо компајлирати.

БуцклеСцрипт

Једна од моћних карактеристика Реасон-а је БуцклеСцрипт компајлер који узима ваш Реасон код и компилира га у читљив и изведљив ЈаваСцрипт уз сјајно уклањање мртвог кода. Читавост ће вам бити драго ако радите у тиму са којим нису сви упознати са разлогом, јер ће они и даље моћи да читају састављени ЈаваСцрипт код.

Сличност са ЈаваСцрипт-ом је толико блиска да преводилачки код уопште не треба да мења неки од разлога Реасон-а. Дакле, можете уживати у предностима статички куцаног језика без икаквих промена у коду.

нека дода = (а, б) => а + б;
додати (6, 9);

Ово је валидан код и у Разлогу и у ЈаваСцрипт-у.

БуцклеСцрипт се испоручује са четири библиотеке: стандардном библиотеком под називом Белт (ОЦамл стандардна библиотека није довољна) и везама за ЈаваСцрипт, Ноде.јс и, ДОМ АПИ.

Пошто се БуцклеСцрипт темељи на компајлеру ОЦамл, добићете оштар брзу компилацију која је много бржа од Бабел-а и неколико пута бржа од ТипеСцрипт-а.

Саставимо наш алгоритам ФиззБузз написан у Разлогу за ЈаваСцрипт.

Разлог компилације кода у ЈаваСцрипт-у путем БуцклеСцрипт-а

Као што видите, резултирајући ЈаваСцрипт код је прилично читљив. Чини се да га је написао програмер ЈаваСцрипт.

Разлог не само да се компајлира у ЈаваСцрипт, већ и у матични и бајт код. Дакле, можете написати једну апликацију користећи синоним Реасон и бити у могућности да је покренете у прегледачу на МацОС, Андроид и иОС телефонима. Постоји игра названа Гравитрон Јаред Форситх која је написана у Разлогу и може се изводити на свим платформама које сам управо поменуо.

ЈаваСцрипт интероп

БуцклеСцрипт такође нам омогућава ЈаваСцрипт интероперабилност. Не само да можете да залепите свој радни ЈаваСцрипт код у своју код Реасон, већ и ваш разлог кода може да делује у интеракцији са тим ЈаваСцрипт кодом. То значи да код разлога можете лако интегрисати у постојећу ЈаваСцрипт кодну базу. Штавише, можете да користите све ЈаваСцрипт пакете из НПМ екосистема у вашем коду разлога. На пример, можете комбиновати Флов, ТипеСцрипт и Реасон заједно у једном пројекту.

Међутим, то није тако једноставно. Да бисте користили ЈаваСцрипт библиотеке или код у Реасону, прво га морате пренијети на Реасон путем везова Реасон. Другим речима, потребни су вам типови нетипизованог ЈаваСцрипт кода да бисте могли да искористите предност система јаког типа Реасон.

Кад год требате да користите ЈаваСцрипт библиотеку у вашем коду разлога, проверите да ли је библиотека већ пренесена у Реасон претраживањем базе података Редек индекса (Редек). То је веб локација која обједињује различите библиотеке и алате написане у Библиотеци разлога и ЈаваСцрипт са везама Разума. Ако сте тамо пронашли своју библиотеку, можете је једноставно инсталирати као зависност и користити је у својој апликацији Реасон.

Међутим, ако нисте пронашли своју библиотеку, морат ћете сами написати Везе разлога. Ако тек почињете са Разлогом, имајте на уму да везивање писања није ствар са којом желите да почнете, јер је то једна од изазовнијих ствари у екосистему Реасон.

Срећом, управо пишем пост о писању Везања разлога, зато будите праћени!

Кад вам треба нека функционалност из ЈаваСцрипт библиотеке, не морате да пишете Везе разлога за библиотеку као целину. То можете учинити само за функције или компоненте које требате користити.

РеасонРеацт

Овај чланак говори о писању Реацт ин Реасон, што можете учинити захваљујући библиотеци РеасонРеацт.

Можда сада размишљате „још увек не знам зашто бих требало да користим Реацт у разуму.“

Већ смо споменули главни разлог за то - Разлог је компатибилнији са Реацтом него ЈаваСцрипт. Зашто је компатибилнији? Јер је Реацт развијен за Разлог, тачније за ОЦамл.

Пут ка РеасонРеацт

Први прототип Реацта развио је Фацебоок и написао га је Стандард Мета Лангуаге (СтандардМЛ), рођак ОЦамла. Затим је премештен у ОЦамл. Реацт је такође преписан на ЈаваСцрипт.

То је зато што је цео веб користио ЈаваСцрипт, и вероватно није било паметно рећи, „сада ћемо уградити корисничку сучеље у ОЦамл.“ И успело је - Реацт ин ЈаваСцрипт је широко усвојен.

Тако смо навикли да Реагирамо као ЈаваСцрипт библиотека. Реагирајте заједно са другим библиотекама и језицима - Елм, Редук, Рецомпосе, Рамда и ПуреСцрипт - функционално програмирање у ЈаваСцрипт-у постаје популарно. Са порастом Флов и ТипеСцрипт-а постало је популарно и статичко куцање. Као резултат тога, парадигма функционалног програмирања са статичким типовима постала је мејнстрим у свету фронт-енд-а.

Током 2016. године, Блоомберг је развио и отворени извор БуцклеСцрипт, компајлер који трансформише ОЦамл у ЈаваСцрипт. То им је омогућило да напишу сигуран код на предњем крају помоћу система јаког типа ОЦамл. Узели су оптимизовани и блиставо брзи ОЦамл преводилац и заменили његов бацк-енд генерисање матичног кода за ЈаваСцрипт генерисање.

Популарност функционалног програмирања заједно са издавањем БуцклеСцрипт створила је идеалну климу за Фацебоок да се врати оригиналној идеји Реацт-а, која је првобитно написана на МЛ језику.

РеасонРеацт

Они су узели ОЦамл семантику и ЈаваСцрипт синтаксу и створили Разлог. Они су такође креирали омот Реасон-а око Реацт-а - РеасонРеацт библиотека - са додатним функцијама као што је инкапсулација Редук принципа у изванредне компоненте. Радећи то, вратили су Реацт својим првобитним коренима.

Моћ Реагирања у разуму

Када је Реацт дошао у ЈаваСцрипт, прилагодили смо ЈаваСцрипт у складу са потребама Реацт-а увођењем различитих библиотека и алата. То је значило и више зависности за наше пројекте. Да не спомињемо да су ове библиотеке још увек у развоју и да се промене промене редовно уводе. Стога ове зависности требате одржавати пажљиво у својим пројектима.

То је додало још један слој сложености развоју ЈаваСцрипта.

Ваша типична Реацт апликација имаће најмање ове зависности:

  • статичко куцање - Флов / ТипеСцрипт
  • непроменљивост - непроменљив ЈС
  • усмјеравање - РеацтРоутер
  • форматирање - љепше
  • облога - ЕСЛинт
  • помоћна функција - Рамда / Лодасх

Сада заменимо ЈаваСцрипт Реацт за РеасонРеацт.

Да ли су нам потребне све ове зависности?

  • статичко куцање - уграђено
  • непромењивост - уграђена
  • усмјеравање - уграђено
  • форматирање - уграђено
  • облога - уграђена
  • помоћне функције - уграђене

О овим уграђеним функцијама можете сазнати у мом другом посту.

У РеасонРеацт апликацији вам нису потребне ове и многе друге зависности, јер су многе кључне функције које олакшавају ваш развој већ укључене у сам језик. Стога ће одржавање ваших пакета постати лакше и с временом нећете имати сложеност.

То је захваљујући ОЦамл-у који је стар више од 20 година. То је зрео језик са свим основним принципима на месту и стабилан.

Упаковати

У почетку су творци Разума имали две могућности. Да узмете ЈаваСцрипт и некако га побољшате. Радећи то, они би се морали суочити и са њеним историјским теретима.

Међутим, они су кренули другим путем. Они су узели ОЦамл као зрели језик са сјајним перформансама и модификовали га тако да подсећа на ЈаваСцрипт.

Реацт се такође заснива на принципима ОЦамл-а. Због тога ћете добити много боље искуство за програмере када га користите са разлогом. Реацт ин Реасон представља сигурнији начин израде компоненти Реацт-а, јер вам систем снажног типа даје леђа и не требате да се бавите већином ЈаваСцрипт (наслеђених) проблема.

Шта је следеће?

Ако долазите из света ЈаваСцрипта, биће вам лакше да започнете са Разлогом, због његове синтаксичке сличности са ЈаваСцрипт-ом. Ако сте програмирали у Реацт-у, биће вам још лакше јер можете користити све своје знање Реацт јер РеасонРеацт има исти ментални модел као Реацт и врло сличан ток рада. То значи да не морате почети од нуле. Научићете Разлог како се развијате.

Најбољи начин да почнете користити Разлог у својим пројектима је то поступно. Већ сам напоменуо да можете узети разлог разлога и користити га у ЈаваСцрипт-у, и обрнуто. Исто можете учинити и са РеасонРеацт-ом. Узимате компоненту РеасонРеацт и користите је у својој Реацт ЈаваСцрипт апликацији и обрнуто.

Овај инкрементални приступ одабрали су програмери компаније Фацебоок који интензивно користе Реасон у развоју апликације Фацебоок Мессенгер.

Ако желите да направите апликацију помоћу Реацт ин Реасон и научите основе Реасон-а на практичан начин, погледајте мој други чланак где ћемо заједно израдити игру Тиц Тац Тое.

Ако имате било каквих питања, критика, запажања или савета за побољшање, слободно напишите коментар или ме контактирајте преко Твиттера или мог блога.