מספר פעמים נתקלתי בשאלה הזו בפורומים השונים. איך מחשבים את גודלן של התגיות ב"ענן תגיות" כך שיהיה ניתן לשלוט על הגודל המינימאלי והמקסימאלי של הפונט?
מה שחסר כאן זה ניסוח מתמטי פשוט:
- score - הוא ערך "הניקוד" של התגית
- minScore – הוא הערך של הניקוד הקטן ביותר שקיים
- maxScore - הוא הערך של הניקוד הגבוה ביותר שקיים
- minSize – הוא הערך של הפונט הקטן ביותר שתרצה להציג (הוא יוצב לתגית בעלת הניקוד הנמוך ביותר)
- maxSize - הוא הערך של הפונט הגדול ביותר שתרצה להציג (הוא יוצב לתגית בעלת הניקוד הגבוה ביותר)
ערך הניקוד יכול להיות כל דבר שתרצו: מספר צפיות, דירוג ממוצע, מספר אייטמים המקושרים לתגית וכדו', זה לא משנה למשוואה.
הקוד הבא הוא מימוש של המשוואה הזו בC# 4.0: (לVS2008 ראה בהמשך)
public static double CalculateTagSize(double score, double minScore, double maxScore, double minSize, double maxSize)
{
Contract .Requires<ArgumentOutOfRangeException >(minScore < maxScore,
"minScore must be smaller than maxScore." );
Contract .Requires<ArgumentOutOfRangeException >(minSize < maxSize,
"minSize must be smaller than maxSize." );
Contract .Requires<ArgumentOutOfRangeException >(score > minScore && score < maxScore,
"score must be greater than minScore and smaller than maxScore." );
return minSize + ((maxSize - minSize) * (score - minScore)) / (maxScore - minScore);
}
בVS2008 של ניתן לעשות את הבדיקות באמצעות הContracts אז נשתמש במשפטי if וזריקת חריגות:
public static double CalculateTagSize(double score, double minScore, double maxScore, double minSize, double maxSize)
{
if (!(minScore < maxScore))
throw new ArgumentOutOfRangeException ("minScore must be smaller than maxScore." );
if (!(minSize < maxSize))
throw new ArgumentOutOfRangeException ("minSize must be smaller than maxSize." );
if (score < minScore || score > maxScore)
throw new ArgumentOutOfRangeException ("score must be greater than minScore and smaller than maxScore." );
return minSize + ((maxSize - minSize) * (score - minScore)) / (maxScore - minScore);
}
תיוג נעים לכולכם…