DanLevy.net

תכנות מסדר גבוה

בחינת טכניקות צנרת מבוססות מערכים וקבוצות

Hero image for תכנות מסדר גבוה

חקירת טכניקות צנרת מבוססות מערכים וקבוצות

אנטי-תבנית?

זוהי חקירה של יתרונות שמושגים כאשר מקודדים הכל כמערך. (באמצעות מושגי ג’דאי מ-SmallTalk)

הנה כמה עקרונות מנחים:

  1. כל הקלט דמוי-מערך. אפילו מערך של 1.

  2. פונקציות ברמה גבוהה צריכות בדרך כלל לקבל ולהחזיר מערכים. (למעט שיטות callback ללולאות: map/reduce/each/filter)

  3. 99 מתוך 100 קוד של מפתחים סובל ממה שאני מכנה תסמונת עודף סכמה חריף.

  4. היזהרו ממודלים מנופחים מגובי מחלקה - עם כל המלכודות הצפויות: מצב מופע שביר עם כל כך הרבה מנופים וכפתורים להתעסק איתם, טרנזקציות DB, נעילות SQL, async/mutexing (שתמיד עובד בפעם הראשונה), שימוש ב-property getter/setters אידיומטיים, והשימוש שלך ב-public/private/final/etc מוצק, נכון?

  5. אז תן לי לקחת בעיה נפוצה ו-להכניס בכוח ~~~להוסיף~~~ כמה הרהורים מבוססי קבוצות.

  6. אתר בלוג היפותטי יש בו הרבה מאמרים, ויש אפילו יותר פוסטים (תגובות).

  7. בוא נוסיף מתודת delete (להלן) - אבל עם תמיכה גם ביחיד וגם במערכים.

package net.danlevy.why.java___why.you.got.all.the.dots____it.must.be.all.the.factories;
public class Post {
public String title;
public Date created;
public String message;
public Post(String title, String message) {
this.title = title;
this.message = message;
this.created = new Date();
}
public Date isArchived() {
return this.created < new Date(2015, 0, 1);
}
// Post.delete` can be called w/ a singular Post or an array of Post[]
public static int delete(Post post) {
List<Post> posts = new List<Post>(post);
return delete(posts)
}
public static int delete(List<Post> posts) {
return posts.map(Dao.remove);
}
}

סלח לי אם הג’אווה שלי קצת חלודה.