Evo0s писал(а):я это к тому что Option Explicit не влияет ни на какие глюки как ты вырожаешся.
Ох. Мы уже тысячу раз это проходили и видели. Людей, которые только изучают программирование и пока только учатся, с их же слов. И они все ведут себя одинаково. Вряд ли они представляют, насколько одинаково, но уж нам то это заметно хорошо.
И в частности есть две вещи, которые входят в
тысячу придурей начинающего программиста.
Первая придурь — убеждённость в том, что код пишется для того, чтобы программа по нему выполнялась. Соответственно, выполнение программы и её поведение считается первичным (по значимости), а код, который привёл к такому поведению — вторичным. Из этой придури вырастает самая страшная уже не придури, а дурь начинающих программистов: программист считает, что если программа работает именно так, как было задумано, то значит код этой программы объявляется годным (рабочим, пригодным, допустимым, хорошим, в конце-концов). В случае, если код написан, а программа не работает — код всегда считается плохим. А в случае если программа работает, и даже работает хорошо и быстро — код считается как минимум хорошим. Это самое опасное заблуждение, ибо мудрый программист холоден в своём мышлении и вообще мало выводов делает о коде. По крайней мере, точно не делает выводов на основании того, как отработала программа по обсуждающемуся коду. Ибо может быть хороший код, безумно хороший код, который здесь и сейчас не работает в силу каких-то третьих причин (зависящих от окружения). И точно также может быть дико отвратительный код, который вдруг оказывается рабочим, но только здесь и сейчас, потому что в своей работе такой код полагается всецело на удачу и на случайные факторы, которые должны сложиться единственным подходящим образом, чтобы такой код хоть как-то смог работать. Поэтому нормальный программист судит о том, хороший код или плохой только на основании самоличного прочтения и анализа кода.
Можно легко вычислить первую придури задав программисту простой вопрос: для чего пишется код? Или «для кого пишется код». Программист, мозг которого поражён придурью первого типа (благо, с опытом в большинстве случаев всё это проходит) искренне убеждён, что код он пишется в буквальном смысле для компилятора, а в широком смысле — для того, чтобы программа работала. Это самое большое заблуждение об исходном коде.
Отношение к коду должно быть ни как к инструкции для компьютера, ни как к инструкции для компилятора. Отношение к коду должно быть как к документу из
конструкторской документации. Конструкторская документация делается не для станков, а для людей. В конце-концов, она делается даже только для тех людей, которые по ней будут изготавливать детали и изделия, но и для самих конструкторов, которые будут работать со своей же документацией дальше, развивая идею.
Глупые же программисты пишут код не для себя, не для других программистов, а для компилятора. Отношение к коду как к документации, как к документу (пусть и техническому) у них никогда нет. Поэтому в их коде нельзя встретить комментарии: поскольку комментарии в коде не приводят ни к каким полезным действиям со стороны компьютера, поскольку они не влияют на поведение программы, поскольку компилятор их игнорируют — такие программисты искренне считают, что комментарии не нужны. Они недоумевают: зачем их писать, тратить на них время? Поэтому комментариев в их коде обычно нет.
В моём коде комментарии могут занимать долю в 80 процентов. Я пишу в них даже очевидные для себя на момент написания код вещи, потому что всегда рассчитываю на то, что код будет читать совершенно посторонний человек, даже если твёрдо знаю, что никто больше его читать не будет. Я не самоуверенный, а глупые программисты — чертовски сомоуверенные.
Я знаю только то, что я ничего не знаю. Поэтому в коде я отмечаю все моменты, которые должны быть отмечены, даже если есть какая-то уверенность, что я их не забуду.
Это касается и имён переменных, и комментариев, и самого принципа построения кода. Это касается отсутствия магических констант, кстати, да.
Вторая придурь состоит в том, что в то время как компилятор является вашим лучшим другом, люди считают его своим врагом. Эта придурь тесно связана с первой: ибо люди убеждены, что код призван для того, чтобы определять поведение будущей программы, а ведь немаловажная роль кода — контроль логической непротиворечивости замыслов программиста. Вот я точно знаю, что во всей цепчке я, — человек, — самое ненадёжное звено. И поэтому я могу накосячить. И я обязательно накосячу. И поэтому мне жизненно необходим инструмент, который
высветит мне все мои косяки. Они обязательно будут, no doubt. Поэтому компилятор мой лучший друг, потому что он строг ко мне, и он как сито просеивает всю мою человеческую глупость и ненадёжность. Нет ничего более радостного, чем ситуация, когда компилятор жалуется на ошибку в вашем коде и открывается его компилировать. Потому что жалуясь, он указывает на плохое место в коде, а если бы он этого не делал, проблема бы обязательно вылезла потом, а найти её было бы целым подвигом. Но дурные программисты в лучших традициях
парадокса Даннига—Крюгера убеждены, что они-то намного умнее бездушной машины, и все крики со стороны компилятора воспринимаются не более, чем раздражающими.
Это хорошо видно: достаточно поискать, сколько людей идут в поиск по фразе, а так же сколько людей создают топики на формах, содеражащие фразы «как избавиться от ошибки тра-ля-ля-я» — видно из постановки вопроса. Люди написали код, и теперь они не хотят ни о чём думать и не хотят ничего видеть, кроме успешно работающего собственного кода. Поэтому они хотят избавиться от ошибки; компилятор для них — настырная, мешающая работать (а не помогающая!) сущность.
Сколько людей спрашивают, как избавиться от ошибки? А при этом сколько людей спрашивают, в чём причина и глубинный смысл этой ошибки? Доходит до смешного: даже на этот форум пачками приходили люди, вываливали свой код (который, естественно, не работает — иначе бы не приходили, даже если бы код был отвратительным) и говорили: «ох и ай, у меня ничего не получается, выскакивает ошибка». При этом в 99 случаях из ста эти люди не писали, какая именно ошибка. Всё правильно — люди воспринимают ошибку не как великую помощь им же, а как великую преграду им же. Люди спрашивают, как избавитсья от сообщения об ошибки, а не в чём природа допущенной ими ошибки. Для них написание кода и избавление от сообщения об ошибке — это процесс попадания в сакральный набор требований, нечто вроде соблазнения женщины — им надо попасть в нужную волну, любыми способами, пусть даже случайно, лишь бы сработало. До обдумывания правильности методологии собственных действий и собственного подхода к работе — дело не доходит.
Так вот.
Evo0s писал(а):я это к тому что Option Explicit не влияет ни на какие глюки как ты вырожаешся.
Option Explicit, конечно же, не влияет на глюки. На глюки влияеют ошибки в твоём коде. А
Option Explicit влияет на то, будет ли компилятор (как истинный помощник и друг) указывать на ошибки, или он будет (как настоящий предатель) о них умалчивать. Кем надо быть, а вернее, как надо смотреть на мир, чтобы не понимать этой простой вещи — я не знаю.
Ну и по первому: приведённый код просто ужасен. В беспорядочном коде сложно найти ошибки, потому что даже правильные вещи выглядят как неправильные.
Кроме этого, в приведённом коде есть ошибка: каждый полученный кусок пишется в начало файла. Это значит, что если файл отправленный одним куском придёт на другой конец в виде десяти кусков, они будут последовательно перезаписаны в начало целевого файла, и целевой файл будет в 10 раз меньше, чем нужно, и будет содержать последний (в хронологическом порядке) полученный кусок.
И в этом коде нет никакого контроля за тем, сколько раз приходили куски и каков их суммарный объём. Поэтому единственным способом узнать это можно считать измерение размера целевого файла на целевом хосте.
Тогда причина, по которой ты считаешь, что приходит меньше, чем надо — понятна (это ошибка в твоём коде).
Если ты говоришь, что есть какие-то ошибки, о которых ты знаешь, и дело не в них, то будь добр: во-первых выкладывай правильный код, в котором не будет ошибок, о которых ты знаешь, а во-вторых выкладывай код, в котором предусмотренны средства по контролю за правильностью развития ситуации. Или пусть он их не содержит, но ты должен приводить какие-то вразумительные доводы в пользу того, что всё идёт не так, как надо. Проще говоря: ты должен тупо сказать, на основании чего ты решил, что всё работает не так, как по твоему(!) должно.
Ведь очень часто дело не в коде, а в неверном представлении вопрошающего о том, как оно всё действительно должно быть.