سلام
1-empty یعنی متغیر ما مقدار اولیه نداره و در واقع خالیه اما null یعنی متغیر ما مقدار معتبری نداره . همون مثال هارد دیسک آقای Di Di بسیار جالب بود .
2-توابع LOF و FileLen طول فایل رو به بایت برمیگردون اما تفاوت اصلیشون اینه که اگر شما تغییری در فایل باز شده بدی طول فایلت تغییر میکنه ، تابع LOF قابلیت اینو داره که طول فعلی فایل شما رو بهت بده (بعد از تغییرات) مثلا شما یک فایل رو باز میکنی و چندین بار محتویاتش رو تغییر میدی حالا میخوای بفهمی الان فایلت چقدر طول داره در نتیجه از LOF استفاده میکنی اما FileLen تغییرات شما رو نادیده میگیره و همون طول فایل اولیه در زمان باز شدن رو به شما برمیگردونه !
3-تفاوت اصلی Len با LenB در متغیر های معمولی و غیر String محسوس نیست پس از نظر کارایی برای شما یک معنا میدن . اگر درست حدس زده باشم اگر TelNum یک متغیر غیر string باشه جواب هر دو تابع روی اون متغیر یکسان خواهد بود !
اما 2 حالت متفاوت داریم ...... حالت اول اگر متغیر String باشه دوتا تابع روش متفاوت عمل میکنن چون یکیشون طول رشته رو میده و یکشیون تعداد بایت هایی که در حافظه اشغال کرده که خب صددرصد متفاوت خواهند بود .
حالت دومش هم در زمانی که شما خودتون یک Type میسازید . مسئله خاصی به نام DWord alignment ( تنظیم و فاصله گذاری بایت ها در حافظه ) هست که اگرچه در VB بشکل اتوماتیک انجام میشه فقط با وجود تابع LenB قابل درک کردن هست . مثال پایین رو ببینید :
کد:
Type Generic
FirstName as String * 5
LastName as String
ChildrenAges (1 to 5) as Byte
End Type
حالا دو تا تابع رو صدا میزنیم و جواب میگیریم :
کد:
LenB(Generic) = 21
Len (Generic) = 14
در زمان صدا زدن تابع Len ، متغیر FirstName دارای طول 5 ، متغیر LastName دارای طول 4 ( این طول ثابت متغیرهای String بدون محدوده هست علت وجود اون یک ساختار درونی و مخفی هست با نام String descriptor ) و متغیر آخر شما ChildrenAges دارای طول 5 هست که مجموعا میشن 14 تا .
اما در زمان صدا زدن تابع LenB ( با احتساب عمل DWord alignment ) ، متغیر FirstName دارای طول 8 بایت ( 4 حرف یونیکد که هرکدوم 2 بایت هستند ) متغیر LastName دارای طول 8 بایت (2 بایت باقی موند از متغیر قبلی + 2 بایت فاصله + 4 بایت طول ساختمان String descriptor ) و متغیر آخر شما ChildrenAges دارای طول 5 بایت هست که مجموعا میشن 21 بایت .
در اینجا ، تابع LenB مقدار طول Type شما رو در حافظه برمیگردونه بعد از اینکه عملیات DWord alignment در حافظه روی اون انجام شده در صورتیکه Len فقط طول واقعی یا اصلی Type شما رو برمیگردونه . وی بی در زمان خوندن و نوشتن Type ها روی دیسک هوشمندانه عمل میکنه و تبدیلات میانی رو طوری انجام میده که شما متوجه نشین پس با خیال راحت میتونین Type های خودتون رو توی فایل بنویسید و بخونید . این هم نکته ای بود که بد نیست بدونمیم

. لینک زیر مثال و توضیحات کاملی ارائه کرده :
http://support.microsoft.com/kb/137729
گويند بهشت و حور و کوثر باشد .. جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه .. نقدي ز هزار نسيه خوشتر باشد