Перайсьці да зьместу

Абмеркаваньне:Кляса (праграмаваньне)

Змест старонкі недаступны на іншых мовах.
Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі

Belamp (гутаркі | унёсак) (→Object Pascal/Delphi - прыбраў `;' перад `end') — прабачце, навошта? Факультатыўнасьць кропкі з коскай перад «end» выкліканая тым, што пры разборы коду праграмы трансьлятарам перад кампіляцыяй выкарыстоўваецца граматыка мовы Object Pascal, у якой кропка з коскай перад «end» непатрэбная, і таму лічыцца граматычнай памылкай. Але для падвышэньня ўзроўню чытэльнасьці коду, унівэрсальнасьці і большай зразумеласьці была наўмысна штучна ўведзеная кропка з коскай перад «end». Да таго ж у прыкладах на Object Pascal у іншых Вікіпэдыях кропка з коскай у гэтай пазыцыі таксама стаіць. Таму прапаную прывесьці аргумэнты, чаму яе варта тут прыбіраць, альбо адмяніць зьмены. --zedlik 13:38, 18 траўня 2007 (UTC)

Наколькі памятаю крынічны код VCL, Borland заўсёды выкарыстоўваў ; пасьля end. --EugeneZelenko 13:52, 18 траўня 2007 (UTC)
Так, сапраўды, гэта яшчэ адзін аргумэнт. Толькі, напэўна тут абдрукоўка: кропка з коскай не пасьля, а перад end. Але гэта не істотна. Толькі што паглядзеў крынічны код — паўсюль стаяць. --zedlik 14:10, 18 траўня 2007 (UTC)
"Факультатыўнасьць" кропкі з коскай перад end – гэта наступства таго, што ;разьдзяляльнік апэратараў, а не завяршальны сымбаль, як гэта мае месца быць у тым ліку ў C-падобных мовах. А ўлічваючы тое, што begin...end – не апэратары, а "апэратарныя дужкі", перад імі ; не патрэбная. Далей, калі б не існавала аптымізатараў, гэтая ; перад end (у адпаведнасьці з сынтаксысам) устаўляла бы туда залішні nop. З гэтага вынікае, што ; перад end непатрэбная, больш таго чытэльнасьць коду і зразумеласьць ніяк не зьмяняюцца ад наяўнасьці ці адсутнасьці яе.
P.S. http://www.moorecad.com/standardpascal/pascal.y – глядзіце апісаньне нетэрміналу statement_sequence.
P.P.S. Я ведаю, што ў пазьнейшых сваіх распрацоўках Вірт пайшоў іншым шляхам, але ж так ёсьць, адмаўляць гэта бессэнсоўна :) --Bełamp 13:48, 19 траўня 2007 (UTC)
Ну ў мяне было напісана тое самае, што і ў вас, калі глядзець зь іншага боку. Але пытаньне ня ў гэтым. Наконт чытэльнасьці патлумачу, што я меў на ўвазе. Калі чытаеш лістынг па паскалі, ; ўспрымаецца не як разьдзяляльнік, а як тое, чым мусіць скончвацца радок, і калі вока не знаходзіць там кропкі з коскай, узьнікае непаразуменьне, чаму гэта яе няма, і толькі калі бачыш ужо наступны радок, разумееш, што гэта перад end. Прыкладна тое самае з else, але ў гэтым выпадку ўжо ёсьць асацыяцыя, што калі быў then і не было begin, то побач можа быць else. І наконт унівэрсалнасьці. Асабіста ў мяне дзясяткі разоў была сытуацыя, што трэба дапісаць пару радкоў перад end, альбо ўзяць увесь кавалак коду і скапіяваць у іншае месца, і пасьля гэтага кампілятар выкідвае памылку. Пакуль ставіш курсор у патрэбнае месца, каб паставіць туды ;, ужо тройчы пасьпяваеш падумаць, а каму ўласна перашкаджала гэтая кропка з коскай перад end і чаму б яе не паставіць з самага пачатку.
Ня гледзячы на тое, што begin..end — апэратарныя дужкі, перад begin ; патрэбная. Адносна nop'а — зараз гэта ня мае практычна ніякай вагі, нават калі б не было аптымізатараў. Бо хай напрыклад ёсьць код на 1000 функцый (атрымліваецца, кілябайтаў на 900 — больш за сярэднястатыстычную), хай ў іх 5000 nop'аў, дык яны на 1GHz выканаюцца ўсе за 0,000005 сэкунды. Наўрад ці нехта гэта заўважыць. Пра спасылку нешта не зразумеў, таму што там statement_sequence у канцы і мае коску перад end.
Пра спасылку:
statement_sequence : statement_sequence semicolon statement
 | statement
 ;
Гэтыя радкі – апісаньне нетэрміналу statement_sequence, значыць, пасьлядоўнасьць statement'аў. Апісаньне складаецца з дзьвюх частак: проста statement (другая), ці ўжо існая пасьлядоўнасьць плюс кропка з коскаю (semicolon) плюс яшчэ адзін statement. Як бачыце, мы маем тэрмінал semicolon у сярэдзіне, а не ў канцы азначэння, бо ў канцы стаіць statement. Такім чынам, маем, што semicolon у дадзеным выпадку – разьдзяляльнік (separator).
Такім чынам, за тое, каб пакінуць кропку з коскай:
  1. Яна ў тую пазыцыю была ўведзеная наўмысна.
  2. У Borland, распрацоўніка Delphi і VCL, яна стаіць.
  3. Астатнія Вікіпэдыі — ангельская, украінская, польская, расейская, чэская... — усе ставяць кропку з коскай перад end.
  4. Лягічней глядзіцца, бо успрымаецца як разьдзяляльнік.
  5. Зьнікаюць пэўныя праблемы падтрымкі і паўторнага выкарыстаньня коду.
Каб прыбраць:
  1. ; насамрэч разьдзяляльнік, а не завяршальны сымбаль.
  2. Калі б не было аптымізатараў, праграма была б даўжэйшай на 1-5 Кб і выконвалася на 0,000001-0,000005 сэкунды даўжэй.
Няўжо апошнія два аргумэнты пакрываюць першыя пяць? Ну не ствараць жа галасаваньне. --zedlik 16:27, 19 траўня 2007 (UTC)
Паглядзіце сюды. Я не хачу пачынаць вайну, тым больш яна (вайна) непатрэбная, таму вяртайце, хоць як па мне дык лепш было без кропкі з коскаю :) --Bełamp 15:54, 20 траўня 2007 (UTC)
Ясна, пра statement_sequence ужо дагнаў, першапачаткова падумаў, што ; пад правілам зьяўляецца канстантай, а гэта проста разьдзяляльнік у Yacc-фармаце. Па спасылцы схадзіў, аказваецца, гэта спрадвечнае супрацьстаяньне :)) Хаця я калі казаў пра пункты 4 і 5, узяў іх толькі з уласнага досьведу. А ваяваць, дык сапраўды — нам зараз зусім іншае патрэбнае. Файна, што дамовіліся. Дзякуй! --zedlik 18:06, 20 траўня 2007 (UTC)

Ці няма памылкі ў назве?:) 80.94.234.152 16:19, 21 траўня 2007 (UTC)

Сапраўды, я тут крыху паглядзеў, слова «кляса» паходзіць ад лацінскага слова «classis», якое там мае жаночы род. Але ў мностве значэньняў, якія мае слова «classis», адсутнічаюць значэньні, зьвязаныя, напрыклад, з матэматыкай або праграмаваньнем[1], але ёсьць іншыя. Хаця на маю думку, гэта ня так істотна, бо яны дадаліся тады, калі лаціна ўжо зьнікла з ужываньня. У польскай мове[2], дзе гэтае слова таксама паходзіць ад лацінскага, таксама ў нямецкай[3], усе значэньні гэтага слова маюць жаночы род і пішуцца аднолькава.
А пачалося ўсё з таго, што дагэтуль у беларускай мова «кляса» ўжывалася як нумар году навучаньня ў школе і як пласт грамадзтва. Таму прапаную замяніць усе «клясы» мужчынскага роду на «клясы» жаночага ва ўсіх сфэрах ужываньня слова, бо так будзе правільней і лягічней. Хто як лічыць? --zedlik 23:50, 26 траўня 2007 (UTC)
Абсалютна непатрэбныя ваганні: слова гэта адно. Пішацца заўсёды аднолькава. Mienski 08:00, 27 траўня 2007 (UTC)