חישוב גודל התגיות ב"ענן תגיות"

| More
נוסף ב-20/04/2010 10:51 על ידי דניאל כץ

מספר פעמים נתקלתי בשאלה הזו בפורומים השונים. איך מחשבים את גודלן של התגיות ב"ענן תגיות" כך שיהיה ניתן לשלוט על הגודל המינימאלי והמקסימאלי של הפונט?

מה שחסר כאן זה ניסוח מתמטי פשוט:

Untitled-2_1

  • 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);
 }

תיוג נעים לכולכם…

Tags: ,

.NET | .NET 4.0

Covariance and Contravariance in C# 4.0

| More
נוסף ב-16/04/2010 13:33 על ידי דניאל כץ

גם אני כשנתקלתי לראשונה במושגים covariance וcontravariance הייתי מבולבל למדי בעצמי. אבל, מסתבר שלאחר הסבר קצר אלו בסך הכל מונחים למושגים שכולנו מכירים טוב מאוד. מושגי הvariance שאולים במקור מהתפלגות סטטיסטית במתמטיקה, שם השונות המשותפת (variance) היא מדד לקשר בין שני משתנים מקריים. השונות המשותפת חיובית כאשר המשתנים נוטים לסטות באותו כיוון, מעל או מתחת לממוצע, ושלילית כאשר הם משתנים בכיוונים מנוגדים זה לזה. משם הושאל המינוח למדעי המחשב, וליתר דיוק למינוח האפיון של שפות תכנות.

נניח מערכת טיפוסים בה קיים הטיפוס Animal וטיפוס Elephant היורש ממנו:

 class  Program 
 {
     public  class  Animal  { }
     public  class  Elephant  : Animal  { }

}

במערכת טיפוסים זו המרה מטיפוס אחד למשנהו נחשבת:

  • covariant – כשממירים טיפוס כללי יותר לטיפוס מצומצם יותר לדוגמה: מAnimal לElephant.
  • contravariant – כשממירים טיפוס מצומצם יותר לטיפוס כללי יותר לדוגמה: מElephant לAnimal.
  • invariant – כשממירים בין שני טיפוסים שאינם קשורים לדוגמה: מProgram לAnimal. עוד...

Tags:

.NET 4.0

Named and Optional Arguments in C# 4.0

| More
נוסף ב-15/04/2010 14:50 על ידי דניאל כץ

ארגומנטים אופציונאליים והצבת ארגומנטים לפי שם

בC# 4.0 נוספה אפשרות להעביר ערך לארגומנט של מתודה בשמו (arg: "value") ולאו דווקא בסדר מסוים. אפשרות זו חיונית כדי לאפשר אפשרות חדשה נוספת שהיא - ארגומנטים אופציונאליים. הקוד הבא ממחיש העברה של הערך 1 לארגומנט ,copies את הערך"COLOR" לארגומנט ColorMode, ואת הערך "readme.txt" לארגומנט DocumentName:

 Print(copies: 1, colorMode: "COLOR" , documentName: "readme.txt");
 static  void  Print(string  colorMode, string  documentName, int  copies) {...}

ארגומנטים אופציונאליים מוכרזים בC# על ידי ציון ערך ברירת המחדל עבור הארגומנט: עוד...

Tags: ,

.NET 4.0