Как называть переменные и функции, чтобы вас уважали бывалые программисты

Зачем как-то по-особому называть переменные и функции

Вам по-любому при­дёт­ся как-то назвать пере­мен­ные и функ­ции. С точ­ки зре­ния язы­ков про­грам­ми­ро­ва­ния, пере­мен­ные могут быть почти любы­ми: хоть a, b и c, хоть SuperImportantVariable3000. То же с функ­ци­я­ми: они могут быть супер­ко­рот­ки­ми типа yo(), а могут быть неве­ро­ят­но замо­ро­чен­ны­ми вро­де getNewPageNumberAndNavigateToThatPage(). Как ска­же­те — так и будет. Тем более что совре­мен­ные тек­сто­вые редак­то­ры дела­ют авто­под­ста­нов­ку всех назва­ний, так что вам даже не при­дёт­ся их запоминать.

Но есть три момента:

  • Через две неде­ли вы уже забу­де­те, как был устро­ен ваш код. Если вы напи­са­ли про­грам­му сего­дня и вер­ну­лись к ней через 14–21 день, вы уже не смо­же­те на ходу вспом­нить, за что отве­ча­ют раз­ные кус­ки кода. И если по пере­мен­ной или функ­ции будет понят­но, что она дела­ет, то вы себе очень упро­сти­те задачу.
  • С вашим кодом обя­за­тель­но будет рабо­тать кто-то дру­гой. Вы сде­ла­ли класс­ную про­грам­му, она функ­ци­о­ни­ру­ет, и вы при­гла­ша­е­те кого-нибудь тоже пора­бо­тать над ней. Он откро­ет ваш код и дол­жен будет в нём разо­брать­ся. Если пере­мен­ные и функ­ции назва­ны хоро­шо, ему будет лег­ко всё понять и он быст­ро вам поможет.
  • Это вли­я­ет на при­ём на рабо­ту. Если реши­те свя­зать свою жизнь с про­грам­ми­ро­ва­ни­ем, по назва­ни­ям ваших пере­мен­ных и функ­ций будут судить о ваших каче­ствах как спе­ци­а­ли­ста. Про­грам­ма может, конеч­но, рабо­тать и без кра­си­во­го назва­ния пере­мен­ных, а вот вас в ком­па­нию могут и не позвать.

Как называть переменные

Когда начи­на­ешь писать код, у тебя про­стые про­грам­мы, к кото­рым нуж­ны про­стые пере­мен­ные: screen, score, text и так далее. Потом про­ек­ты ста­но­вят­ся слож­нее, и пере­мен­ные нуж­ны всё более слож­ные: totalScore, totalScoreBefore, totalScoreAfter, totalScoreMaxProgressiveLimit и тому подоб­ные. Тут надо оста­но­вить­ся и поду­мать вот о чём.

Чем длин­нее назва­ние пере­мен­ной, тем тяже­лее её набрать без оши­бок. Спа­са­ет авто­под­ста­нов­ка, но если её нет — почти навер­ня­ка ваш код не поле­тит из-за опечатки.

Если вы пише­те на JavaScript, то будет ещё хуже: так как он гене­ри­ру­ет пере­мен­ные на ходу, ошиб­ка в пере­мен­ной totalScoreMaxProgresLimit у него не вызо­вет подо­зре­ний. Он создаст новый эле­мент с этим назва­ни­ем, и у вас будут две пере­мен­ные — одна пра­виль­ная, дру­гая непра­виль­ная. Про­грам­ма запу­стит­ся, но рабо­тать будет непредсказуемо.

Поэто­му стре­ми­тесь выби­рать корот­кие назва­ния пере­мен­ных, кото­рые при этом понят­ны без глу­бо­ко­го вни­ка­ния. Напри­мер, totalScore — ито­го­вый счёт в игре, maxWidth — мак­си­маль­ная шири­на. Если есть необ­хо­ди­мость хра­нить мно­го пере­мен­ных на раз­ных полоч­ках, в груп­пах или еще какими-то пач­ка­ми, изу­чи­те поня­тия объ­ек­тов и клас­сов в JavaScript — это то, что вам нужно.

Как называть функции

Функ­ция — это под­про­грам­ма внут­ри вашей про­грам­мы, кото­рую вы часто исполь­зу­е­те. Напри­мер, мож­но напи­сать функ­цию getNumber(), кото­рая будет выда­вать слу­чай­ное чис­ло в нуж­ном вам диа­па­зоне. Или ска­зать setTimer() — и где-то внут­ри про­грам­мы уста­но­вит­ся тай­мер, кото­рый выпол­нит то, что необ­хо­ди­мо, по завер­ше­нии отсчё­та времени.

Функ­ция может про­сто сде­лать свою рабо­ту, а может вер­нуть при этом какое-то зна­че­ние, пере­мен­ную, мас­сив или объ­ект. Напри­мер, мож­но дать под­про­грам­ме стро­ку тек­ста, напи­сать алго­ритм пере­во­да на ино­стран­ный язык, и она будет воз­вра­щать пере­ве­дён­ный текст.

У функ­ций тоже могут быть какие угод­но назва­ния. Но обыч­но они будут при­мер­но такими:

  • shuffle() — ско­рее все­го, пере­ме­ша­ет эле­мен­ты массива;
  • saveScore() — сохра­нит куда-то счёт игры;
  • kill() — убьёт что-то;
    spawn() — создаст что-то;
  • loadDatabase() — загру­зит какую-то базу дан­ных в память;
  • makeBackup() — сде­ла­ет резерв­ную копию каких-то дан­ных и, ско­рее все­го, сохра­нит её куда следует;
  • getSpeed() — выяс­нить, с какой ско­ро­стью что-то дви­жет­ся. Функ­ция вер­нёт скорость;
  • getUserName() — что-то про­изой­дёт, и функ­ция вер­нёт имя пользователя;
  • getSessionId() — вер­нёт номер сессии;
  • setTimeout() — задать задерж­ку, после кото­рой про­изой­дёт какое-то действие;
  • setSpeed() — задать чему-то скорость.

Вы заме­ти­те, что из назва­ния функ­ции мож­но понять, что она сде­ла­ет и сооб­щит ли какой-то резуль­тат. Напри­мер, getScore() вер­нёт счёт игры, setScore() задаст счёт игры и ниче­го не вер­нёт, а clearScore() обну­лит счёт игры и тоже ниче­го не вернёт.

А что с заглавными буквами?

В про­грам­ми­ро­ва­нии есть два под­хо­да к оформ­ле­нию функ­ций и пере­мен­ных: camelCase и snake_case.

В camelCase пере­мен­ные из несколь­ких слов соеди­ня­ют­ся без про­бе­ла, все новые сло­ва пишут­ся с заглав­ной: getMoney, renderToFrame, removeFromBase и т. д. Этот под­ход реко­мен­ду­ет­ся в JavaScript. Обра­ти­те вни­ма­ние: назва­ния пере­мен­ных и функ­ций в JavaScript чув­стви­тель­ны к заглав­ным, то есть пере­мен­ные getmoney и getMoney — это раз­ные переменные.

Snake_case — это когда сло­ва скле­и­ва­ют­ся ниж­ним под­чер­ки­ва­ни­ем. Это чаще исполь­зу­ют в клас­сах CSS. При­ме­ры: header_marginal, form_success.

Выби­рай­те тот под­ход, кото­рый харак­те­рен для выбран­но­го вами язы­ка. Помни­те, что потом ваш код будут читать дру­гие люди, и видеть необыч­но назван­ные функ­ции и пере­мен­ные им будет тяжеловато.

Как не надо называть ни переменные, ни функции

Про­грам­ми­сты не сове­ту­ют назы­вать пере­мен­ные и функ­ции кре­а­тив­но, напри­мер crazyUnicorn или wonderfulWorld(). Из назва­ний этих функ­ций непо­нят­но, что они дела­ют, воз­вра­ща­ют ли они что-то и вооб­ще зачем нужны.

Но, напри­мер, unicornCount — нор­маль­ная пере­мен­ная с коли­че­ством еди­но­ро­гов. А initWorld() — функ­ция, кото­рая созда­ёт мир ком­пью­тер­ной игры.

Не назы­вай­те функ­ции и пере­мен­ные сло­ва­ми function или variable. MyVar и superFunction() — пло­хие вари­ан­ты, пото­му что вы сами же через две неде­ли забу­де­те, что эти шту­ки делают.

Луч­ше не назы­вать функ­ции и пере­мен­ные по-русски типа solnce или KYCb() — забу­де­те потом, как они пра­виль­но пишут­ся. А когда ваша про­грам­ма ста­нет меж­ду­на­род­но при­знан­ной, раз­ра­бот­чи­ки побла­го­да­рят вас. При этом: если ваша функ­ция дела­ет «кусь», что­бы это ни зна­чи­ло, ее мож­но назвать bite() или getPiece().

Не делай­те назва­ния слиш­ком сек­рет­ны­ми: пере­мен­ные p, m, t, z или функ­ция hm() — это слиш­ком корот­ко. Исклю­че­ние — когда вы пише­те цик­лы: там исполь­зу­ют­ся пере­мен­ные типа i, n, p — с их помо­щью счи­та­ют, сколь­ко раз цикл уже отра­бо­тал. Но эти пере­мен­ные созда­лись, испол­ни­ли свою роль и уни­что­жи­лись сра­зу после закры­тия цик­ла, боль­ше к ним не обращаются.

Общее пра­ви­ло: назы­вай­те пере­мен­ные и функ­ции так, как буд­то их будут читать совер­шен­но незна­ко­мые люди. Буд­то зав­тра вам в отпуск, а за вас код будет доде­лы­вать ваш кол­ле­га из Индии. Он дол­жен понять ваши пере­мен­ные и функ­ции. Если смо­же­те так сде­лать — вас ото­рвут с рука­ми в любой компании.