اشتباهات رایج برنامه نویسی در بیسیک
189
۲ سال پیش
0

اشتباهات رایج برنامه نویسی در بیسیک

سلام
توی این پست در مورد یه سری اشتباهات کدنویسی در خانواده بیسیک مخصوصا بیسیک4اندروید صحبت میکنیم.
یه سری اصطلاحات توی برنامه نویسی داریم که اشاره به موضوعاتی در برنامه نویسی داره که اگه بدونید خالی از لطف نیست.
برای مثال ما توی این پست در مورد اصطلاح code smell صحبت خواهیم کرد.
به فارسی بوی کد گفته میشه و در واقع یه الگوی رایجی هست که میتونه نشان دهنده وجود مشکلی در کد باشه.
این الگو رو یه بنده خدایی درست کرده و هنوز هم استفاده میشه.
البته منظورش اشاره به مشکل خاصی نیست که منجر به کار نکردن کد باشه بلکه حفظ کردن اون یا ظریف بودنش یا به قولی شفاف کردنش رو سخت کنه.
اینا سری الگوها هستند که توی زبان های برنامه نویسی استفاده میشن و محدود به زبان خاصی هم نیست در واقع الگو هستش نه چیز دیگه.
حالا همین قوانین رو ما توی بیسیک هم استفاده کردیم که یه سری هاشون رو بهتون میگم.

1- موقع تعریف متغیر از نوع آبجکت بلافاصله اون رو انتصاب بدید و بصورت خودکار initialize میشه
مثلا کد زیر اشتباهه

Dim List1 As List
List1.Initialize '<-- a new list was created here
List1 = SomeOtherList '<--- previous list was replaced


ولی این کد درسته چون هم ساده تره هم شفاف تر

Dim List1 As List = SomeOtherList


2- از توابعی که منسوخ شدن استفاده نکنید مثل DoEvents یا Msgbox

مثلا برای Map کد زیر خوب نیست
 

For i = 0 To Map1.Size - 1
   Dim key As String = Map1.GetKeyAt(i)
   Dim value As String = Map1.GetValueAt(i)
Next


ولی کد زیر خیلی خوبه

For Each key As String In Map1.Keys
Dim value As String = Map1.Get(key)

Next


3- از پارامتر ها توی کوئری های mysql بصورت مستقیم استفاده نکنید
مثلا کد زیر اصلا پیشنهاد نمیشه

SQL.ExecNonQuery("INSERT INTO table1 VALUES ('" & EditText1.Text & "'") 'ugly, will break if there is an apostrophe in the text and vulnerable to SQL injections.


ولی کد زیر خیلی خوبه

SQL.ExecNonQuery2("INSERT INTO table1 VALUES (?)", Array(EditText1.Text))


4- استفاده از resultset بجای cursor برای دسترسی به دیتابیس
چون resultset بیشتر برای برنامه نویسی کراس پلتفرم استفاده میشه و کرسر فقط برای بیسیک هست
مثلا کد زیر خیلی خوبه

Dim rs As ResultSet = SQL.ExecQuery2(...)
Do While rs.NextRow
...
Loop
rs.Close

5- از ساخت لیوت یا فرم با کدنویسی پرهیز کنید.
طراحی با دیزاینر خیلی منطقی تر و ساده تره

6- از تکرار کد ها پرهیز کنید
در واقع الگوهای زیادی هست که بشه کدهای ساده تری نوشت دوستان
ببینید مثلا کد زیر وحشتناک اشتباهه (ببینید غلط نیستا ولی اشتباهه)

If b = False Then
Button1.Text = "disabled"
Button2.Text = "disabled"
Button3.Text = "disabled"
Button1.Enabled = False
Button2.Enabled = False
Button3.Enabled = False
Else
Button1.Text = "enabled"
Button2.Text = "enabled"
Button3.Text = "enabled"
Button1.Enabled = True
Button2.Enabled = True
Button3.Enabled = True
End If

ولی کد زیر ایده اله عزیزان

For Each btn As Button In Array(Button1, Button2, Button3)
btn.Enabled = b
If b Then btn.Text = "enabled" Else btn.Text = "disable"
Next

7- از متن های طولانی ترکیب دار استفاده نکنید
مثلا کد زیر کاملا اشتباهه هر چند کار میکنه

Dim s As String = "This is the " & QUOTE & "first" & QUOTE & "line" & CRLF & _
"and this is the second one. The time is " & DateTime.Time(DateTime.Now) & "."

ولی کد زیر عالیه و از روش لیترال بیسیک استفاده میکنه

Dim s As String = $"This is the "first" line
and this is the second one. The time is $Time{DateTime.Now}."$

8- از متغییر های عمومی وقتی نیازی نیست استفاده نکنید
مثلا کد زیر اشتباهه

Job.Initialize(Me, "") 'global variable


ولی کد زیر درسته

Dim job As HttpJob
job.Initialize(Me, "")

چون همونجا لازم داریم فقط

9- تا جایی که میتونید برای کدهای asynchronous از wait for استفاده کنید

10- به هیچ وجه از ماژول ها بجای کلاس استفاده نکنید چون ماژول خیلی محدوده ولی کلاس قوی و هوشمند

11- استفاده درست از داده boolean
مثلا کد زیر شفاف و خوب نیست

Dim result As Boolean = DoingSomethingThatReturnTrueOrFalse
If result = True Then
    Return True
Else
    Return False
End If

ولی کد زیر خیلی خوبه

Return DoingSomethingThatReturnTrueOrFalse

12- سعی کنید از توابع داخلی برای ساخت جیسون یا xml استفاده کنید
مثلا کد زیر روش خوبی برای ساخت جیسون نیست

Dim s As String = "{""version"":""" & Version & """,""colors"":[""red"",""green"",""blue""]}"

ولی کد زیر خیلی عالیه

Dim jg As JSONGenerator
jg.Initialize(CreateMap("colors": Array("red", "green", "blue"), "version": Version))
Log(jg.ToPrettyString(4))


مطمئنا الگوها به اینجا ختم نمیشن ولی اشتباهات رایجی هستن که بهشون خیلی اشاره شده
امیدوارم مقاله خوبی باشه براتون دوستان

راستی کراس پلتفرم چیه؟
به زبان هایی که بشه یه کد بنویسی ولی برای چند سیستم عامل اجرا کنی رو کراس پلتفرم میگن
مثلا خود بیسیک که یه کد مینویسید هم برا اندروید هم ios هم سیستم عامل های دیگه خروجی میده
یا جاوا

برچسب ها :
  • بیسیک
  • برنامه نویسی
نظر خود را بنویسید...