החזר ערך קטן מבין שניים ב vb6
-
האם ידוע למישהו אם יש פונקציה מובנית ב vb6 שמחזירה ערך נמוך מבין שניים??? כמו Math.Min בדוט נט....
הפיתרון הגאוני שלי הוא בינתים ככה:Function GetMinValue(value1, value2) If value1 > value2 Or IsNull(value1) Or IsMissing(value1) Or value1 = Empty Then GetMinValue = value2 Else GetMinValue = value1 End If End Function
ואגב הבנתי שיש דרך לייבא את כל ה core של דוט נט לvba האם ידוע למישהו על יתרונות חסרונות וכדומה? ומהי הדרך הטובה ביותר לעשות זאת.
כמו כן דרוש מדריך נורמלי לדרך הרצויה לעשות קובץ דוט נט שישמש כ DLL ל vba שוב מהי הדרך הקלה והנוחה, בלי רישום ברג'יסטרי ובלי שטויות.
תודה.
פורסם במקור בפורום CODE613 ב06/01/2014 22:53 (+02:00)
-
פורסם במקור בפורום CODE613 ב06/01/2014 23:04 (+02:00)
-
לא נראה לי הפונקציה שלך כל כך טובה,
כי היא יכולה להחזיר רק אחת משני אפשריות - אמת או שקר, אבל באמת כאשר משווים בין שני דברים יש שלוש אפשרויות - או שהים שווים או הראשון גדול או השני גדול, ולכן בפונקציית COMPARE בדוטנט יש החזרה של 0 או 1 או -1.פורסם במקור בפורום CODE613 ב06/01/2014 23:16 (+02:00)
-
אבל עכשיו הסתכלתי ברפלקטור וראיתי שגם בדוטנט הפונקציה MIN עובדת כמו שעשית:
Public Shared Function Min(ByVal val1 As Integer, ByVal val2 As Integer) As Integer If (val1 > val2) Then Return val2 End If Return val1 End Function
פורסם במקור בפורום CODE613 ב06/01/2014 23:20 (+02:00)
-
לא נראה לי הפונקציה שלך כל כך טובה,
כי היא יכולה להחזיר רק אחת משני אפשריות - אמת או שקר, אבל באמת כאשר משווים בין שני דברים יש שלוש אפשרויות - או שהים שווים או הראשון גדול או השני גדול, ולכן בפונקציית COMPARE בדוטנט יש החזרה של 0 או 1 או -1.הפונצייה של ארכיטקט מצויינת!
שים לב שהוא לא ניסה בפונקצייה לקבל בוליאני אם הראשון גדול מהשני, אבל לקבל את המספר היותר קטן.
במקרה הגרועששניהם שווים, הוא יחזיר את אחד מהשניים... וזה ממש לא משנה איזה!פורסם במקור בפורום CODE613 ב06/01/2014 23:33 (+02:00)
-
תלוי מה המטרה של הפנקציה.
אם המטרה שלך לדעת אם זה שווה או גדול או קטן, ובכל מקרה אתה מבצע משהו אחר, אז באמת אתה צודק.
כאן, אתה רואה לפי הטיפוס שהפונקצייה שארכיטקט כתב שזה המספר, ובהמשך הפונקצייה אתה רואה שהוא מחזיר את הערך הקטן הממשי,ולא 0 או 1 או -1.
משמע, שהוא רוצה לדעת מי יותר קטן ופשוט לעבוד עם המספר הזה "מהקופסא". בכזה מקרה לא רלוונטי אם זה שווה, כי המטרה של הפונקצייה זו התוצאה ללא קשר לדרך.פורסם במקור בפורום CODE613 ב06/01/2014 23:50 (+02:00)
-
דבר שבאמת הייתי משנה בגלל הטענה שלך זה:
במקום:If value1 > value2
הייתי כותב:
If value1 >= value2
אבל זה באמת תלוי בארכיטקט.
האם ידוע למישהו אם יש פונקציה מובנית ב vb6 שמחזירה ערך נמוך מבין שניים??? כמו Math.Min בדוט נט....
הפיתרון הגאוני שלי הוא בינתים ככה:Function GetMinValue(value1, value2) If value1 > value2 Or IsNull(value1) Or IsMissing(value1) Or value1 = Empty Then GetMinValue = value2 Else GetMinValue = value1 End If End Function
הייתי משנה את:
Or IsNull(value1) Or IsMissing(value1) Or value1 = Empty
ב:
Not IsNumeric(value1)
הפונקצייה IsNumeric מחזירה לך בוליאני אם הערך הוא מספר (מכל סוג), וגם אם לא הגדרת סוג בvalue1 ובטעות נכנס טקסט, זה יחזיר false משא"כ הפונקצייה שלך.
פורסם במקור בפורום CODE613 ב06/01/2014 23:55 (+02:00)
-
יש בדיחה שמתכנת אחד הלך בשליחות אשתו לקנות במכולת, היא אמרה לו כך: תביא לחם, ואם יש ביצים תביא 12.
המתכנת חזר עם 12 לחמים, הסיבה: אכן היו ביצים במכולת.
אז לגבי ראובן ושמעון, תלוי באיזה ראובן ושמעון מדובר...
בנוגע לשינויים של קליק וואן, אל תשכח שיש גם ערכי תאריכים אפשריים, וכן ערכי אותיות למה לא? שמת לב שלא הגדרתי טיפוס לערך. אז מה שעלול לעמוד לנו לרועץ זה רק ערכים ריקים, כי הפונקציה הזו נועדה בכל מקרה להחזיר ערך כלשהו ככל הניתן (השירות שהפונקציה הזאת נותנת הוא למקרים בהם יש לך 1 מתוך 2 שדות, ופעמים הרבה שאחד השדות ריקים והלא רוצים אנו בפונקציה)פורסם במקור בפורום CODE613 ב06/01/2014 23:56 (+02:00)
-
If value1 > value2 Or IsNull(value1) Or IsMissing(value1) Or value1 = Empty Then
יש אגב פונקצייה מאד נפוצה שתפקידה להחזיר ערך בוליאני אם הערך ריק או NULL. היא מתמודדת יפה עם כל טיפוסי המשתנים הרגילים.
קוראים לה IsNothing, ואני מצרף אותה לתועלת מי שלא מכיר.
בדוטנט באחת הגירסאות הם הכניסו אותה פנימה (לפחות בVB)Public Function IsNothing(varToTest As Variant) As Integer ' Tests for a "logical" nothing based on data type ' Empty and Null = Nothing ' Number = 0 is Nothing ' Zero length string is Nothing ' Date/Time is never Nothing IsNothing = True Select Case VarType(varToTest) Case vbEmpty Exit Function Case vbNull Exit Function Case vbBoolean If varToTest Then IsNothing = False Case vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency If varToTest <> 0 Then IsNothing = False Case vbDate IsNothing = False Case vbString If (Len(varToTest) <> 0 And varToTest <> " ") Then IsNothing = False End Select End Function
פורסם במקור בפורום CODE613 ב07/01/2014 00:06 (+02:00)
-
בנוגע לשינויים של קליק וואן, אל תשכח שיש גם ערכי תאריכים אפשריים, וכן ערכי אותיות למה לא? שמת לב שלא הגדרתי טיפוס לערך. אז מה שעלול לעמוד לנו לרועץ זה רק ערכים ריקים, כי הפונקציה הזו נועדה בכל מקרה להחזיר ערך כלשהו ככל הניתן (השירות שהפונקציה הזאת נותנת הוא למקרים בהם יש לך 1 מתוך 2 שדות, ופעמים הרבה שאחד השדות ריקים והלא רוצים אנו בפונקציה)
אתה צודק, בטעות הסתכלתי על הקוד שרחמים העלה ושם הייתה החזרה של ערך: (As Integer)
Public Shared Function Min(ByVal val1 As Integer, ByVal val2 As Integer) As Integer
פורסם במקור בפורום CODE613 ב07/01/2014 00:10 (+02:00)
-
מה ההבדל בין פונקיציית ()IsNothing לבין השוואה עם שני אופרטורים Is Nothing
אם תפתח ברפלקטור תראה שאכן אין הבדל. אם כי יש שמספרים שיותר נוח Is Nothing בגלל השלילה Not.
התשובה מתייחסת לדוטנט (אם כי יכול להיות שגם בVBA זה נכון, אבל שם באמת יש פונקצייה מאחורה, ולא סתם בדיקה של Is Nothing)
מקור התשובה כאןפורסם במקור בפורום CODE613 ב07/01/2014 00:18 (+02:00)