[Powered by Google Translate] [סעקשאַן 8 - מער באַקוועם] [ראָב באָוודען - האַרוואַרד אוניווערסיטעט] [דאס איז קס50. - CS50.TV] די וואָך אָפּטיילונג הערות זענען געגאנגען צו זייַן שיין קורץ, אַזוי איך בין נאָר געגאנגען צו האַלטן גערעדט, איר גייז זענען געגאנגען צו האַלטן אַסקינג שאלות, און מיר וועט פּרובירן צו פּלאָמבירן זיך ווי פיל צייַט ווי מעגלעך. א פּלאַץ פון מענטשן טראַכטן אַז דאָס פּסעט איז נישט דאַווקע שווער, אָבער עס ס 'זייער לאַנג. די פּסעט ספּעק זיך נעמט אַ שעה צו לייענען. מיר געבן איר אַ פּלאַץ פון די סקל איר קען עפשער דאַרפֿן צו נוצן. מיר גיין איר דורך אַ פּלאַץ פון עס, אַזוי עס זאָל נישט זייַן אויך שלעכט. האט ווער עס יז אנגעהויבן אָדער פאַרטיק? עס ס די לעצטע פּסעט. אָה, מיין גאָט. יוזשאַוואַלי דאָרט ס אַ דזשאַוואַסקריפּט איינער נאָך דעם, אָבער לוח טוישן זאכן מאכט אַלץ 1 וואָך קירצער, און מיר ניט מער האָבן אַ דזשאַוואַסקריפּט פּסעט. איך טאָן ניט וויסן ווי אַז אַפעקץ צי דזשאַוואַסקריפּט איז געגאנגען צו דערשייַנען אויף די עקסאַם אָדער קוויז 1. איך ימאַדזשאַן עס וועט זייַן עפּעס ווי איר דאַרפֿן צו וויסן הויך-מדרגה זאכן וועגן דזשאַוואַסקריפּט, אָבער איך צווייפל מיר 'ד נאָר געבן איר גלייַך דזשאַוואַסקריפּט קאָד זינט איר האָט נישט געהאט אַ פּסעט אין עס. אבער וואָס וועט זייַן שטאָפּן פֿאַר ויספרעג באריכטן ווייַטער וואָך. אָפּטיילונג פון שאלות. א פּלאַץ פון דעם שטאָפּן איז עפּעס שוואַך ווערדיד, אָבער מיר וועט דיסקוטירן וואָס. ניט ענלעך C, פפּ איז אַ "דינאַמיקאַללי-טייפּט" שפּראַך. וואָס טוט דאָס מיינען, איר פרעגן? געזונט, זאָגן זייַ געזונט צו אַלע פון ​​יענע טשאַר, לאָזנ שווימען, ינט, און אנדערע טערמינען איר דאַרפֿן צו נוצן ווען דיקלערינג וועריאַבאַלז און פאַנגקשאַנז אין סי אין פפּ, אַ בייַטעוודיק ס טיפּ איז באשלאסן דורך דעם ווערט אַז עס ס דערווייַל האלטן. אַזוי איידער מיר דרוקן דעם קאָד אין אַ טעקע גערופן דינאַמיק.פפּ, פפּ איז דינאַמיקאַללי טייפּט. וואָס איז אמת. איך דיסאַגרי מיט די פאַקט אַז אַז מיטל מיר רע זאגן זייַ געזונט צו טשאַר, לאָזנ שווימען, ינט, און אנדערע טערמינען. די פּינטלעך חילוק צווישן דינאַמיקאַללי טייפּט און דער אָלטערנאַטיוו, וואָס איז סטאַטיקאַללי טייפּט, איז אַז דינאַמיקאַללי טייפּט, אַלע פון ​​דיין טיפּ קאָנטראָלירונג און שטאָפּן כאַפּאַנז בייַ לויפן צייַט, וועראַז סטאַטיקאַללי טייפּט עס כאַפּאַנז בייַ צונויפנעמען צייַט. די וואָרט סטאַטיק אין אַלגעמיין מיינט צו מיינען צונויפנעמען צייַט זאכן. איך טרעפן דאָרט זענען אנדערע ניצט פֿאַר אים, אָבער אין C ווען איר דערקלערן אַ סטאַטיק בייַטעוודיק, זייַן סטאָרידזש איז אַלאַקייטיד בייַ צונויפנעמען צייַט. דאָ, דינאַמיקאַללי טייפּט נאָר מיטל וואָס - אין C אויב איר פּרובירן צו לייגן אַ שטריקל און אַ ינטעגער, ווען איר צונויפנעמען עס, עס ס געגאנגען צו באַקלאָגנ זיך ווייַל עס ס געגאנגען צו זאָגן אַז איר קענען נישט לייגן אַ ינט און אַ טייַטל. עס ס נאָר נישט אַ גילטיק אָפּעראַציע. וואָס איז אן אנדער זאַך אַז מיר וועט באַקומען צו אין אַ רגע. אבער אַז סאָרט פון קאָנטראָלירונג, די פאַקט אַז עס קאַמפּליינז בייַ צונויפנעמען צייַט, איז סטאַטיק טיפּ קאָנטראָלירונג. עס זענען שפּראַכן ווו איר טאָן ניט דאַרפֿן צו זאָגן טשאַר, לאָזנ שווימען, ינט, און אַלע פון ​​יענע זאכן, אָבער די שפּראַך קענען דערציילן פון דעם קאָנטעקסט פון דער זאַך וואָס טיפּ עס ס געמיינט צו זייַן, אָבער עס ס נאָך סטאַטיקאַללי טייפּט. אַזוי אויב איר נעמען 51, אָקאַמל, איר קיינמאָל דאַרפֿן צו נוצן קיין פון די טייפּס, אָבער עס נאָך וועט בייַ צונויפנעמען צייַט זאָגן איר קענען ניט טאָן דעם ווייַל איר ניטאָ מיקסינג אַ ינט און אַ שטריקל. דינאַמיקאַללי טייפּט נאָר מיטל אַז אַמאָל בעשאַס לויפן צייַט איר ניטאָ געגאנגען צו באַקומען אַ קלאָג. אויב איר האָבן אויך געניצט דזשאַוואַ פריער, אין אַלגעמיין, כּמעט קיין C-טיפּ שפּראַך איז געגאנגען צו זייַן סטאַטיקאַללי טייפּט, אַזוי C, C + +, דזשאַוואַ, אַלע פון ​​יענע זענען בכלל סטאַטיקאַללי טייפּט. אין דזשאַוואַ ווען איר צונויפנעמען עפּעס און איר ניטאָ געזאגט שטריקל s יקוואַלז נייַ עפּעס וואָס איז נישט אַ שטריקל, אַז ס 'געגאנגען צו באַקלאָגנ זיך ווייַל יענע טייפּס נאָר טאָן ניט גלייַכן אַרויף. אַז ס 'געגאנגען צו באַקלאָגנ זיך בייַ צונויפנעמען צייַט. אבער עס אויך האט עטלעכע דינאַמיש צייַט זאכן ווי אויב איר פּרובירן צו וואַרפן עפּעס צו אַ טיפּ אַז ס מער ספּעציפיש ווי זייַן קראַנט טיפּ, דאָרט ס 'גאָרנישט עס קענען טאָן אין צונויפנעמען צייַט צו קאָנטראָלירן צי אַז געשטאַלט איז געגאנגען צו מצליח. דזשאַוואַ אויך האט עטלעכע דינאַמיש טיפּ קאָנטראָלירונג אַז ווי באַלד ווי עס געץ צו אַז שורה פון קאָד ווען עס ס 'פאקטיש עקסאַקיוטינג, עס ס געגאנגען צו טאָן די געשטאַלט, טשעק אויב אַז געשטאַלט איז געווען גילטיק אין דער ערשטער אָרט, און אויב עס איז נישט, דעמאָלט עס ס געגאנגען צו באַקלאָגנ זיך אַז איר האָט אַ פאַרקריפּלט טיפּ. דינאַמיש טיפּ קאָנטראָלירונג. טיפּ דעם אין אַ טעקע גערופן דינאַמיק.פפּ. דינאַמיק.פפּ. איך וועט אַנזיפּ אַז פאָרמאַטטינג. מיר האָבן אַ בייַטעוודיק, מיר שטעלן אים צו די ינטעגער 7, דעמאָלט מיר רע געגאנגען צו דרוקן עס, און% s - אָה, מיר רע דרוקן דעם טיפּ פון עס, אַזוי געטטיפּע איז געגאנגען צו צוריקקומען דער טיפּ פון די בייַטעוודיק. מיר רע נאָר דרוקן דעם טיפּ איבער און איבער ווידער. מיר נאָר פפּ.דינאַמיק.פפּ. מיר וועט זען אַז עס ענדערונגען פון ינטעגער צו שטריקל צו בוליאַן ווי מיר גיין דורך. אין C עס איז קיין בוליאַן דאַטן טיפּ, עס איז קיין שטריקל דאַטן טיפּ. עס ס טשאַר * און בוליאַן נאָר טענדז צו זייַן ינט אָדער טשאַר אָדער עפּעס. אין פפּ די טייפּס טאָן עקזיסטירן, און אַז ס איינער פון די גרויס אַדוואַנטאַגעס פון פפּ איבער C - אַז שטריקל אַפּעריישאַנז זענען ינפאַנאַטלי גרינגער אין פפּ ווי סי זיי נאָר אַרבעטן. אַזוי מיר קומען צוריק דאָ. מיר געלאפן דינאַמיק.פפּ. דאס דערציילט די פפּ יבערזעצער, גערופן פפּ, צו לויפן די פפּ קאָד אין דינאַמיק.פפּ. אויב איר האָט קיין ערראָרס אין די טעקע, די יבערזעצער וועט זאָגן איר! די יבערזעצער, דאָס איז אן אנדער גרויס חילוק צווישן פפּ און סי אין C איר האָבן צו צונויפנעמען עפּעס און דאַן איר לויפן אַז צונויפגעשטעלט טעקע. אין פפּ איר קיינמאָל צונויפנעמען עפּעס. אַזוי די פפּ יבערזעצער איז בייסיקלי נאָר לייענען דעם שורה ביי שורה. עס היץ וואַר = 7 דעמאָלט עס היץ פּרינטף דעמאָלט עס היץ וואַר דעמאָלט עס היץ פּרינטף און אַזוי אויף. עס איז אַ ביסל פון קאַמפּיילינג עס טוט, און עס קאַטשעס די רעזולטאַטן אַזוי אויב איר לויפן די שריפט שפּעטער איר קענען טאָן עטלעכע, אָבער בייסיקלי עס ס אַ שורה ביי שורה סאָרט פון זאַך. אַז מיטל וואָס אַ פּלאַץ פון די אָפּטימיזאַטיאָנס אַז מיר באַקומען אין C, ווי קאַמפּיילינג, עס ס נאָר בכלל דער קאַמפּיילער קענען טאָן אַ פּלאַץ פון טריקס פֿאַר איר. עס קענען נעמען אויס אַניוזד וועריאַבאַלז, עס קענען טאָן אַלע פון ​​די סאָרץ פון זאכן, עס קענען טאָן עק רעקורסיאָן. אין פפּ איר ניטאָ ניט געגאנגען צו באַקומען אַז מייַלע ווייַל עס ס נאָר געגאנגען צו אָנהייבן עקסאַקיוטינג שורה ביי שורה ביי שורה, און עס טוט ניט טאַקע דערקענען די זאכן ווי לייכט זינט עס ס ניט 1 גרויס זאַמלונג פאָרן איבער די זאַך און דעמאָלט דורכפירונג; עס ס נאָר שורה ביי שורה. אַזוי אַז ס די יבערזעצער. צוריק צו אונדזער דינאַמיש טייפּינג: שיין קיל, האַ? איר באשטימט קען נישט טאָן אַז אין C! איצט, זען אויב איר קענען רעכענען אויס דעם טיפּ פון יעדער פון די פאלגענדע וואַלועס. זען דעם פֿאַר דערמאָנען. אַזוי 3.50. וואָס טיפּ טאָן איר טראַכטן אַז ס 'געגאנגען צו זייַן? דאָ זענען די טייפּס מיר האָבן. מיר האָבן באָאָלס, ינטאַדזשערז, פלאָוטינג ווייזט, סטרינגס, ערייז, אַבדזשעקס, און דעמאָלט רעסורסן, וואָס איז מין פון ווייג. איך טראַכטן דאָרט ס 'פאקטיש אַ בייַשפּיל דאָ. דעמאָלט דאָרט ס נאַל. נאַל איז אַ ספּעציעל טיפּ. ניט ענלעך C ווו נאַל איז נאָר אַ טייַטל מיט אַדרעס 0, אין פפּ, נאַל איז זייַן אייגן טיפּ ווו די בלויז גילטיק זאַך פון וואָס טיפּ איז נאַל. דאס איז פיל מער נוצלעך פֿאַר טעות קאָנטראָלירונג. אין C ווו מיר האט דאָס אַרויסגעבן ווו אויב איר צוריקקומען נאַל, טוט וואָס מיינען איר ניטאָ אומגעקערט אַ נאַל טייַטל אָדער ניצן נאַל צו באַטייַטן טעות אָדער אַלע פון ​​וואָס צעמישונג מיר האט אין איין פונט. דאָ, אומגעקערט נאַל בכלל מיטל טעות. א פּלאַץ פון זאכן אויך צוריקקומען פאַלש פֿאַר טעות. אבער די פונט איז דער נאַל טיפּ, דער נאָר זאַך פון די נאַל טיפּ איז נאַל. דעמאָלט קאַללבאַקק איז ווי איר קענען דעפינירן עטלעכע אַנאָנימאָוס פאַנגקשאַנז. איר טאָן ניט האָבן צו געבן די פֿונקציע אַ נאָמען, אָבער איר וועט נישט האָבן צו האַנדלען מיט וואָס דאָ. קוקן בייַ די טייפּס אַז זיי טאָן דערוואַרטן אונדז צו וויסן, וואָס טאָן איר טראַכטן דעם טיפּ פון 3.50 איז? >> [תּלמיד] פלאָוט. יאָ. אַזוי דעמאָלט דאָ, וואָס טאָן איר טראַכטן דעם טיפּ פון דעם איז? >> [תּלמיד] Array. יאָ. דער ערשטער איינער איז געווען לאָזנ שווימען, די רגע איינער איז אַ מענגע. נאָטיץ אַז דעם מענגע איז ניט ווי אַ C מענגע ווו איר האָבן אינדעקס 0 האט עטלעכע ווערט, אינדעקס 1 האט עטלעכע ווערט. דאָ די ינדיסעס ביסט אַ, ב, און C און די וואַלועס ביסט 1, 2, און 3. אין פפּ עס איז קיין חילוק צווישן אַ אַססאָסיאַטיווע מענגע און נאָר אַ רעגולער מענגע ווי איר וואָלט טראַכטן פון אים אין סי עס איז נאָר דאָס, און ונטער דער קאַפּטער אַ רעגולער מענגע איז נאָר אַ אַססאָסיאַטיווע מענגע ווו 0 מאַפּס צו עטלעכע ווערט די זעלבע וועג אַ מאַפּס צו עטלעכע ווערט. פֿאַר דעם סיבה, פפּ קענען זייַן שיין שלעכט פֿאַר טאַקע שנעל קאָד / בענטשמאַרקינג זאכן זינט אין C ווען איר ניטאָ ניצן אַ מענגע איר וויסן אַז אַקסעסינג אַ מיטגליד איז קעסיידערדיק צייַט. אין פפּ אַקסעסינג אַ מיטגליד איז ווער ווייסט ווי פיל צייַט? עס ס מיסטאָמע קעסיידערדיק אויב עס כאַשאַז ריכטיק. ווער ווייסט וואָס עס ס טאַקע טאן ונטער דער קאַפּטער? איר טאַקע דאַרפֿן צו קוקן בייַ די ימפּלאַמענטיישאַן צו זען ווי עס ס געגאנגען צו האַנדלען מיט וואָס. אַזוי דעמאָלט פאָפּען. איך טראַכטן דאָ לאָזן ס נאָר פפּ מאַנואַל פאָפּען צו קוקן בייַ די צוריקקומען טיפּ. מיר זען דאָ איר קענען קוקן אַרויף שיין פיל קיין פונקציאָנירן אין די פפּ מאַנואַל און דאָס איז סאָרט פון די מענטש בלאַט פון פפּ. די צוריקקומען טיפּ איז געגאנגען צו זייַן מיטל. אַז ס וואָס איך געקוקט עס אַרויף, ווייַל מיר האט ניט טאַקע דעפינירן מיטל. דער געדאַנק פון מיטל, אין C איר מין פון גאַט אַ טעקע * אָדער וועלכער; אין פפּ די מיטל איז דיין טעקע *. עס ס וואָס איר ניטאָ געגאנגען צו זייַן לייענען פון, עס ס וואָס איר ניטאָ געגאנגען צו זייַן שרייבן צו. עס ס יוזשאַוואַלי פונדרויסנדיק, אַזוי עס ס אַ מיטל איר קענען ציען זאכן פון און וואַרפן דאס צו. און לעסאָף, וואָס איז דער טיפּ פון נאַל? >> [תּלמיד] נאַל. יאָ. אַזוי דער בלויז זאַך וואָס איז נאַל איז נאַל. נאַל איז נאַל. איין שטריך פון פפּ ס טיפּ סיסטעם (פֿאַר בעסער אָדער פֿאַר ערגער) איז זייַן פיייקייַט צו דזשאַגאַל טייפּס. ווען איר שרייַבן אַ שורה פון פפּ קאָד וואָס קאַמביינז וואַלועס פון פאַרשידענע טייפּס, פפּ וועט פּרובירן צו טאָן די פיליק זאַך. פרובירט אויס יעדער פון די פאלגענדע שורות פון פפּ קאָד. וואָס ס געדרוקט אויס? איז עס וואָס איר דערוואַרט? פארוואס אָדער וואָס נישט? דעם פאַקט וועגן פפּ איז וואָס מאכט עס וואָס מיר רופן וויקלי טייפּט. וויקלי טייפּט און שטארק טייפּט, עס זענען פאַרשידענע ניצט פֿאַר יענע תּנאָים, אָבער רובֿ מענטשן נוצן וויקלי טייפּט און שטארק טייפּט צו מיינען דעם סאָרט פון זאַך ווו ("1" + 2); וואָס אַרבעט. אין C וואָס וואָלט נישט אַרבעטן. איר קענען ימאַדזשאַן דעם נישט ארבעטן. א פּלאַץ פון מענטשן מישן אַרויף דינאַמיש טייפּינג און שוואַך טייפּינג און סטאַטיק טייפּינג און שטאַרק טייפּינג. פּיטהאָן איז אן אנדער בייַשפּיל פון אַ שפּראַך וואָס ס דינאַמיקאַללי טייפּט. איר קענען וואַרפן אַרום טייפּס אין וועריאַבאַלז און עס ס געגאנגען צו באַשליסן אין לויפן צייַט קיין טעות טשעקקינגס. אין פּיטהאָן עס ס געגאנגען צו ויספירן דעם און עס וועט זען ("1" + 2); און דאָס וועט פאַרלאָזן ווייַל עס זאגט איר קענען נישט לייגן אַ שטריקל און אַ ינטעגער. אין פפּ, וואָס איז פּונקט ווי דינאַמיקאַללי טייפּט, דאָס וועט נישט פאַרלאָזן. שוואַך טייפּינג האט צו טאָן מיט דעם פאַקט אַז עס טוט דאס מיט טייפּס וואָס טאָן ניט טאַקע מאַכן זינען דאַווקע. אַזוי ("1" + 2); איך קענען ימאַדזשאַן אַז זייַענדיק די שטריקל 12, איך קענען ימאַדזשאַן עס זייַענדיק די שטריקל 3, איך קענען ימאַדזשאַן עס זייַענדיק דער ינטעגער 3. עס ס נישט דאַווקע געזונט דיפיינד, און מיר רע מיסטאָמע געגאנגען צו זען דאָ אַז ווען מיר דרוקן ("1" + 2); עס ס מיסטאָמע געגאנגען צו סוף אַרויף זייַענדיק אַנדערש ווי דרוקן (1 + "2"). און דעם טענדז צו זייַן, אין מיין מיינונג, פֿאַר די ערגער. דאָ מיר קענען פּרובירן די. אן אנדער ביסל קונץ וועגן פפּ איז איר טאָן ניט דאַרפֿן צו פאקטיש שרייַבן די טעקע. עס טוט האָבן לויפן דעם באַפֿעל מאָדע. אַזוי פפּ-ר, דעריבער מיר קענען וואַרפן אין די באַפֿעל דאָ: "דרוק ('1 '+ 2);" און איך וועט וואַרפן אַ נייַ שורה. דאס געדרוקט 3. עס קוקט ווי עס פּרינץ 3 און עס ס די ינטעגער 3. אַזוי איצט לאָזן ס פּרובירן די אנדערע וועג אַרום: "דרוק (1 + '2 '); מיר באַקומען 3, און איז עס אויך געגאנגען צו זייַן ינטעגער 3? איך האָנעסטלי האָבן קיין געדאַנק. עס קוקט ווי וואָס איז קאָנסיסטענט. עס איז קיינמאָל קיין געלעגנהייַט פון עס זייַענדיק די שטריקל 12 אָדער עפּעס ווי אַז ווייַל פפּ, ניט ענלעך דזשאַוואַסקריפּט און דזשאַוואַ אויך, האט אַ באַזונדער אָפּעראַטאָר פֿאַר קאַנקאַטאַניישאַן. קאָנקאַטענאַטיאָן אין פפּ איז פּינטעלע. אַזוי דרוקן (1. '2 '); איז געגאנגען צו געבן אונדז 12. דאס טענדז צו פירן צו צעמישונג ווו מען פּרובירן צו טאָן עפּעס ווי Str + = עטלעכע אנדערע זאַך אַז זיי וועלן צו לייגן אויף צו דעם סוף פון זייער שטריקל, און אַז ס 'געגאנגען צו פאַרלאָזן. איר דאַרפֿן צו טאָן Str. = אַזוי טאָן ניט פאַרגעסן קאַנקאַטאַניישאַן אין פפּ איז אַ פּינטעלע. אנדערע זאכן צו פּרובירן: דרוקן ("קס" + 50); איך ווע דערציילט איר אַז עס איז ניט האָפֿן פון דעם ריזאַלטינג אין קס50 זינט קאַנקאַטאַניישאַן איז נישט +. וואָס טאָן איר טראַכטן דעם איז געגאנגען צו סוף אַרויף זייַענדיק? איך האָנעסטלי האָבן לעגאַמרע קיין געדאַנק. עס קוקט ווי עס ס נאָר 50. עס זעט דעם שטריקל, און איך געוועט אויב מיר שטעלן 123קס - עס זעט דער ערשטער שטריקל, עס פרוווט צו לייענען אַ ינטעגער פון עס אָדער אַ נומער פון עס. אין דעם פאַל עס זעט 123קס. "אַז טוט נישט מאַכן זינען ווי אַ ינטעגער, אַזוי איך בין נאָר געגאנגען צו טראַכטן פון 123." אַזוי 123 + 50 איז געגאנגען צו זייַן 173. און דאָ עס סטאַרץ לייענען דעם ווי אַ ינטעגער. עס טוט נישט זען עפּעס, אַזוי עס נאָר טריץ עס ווי 0. אַזוי 0 + 50 איז געגאנגען צו זייַן 50. דאס איך בין אַסומינג איז געגאנגען צו טאָן עפּעס ענלעך. איך בין טראכטן 99. יאָ, ווייַל עס ס געגאנגען צו נעמען דער ערשטער - אַזוי 99. דאָ (10/7), אויב דאָס זענען C, וואָס וואָלט אַז צוריקקומען? [תּלמיד] 1. >> יאָ, עס וואָלט זייַן 1 ווייַל 10/7 איז דיוויידינג 2 ינטאַדזשערז. אַ ינטעגער צעטיילט דורך אַ ינטעגער איז געגאנגען צו צוריקקומען אַן ינטעגער. עס קען נישט צוריקקומען 1 פונט וועלכער וואָס וואָלט זייַן, אַזוי עס ס נאָר געגאנגען צו צוריקקומען 1. דאָ דרוקן (10/7); עס ס געגאנגען צו פאקטיש טייַטשן אַז. און דעם מיטל אַז אויב איר פאקטיש ווילן צו טאָן ינטעגער ראַונדינג און שטאָפּן ווי אַז, איר דאַרפֿן צו טאָן דרוקן (שטאָק (10/7)); אין C עס ס מיסטאָמע טשודנע אַז איר קענען פאַרלאָזנ אויף ינטעגער טראַנגקיישאַן קעסיידער, אָבער אין פפּ איר קענען נישט ווייַל עס וועט אויטאָמאַטיש קער עס אין אַ לאָזנ שווימען. און דעמאָלט (7 + אמת); וואָס טאָן איר טראַכטן אַז ס 'געגאנגען צו זייַן? איך בין געסינג 8 אויב עס ס געגאנגען צו טייַטשן אמת ווי 1. עס קוקט ווי עס ס 8. אַזוי עפּעס מיר ווע געטאן אין דער פאַרגאַנגענהייַט 10 מינוט איר זאָל לעגאַמרע קיינמאָל טאָן. איר וועט זען קאָד וואָס טוט דאָס. עס טוט נישט האָבן צו זייַן ווי סטרייטפאָרווערד ווי דעם. איר קען האָבן 2 וועריאַבאַלז, און 1 בייַטעוודיק כאַפּאַנז צו זייַן אַ שטריקל און די אנדערע בייַטעוודיק כאַפּאַנז צו זייַן אַ ינט, און דאַן איר לייגן די וועריאַבאַלז צוזאַמען. זינט פפּ איז דינאַמיקאַללי טייפּט און עס וועט ניט טאָן קיין טיפּ קאָנטראָלירונג פֿאַר איר און זינט עס ס וויקלי טייפּט און זינט עס וועט נאָר אויטאָמאַטיש וואַרפן די זאכן צוזאַמען און אַלץ וועט נאָר אַרבעטן, עס ס 'שווער צו אַפֿילו וויסן אַז דאָס בייַטעוודיק מוזן זייַן אַ שטריקל איצט, אַזוי איך זאָל נישט לייגן עס צו דעם בייַטעוודיק, וואָס איז אַ ינטעגער. בעסטער פיר איז אויב אַ בייַטעוודיק איז אַ שטריקל, האַלטן עס ווי אַ שטריקל אויף אייביק. אויב אַ בייַטעוודיק איז אַ ינט, האַלטן עס ווי אַ ינט אויף אייביק. אויב איר ווילן צו האַנדלען מיט ינטאַדזשערז און סטרינגס, איר קענען נוצן וואַרסינט - אַז ס דזשאַוואַסקריפּט. ינטוואַל. איך טאָן דעם אַלע די צייַט. פפּ און דזשאַוואַסקריפּט איך מישן אַרויף אַלץ. אַזוי ינטוואַל איז געגאנגען צו צוריקקומען די ינטעגער ווערט פון אַ בייַטעוודיק. אויב מיר פאָרן אין "דרוק (ינטוואַל ('123 ')); איר באַקומען 123. ינטוואַל זיך איז נישט געגאנגען צו טאָן די טשעק פֿאַר אונדז אַז עס ס אויסשליסלעך אַן ינטעגער. די פפּ מאַנואַל, עס זענען נאָר אַזוי פילע פאַנגקשאַנז פאַראַנען, אַזוי דאָ איך טראַכטן וואָס איך וואָלט נוצן איז יס_נומעריק ערשטער. איך בין געסינג אַז אומגעקערט פאַלש. אַז ס אן אנדער זאַך מיר האָבן צו גיין איבער איז ===. אַזוי יס_נומעריק ('123דף '), איר וואָלט נישט טראַכטן פון וואָס ווי יס_נומעריק. אין C איר וואָלט האָבן צו יטעראַטע איבער אַלע אותיות און טשעק צו זען אויב יעדער כאַראַקטער איז ציפֿער אָדער וועלכער. דאָ יס_נומעריק איז געגאנגען צו טאָן אַז פֿאַר אונדז, און עס ס אומגעקערט פאַלש. אַזוי ווען איך געדרוקט וואָס, עס געדרוקט גאָרנישט, אַזוי דאָ איך בין קאַמפּערינג עס צו זען, האט איר פּאַסירן צו זייַן פאַלש? און אַזוי איצט עס ס דרוקן 1. משמעות עס פּרינץ 1 ווי אמת אַנשטאָט פון דרוקן אמת ווי אמת. איך ווונדער אויב איך טאָן פּרינט_ר. ניין, עס נאָך טוט 1. געגאנגען צוריק צו ===, == נאָך יגזיסץ, און אויב איר רעדן צו טאַמי ער וועט זאָגן == איז בישליימעס פייַן. איך בין געגאנגען צו זאָגן אַז == איז שרעקלעך און איר זאָל קיינמאָל נוצן ==. די חילוק איז אַז == קאַמפּערז זאכן ווו עס קענען זייַן אמת אַפֿילו אויב זיי ניטאָ ניט די זעלבע טיפּ, וועראַז === קאַמפּערז זאכן און ערשטער עס טשעקס זענען זיי די זעלבע טיפּ? יא. אָוקיי, איצט איך בין געגאנגען צו זען אויב זיי פאקטיש פאַרגלייַכן צו זייַן גלייַך. איר באַקומען טשודנע זאכן ווי 10 יקוואַלז - לאָזן ס זען וואָס וואָס זאגט. אַזוי ('10 '== '1 ע1'); דאס קערט אמת. טוט ווער עס יז האָבן קיין געסאַז וואָס דאָס קערט אמת? עס איז ניט נאָר וועגן וואָס. אפֿשר דאָס איז אַ אָנצוהערעניש. אבער אויב איך טוישן אַז צו אַן F - צירעווען עס! איך האַלטן ניצן טאָפּל קוואָטעס. די סיבה דער טאָפּל קוואָטעס זענען יעלינג בייַ מיר איז ווייַל איך ווע שטעלן דעם אין טאָפּל קוואָטעס. אַזוי איך קען אַנטלויפן די טאָפּל ציטירט אין דאָ, אָבער איין קוואָטעס מאַכן עס גרינגער. אַזוי ('10 '== '1 פ 1'); טוט נישט דרוקן אמת. ('10 '== '1 ע1'); פּרינץ אמת. [תּלמיד] איז עס העקס? >> עס ס נישט העקס, אָבער עס ס נאָענט אַז עס ס ווי - 1ע1, וויסנשאפטלעכע נאָוטיישאַן. עס אנערקענט 1ע1 ווי 1 * 10 ^ 1 אָדער וועלכער. יענע זענען גלייַך ינטאַדזשערז. אויב מיר טאָן === דעמאָלט עס ס געגאנגען צו זייַן פאַלש. איך פאקטיש האָבן קיין געדאַנק אויב מיר טאָן == וואָס וועגן (10 און '10אַבק ');? אַלע רעכט. אַזוי אַז ס 'אמת. אַזוי פּונקט ווי ווען איר האט (10 + '10אַבק '); און עס וואָלט זייַן 20, דאָ (10 == '10אַבק '); איז אמת. אפילו ערגער זענען זאכן ווי (פאַלש == נאַל); איז אמת אָדער (פאַלש == 0); איז אמת, (פאַלש == []); עס זענען טשודנע פאלן פון - אַז ס איינער פון יענע טשודנע קאַסעס. נאָטיץ אַז (פאַלש == []); איז אמת. ('0 '== פאַלש); איז אמת. ('0 '== []); איז פאַלש. אַזוי == איז אין קיין וועג טראַנסיטיווע. אַ קענען זייַן גלייַך צו בייטן און אַ קענען זייַן גלייַך צו C, אָבער ב זאל ניט זייַן גלייַך צו C. אַז ס אַ אַבאַמאַניישאַן צו מיר, און איר זאָל שטענדיק נוצן ===. [תּלמיד] קענען מיר טאָן! == ווי גוט? >> [באָוודען] יא. דער עקוויוואַלענט וואָלט זייַן! = און! ==. דאס איז פאקטיש געבראכט אַרויף אין די פּסעט ספּעק ווו אַ פּלאַץ פון פאַנגקשאַנז צוריקקומען - די פפּ מאַנואַל איז גוט וועגן דעם. עס לייגט אין אַ גרויס רויט קעסטל, "דאס וועט צוריקקומען פאַלש אויב דאָרט ס 'אַ טעות." אבער אומגעקערט 0 איז אַ בישליימעס גלייַך זאַך צו צוריקקומען. טראַכטן וועגן קיין פֿונקציע וואָס איז דערוואַרט צו צוריקקומען אַן ינטעגער. זאל ס זאָגן דעם פֿונקציע איז געמיינט צו ציילן די נומער פון שורות אין אַ טעקע אָדער עפּעס. אונטער נאָרמאַל צושטאנדן, איר פאָרן דעם פֿונקציע אַ טעקע און עס ס געגאנגען צו צוריקקומען אַן ינטעגער וואָס רעפּראַזענץ די נומער פון שורות. אַזוי 0 איז אַ בישליימעס גלייַך נומער אויב דער טעקע איז נאָר ליידיק. אבער וואָס אויב איר פאָרן עס אַ פאַרקריפּלט טעקע און די פֿונקציע כאַפּאַנז צו צוריקקומען פאַלש אויב איר פאָרן עס אַ פאַרקריפּלט טעקע? אויב איר נאָר טאָן == איר ניטאָ ניט דיפערענטשיייטינג דער פאַל צווישן פאַרקריפּלט טעקע און ליידיק טעקע. שטענדיק נוצן ===. אַז ס אַלע פון ​​יענע. אין פפּ, די מענגע טיפּ איז אַנדערש פון וואָס איר ניטאָ געניצט צו אין סי טאקע, איר זאלט ​​האָבן שוין באמערקט דעם אויבן ווען איר געזען אַז דאָס איז פון טיפּ מענגע. דער קאַנטיקער סינטאַקס איז נייַ ווי פון פפּ 5.4, וואָס איז די נואַסט ווערסיע פון ​​פפּ. איידער דעם איר שטענדיק געהאט צו שרייַבן מענגע ('אַ' -> 1, 'ב' -> 2. וואָס איז די קאַנסטראַקטער פֿאַר אַ מענגע. איצט פפּ האט לעסאָף קומען אַרום צו דעם פייַן סינטאַקס פון נאָר קוואַדראַט בראַקאַץ, וואָס איז פּונקט אַזוי פיל בעסער ווי מענגע. אבער קאָנסידערינג פפּ 5.4 איז די נואַסט ווערסיע, איר קען טרעפן ערטער אַז טאָן ניט אַפֿילו האָבן פפּ 5.3. איבער די זומער מיר געלאפן אין דעם אַרויסגעבן ווו פפּ 5.3 איז וואָס מיר האבן אויף די אַפּפּליאַנסע, אָבער די סערווער וואָס מיר דיפּלויד אַלע אונדזער מיינונג בוך און פאָרלייגן און אַלע וואָס שטאָפּן צו איז פפּ 5.4. ניט געוואוסט דעם, מיר דעוועלאָפּעד אין 5.3, פּושט צו 5.4, און איצט אַלע פון ​​אַ פּלוצעמדיק קיינער פון אונדזער קאָד אַרבעט ווייַל דאָרט געטראפן צו האָבן געווען ענדערונגען צווישן 5.3 און 5.4 וואָס זענען נישט קאַפּויער קאַמפּאַטאַבאַל, און מיר האָבן צו גיין און פאַרריכטן אַלע פון ​​אונדזער זאכן וואָס טאָן ניט אַרבעט פֿאַר פפּ 5.4. פֿאַר דעם סאָרט, זינט די אַפּפּליאַנסע טוט האָבן פפּ 5.4, עס ס בישליימעס פייַן צו נוצן קוואַדראַט בראַקאַץ. אבער אויב איר ניטאָ קוקן אַרויף דאס אַרום די אינטערנעט, אויב איר ניטאָ קוקן אַרויף עטלעכע מין פון מענגע שטאָפּן, רובֿ מסתּמא איר ניטאָ געגאנגען צו זען די רעגע אויס מענגע קאַנסטראַקטער סינטאַקס זינט אַז ס 'געווען אַרום זינט פפּ איז געבוירן און קוואַדראַט קאַנטיקער סינטאַקס האט שוין אַרום פֿאַר די פאַרגאַנגענהייַט פּאָר חדשים אָדער ווען 5.4 געקומען אַרום. דאס איז ווי איר אינדעקס. פּונקט ווי אין C ווי איר וואָלט אינדעקס דורך קוואַדראַט בראַקאַץ ווי $ מענגע [0], $ מענגע [1], $ מענגע [2], איר אינדעקס די זעלבע וועג אויב איר פּאַסירן צו האָבן דיין ינדיסעס זייַענדיק סטרינגס. אַזוי $ מענגע ['אַ'] און $ מענגע ['ב']. $ מענגע [ב]. וואָס וואָלט דאָס זייַן אומרעכט? עס וועט מיסטאָמע דזשענערייט אַ ווארענונג אָבער נאָך אַרבעט. פפּ טענדז צו טאָן וואָס. עס טענדז צו נאָר, "איך בין געגאנגען צו וואָרענען איר וועגן דעם, אָבער איך בין נאָר געגאנגען צו האַלטן געגאנגען "און טאָן וועלכער איך קען." עס וועט מיסטאָמע איבערזעצן דעם צו אַ שטריקל, אָבער עס איז מעגלעך אַז אין עטלעכע פונט אין דער פאַרגאַנגענהייַט עמעצער האט געזאגט דעפינירן בייטן צו זייַן 'העלא וועלט'. אַזוי איצט בייטן קען זייַן אַ קעסיידערדיק און $ מענגע [ב] וועט פאקטיש זייַן טאן 'העלא וועלט'. איך טראַכטן אין דעם פונט, אָדער בייַ מינדסטער אונדזער פפּ סעטטינגס, אויב איר פּרובירן צו אינדעקס אין אַ מענגע און אַז שליסל טוט נישט עקזיסטירן, עס וועט פאַרלאָזן. איך טאָן ניט טראַכטן עס וועט נאָר וואָרענען איר. אָדער בייַ מינדסטער איר קענען שטעלן עס אַזוי אַז עס טוט נישט נאָר וואָרענען איר, עס נאָר גלייַך אַרויף פיילז. די וועג איר טשעק צו זען אויב עס פאקטיש איז אַזאַ אַן אינדעקס איז יססעט. אַזוי יססעט ($ מענגע ['העלא וועלט']) וועט צוריקקומען פאַלש. יססעט ($ מענגע ['ב']) וועט צוריקקומען אמת. איר קענען מישן די סינטאַקסעס. איך בין שיין זיכער וואָס דאָס מענגע וואָלט סוף אַרויף זייַענדיק איז - מיר קענען פּרובירן עס אויס. אָה, איך דאַרפֿן פפּוואָרד. דאס איז מיקסינג דעם סינטאַקס ווו איר ספּעציפיצירן וואָס דער שליסל איז און איר טאָן ניט ספּעציפיצירן וואָס דער שליסל איז. אַזוי 3 רעכט דאָ איז אַ ווערט. איר האָט נישט בפירוש געזאגט וואָס זייַן שליסל איז געגאנגען צו זייַן. וואָס טאָן איר טראַכטן זייַן שליסל איז געגאנגען צו זייַן? [תּלמיד] 0. >> איך בין געסינג 0 בלויז ווייַל עס ס דער ערשטער איינער מיר האָבן נישט ספּעסאַפייד. מיר קענען פאקטיש טאָן אַ פּאָר פון די קאַסעס. אַזוי פּרינט_ר איז דרוק רעקורסיווע. עס וועט דרוקן די גאנצע מענגע. עס וואָלט דרוק סובאַררייַס פון די מענגע אויב עס זענען געווען קיין. אַזוי פּרינט_ר ($ מענגע); פפּ.טעסט.פפּ. עס טוט קוקן ווי עס געגעבן עס 0. עס ס 'פאקטיש עפּעס צו האַלטן אין גייַסט דאָ, אָבער מיר וועט באַקומען צוריק צו עס אין אַ רגע. אבער וואָס אויב איך פּאַסירן צו מאַכן דעם אינדעקס 1? פפּ טוט נישט דיפערענטשיייט צווישן שטריקל ינדיסעס און ינטעגער ינדיסעס, אַזוי בייַ דעם פונט איך ווע נאָר דיפיינד אַן אינדעקס 1 און איך קענען טאָן ביידע $ מענגע [1] און $ מענגע ['1 '] און עס וועט זייַן די זעלבע אינדעקס און די זעלבע שליסל. אַזוי איצט וואָס טאָן איר טראַכטן 3 איז געגאנגען צו זייַן? >> [תּלמיד] 2. >> [באָוודען] איך בין געסינג 2. יאָ. עס ס 2. וואָס אויב מיר האבן דעם איז 10, דאָס איז 4? וואָס טאָן איר טראַכטן דער אינדעקס פון 3 איז געגאנגען צו זייַן? איך בין טראכטן 11. מייַן טרעפן ווי צו וואָס פפּ טוט - און איך טראַכטן איך ווע געזען דעם פריער - איז עס נאָר האלט שפּור פון וואָס די העכסטן נומעריק אינדעקס עס ס 'געניצט אַזוי ווייַט איז. עס ס קיינמאָל געגאנגען צו באַשטימען אַ שטריקל אינדעקס צו 3. עס וועט שטענדיק זייַן אַ נומעריק אינדעקס. אַזוי עס האלט שפּור פון דעם העכסטן איינער עס ס אַסיינד אַזוי ווייַט, וואָס כאַפּאַנז צו זייַן 10, און עס ס געגאנגען צו געבן 11-3. וואָס איך געזאגט פריער, באַמערקן די וועג עס איז דרוקן דעם מענגע. עס פּרינץ שליסל 10, שליסל 4, שליסל 11, שליסל ד. אָדער אַפֿילו לאָזן ס טאָן - איך טרעפן איך האט נישט שטעלן אַ 0, אָבער עס ס דרוקן 1, 2, 3, 4. וואָס אויב איך באַשטימען דאָ? אָדער לאָזן ס פאקטיש באַשטימען די 2. איצט עס פּרינץ 2, 1, 3, 4. פפּ ס ערייז זענען נישט נאָר ווי דיין רעגולער האַש טיש. עס ס בישליימעס גלייַך צו טראַכטן פון זיי ווי האַש טישן 99% פון די צייַט. אבער אין אייער האַש טישן דאָרט ס קיין זינען פון דעם סדר אין וואָס דאס זענען ינסערטאַד. אַזוי ווי באַלד ווי איר אַרייַנלייגן עס אין דיין האַש טיש, יבערנעמען דאָרט ס קיין לינגקט רשימה און איר קען ריכטער ין אַ לינגקט רשימה וואָס איז געווען ינסערטאַד ערשטער. אבער דאָ מיר ינסערטאַד 2 ערשטער און עס ווייסט ווען עס ס דרוקן אויס דעם מענגע אַז 2 קומט ערשטער. עס טוט נישט דרוקן עס אויס אין נאָר קיין סדר. די טעכניש דאַטן סטרוקטור אַז עס ס ניצן איז אַ באפוילן מאַפּע, אַזוי עס מאַפּס קיז צו וואַלועס און עס געדענקט די סדר אין וואָס יענע קיז זענען ינסערטאַד. בייסיקלי עס ס צו עטלעכע קאַמפּלאַקיישאַנז ווו עס ס אַנויינג צו פאקטיש - זאל ס זאָגן איר האָבן אַ מענגע 0, 1, 2, 3, 4, 5 און איר ווילן צו נעמען אויס אינדעקס 2. איין וועג פון טאן עס, לאָזן ס זען וואָס וואָס קוקט ווי. 0, 2, 1, 3, 4. אַנסעט כאַפּאַנז צו אַנסעט ביידע וועריאַבאַלז און מענגע ינדיסעס. אַזוי אַנסעט ($ מענגע [2]); איצט וואָס ס דעם געגאנגען צו קוקן ווי? 2 איז נאָר ניטאָ, אַזוי אַז ס בישליימעס פייַן. מער אַנויינג איז אויב איר ווילן דאס צו פאקטיש זייַן ווי אַ מענגע. איך וועט שטעלן טראַפ - נומערן. איצט באַמערקן מיין ינדיסעס. איך ווילן עס צו נאָר זייַן ווי אַ C מענגע ווו עס גייט פון 0 צו לענג - 1 און איך קענען יטעראַטע איבער אים ווי אַזאַ. אבער ווי באַלד ווי איך אַנסעט די רגע אינדעקס, וואָס איז געווען אין אינדעקס 3 טוט נישט איצט ווערן אינדעקס 2. אַנשטאָט עס נאָר רימוווז אַז אינדעקס און איצט איר גיין 0, 1, 3, 4. דאס איז בישליימעס גלייַך. עס ס נאָר אַנויינג און איר האָבן צו טאָן זאכן ווי מענגע ספּלייס. יאָ. [תּלמיד] וואָס וואָלט פּאַסירן אויב איר האט אַ פֿאַר שלייף און איר געוואלט צו גיין איבער אַלע די יסודות? ווען עס שלאָגן 2, וואָלט עס טראָגן אלץ? יטעראַטינג איבער אַ מענגע. עס זענען 2 וועגן איר קענען טאָן עס. איר קענען נוצן אַ רעגולער פֿאַר שלייף. דאס איז אן אנדער ינטראַקאַסי פון פפּ. רובֿ שפּראַכן, איך וואָלט זאָגן, האָבן עטלעכע סאָרט פון לענג אָדער לען אָדער עפּעס ינדאַקייטינג די לענג פון אַ מענגע. אין פפּ עס ס ציילן. אַזוי ציילן ($ מענגע); $ איך + +) זאל ס נאָר דרוקן ($ מענגע [$ איך]); נאָטיץ: ונדעפינעד פאָטאָ: 2. עס ס נאָר געגאנגען צו פאַרלאָזן. דאס איז די סיבה וואָס, פֿאַר די רובֿ טייל, איר קיינמאָל דאַרפֿן צו יטעראַטע איבער אַ מענגע ווי דעם. עס זאל זייַן אַ גוזמע, אָבער איר קיינמאָל דאַרפֿן צו יטעראַטע איבער אַ מענגע ווי דעם ווייַל פפּ גיט זייַן פאָרעאַטש סינטאַקס ווו פאָרעאַטש ($ מענגע ווי $ נומער). איצט אויב מיר דרוקן ($ נומער); - וויל דיסקוטירן עס אין אַ רגע - וואָס אַרבעט בישליימעס פייַן. די וועג וואָס פאָרעאַטש איז ארבעטן איז דער ערשטער אַרגומענט איז די מענגע אַז איר ניטאָ יטעראַטינג איבער. און די רגע אַרגומענט, נומער, דורך יעדער פאָרן פון די פֿאַר שלייף עס ס געגאנגען צו נעמען אויף דער ווייַטער זאַך אין די מענגע. אַזוי געדענקען די מענגע האט אַ סדר. דער ערשטער צייַט דורך די פֿאַר שלייף, נומער איז געגאנגען צו זייַן 123 דעמאָלט עס וועט זייַן 12 דעמאָלט עס וועט זייַן 13 דעמאָלט עס וועט זייַן 23 דעמאָלט עס וועט זייַן 213. דאס באַקומען טאַקע טשודנע ווען איר טאָן עפּעס ווי פאָרעאַטש. זאל ס זען וואָס כאַפּאַנז ווייַל איר זאָל קיינמאָל טאָן דעם. וואָס אויב מיר אַנסעט ($ מענגע [1]); וואָס איז געווען מיסטאָמע דערוואַרט. איר רע יטעראַטינג איבער דעם מענגע, און יעדער מאָל איר ניטאָ ונסעטטינג דער ערשטער אינדעקס. אַזוי פֿאַר אינדעקס 0, דער ערשטער זאַך, נומער נעמט אויף ווערט 0, אַזוי עס ס געגאנגען צו זייַן 123. אבער ין פון די פֿאַר שלייף מיר אַנסעט אינדעקס 1, אַזוי אַז מיטל 12 איז ניטאָ. אַזוי דרוקן. פפּ_עאָל. פפּ_עאָל איז נאָר נעוולינע, אָבער עס ס טעקניקלי מער פּאָרטאַטיוו זינט נעוולינעס אין פֿענצטער איז אַנדערש פון נעוולינעס אויף מעק און יוניקס. אויף פֿענצטער נעוולינע איז \ ר \ N, וועראַז אומעטום אַנדערש עס טענדז נאָר צו זייַן \ ען. פפּ_עאָל איז קאַנפיגיערד אַזוי אַז עס ניצט וועלכער די נעוולינע פון ​​דיין סיסטעם איז. אַזוי דרוקן אַז. זאל ס נישט פּרינט_ר ($ מענגע) אין די סוף. איך האט קיין געדאַנק אַז וואָס וואָלט זייַן די נאַטור. נומער נאָך נעמט אויף די ווערט 12 אַפֿילו כאָטש מיר אַנסעט 12 איידער מיר אלץ גאַט צו אים פון די מענגע. דו זאלסט נישט נעמען מיין וואָרט אויף דעם, אָבער עס קוקט ווי פאָרעאַטש קריייץ אַ קאָפּיע פון ​​דעם מענגע און דעמאָלט נומער נעמט אויף אַלע וואַלועס פון וואָס קאָפּיע. אַזוי אַפֿילו אויב איר מאָדיפיצירן די מענגע ין די פֿאַר שלייף, עס וועט ניט זאָרגן. נומער וועט נעמען אויף די אָריגינעל וואַלועס. זאל ס פּרובירן ונסעטטינג עס. וואָס אויב דאָס איז $ מענגע [1] = "העלא"; אפילו כאָטש מיר שטעלן "העלא" אין די מענגע, נומער קיינמאָל נעמט אויף וואָס ווערט. עס ס אנדערן סינטאַקס צו פאָרעאַטש לופּס ווו איר שטעלן 2 וועריאַבאַלז אפגעשיידט דורך אַ פייַל. דאס ערשטער בייַטעוודיק איז געגאנגען צו זייַן די שליסל פון וואָס ווערט, און דעם רגע בייַטעוודיק איז געגאנגען צו זייַן די זעלבע פּינטלעך נומער. דאס איז אַנינטראַסטינג דאָ, אָבער אויב מיר גיין צוריק צו אונדזער אָריגינעל פאַל פון 'אַ' -> 1, 'ב' -> 1, דאָ אויב מיר נאָר יטעראַטע פֿאַר יעדער מענגע ווי נומער, נומער איז געגאנגען צו זייַן 1 יעדער איין מאָל. אבער אויב מיר אויך ווילן צו וויסן די שליסל פארבונדן מיט אַז נומער דעמאָלט מיר טאָן ווי $ שליסל -> $ נומער. אַזוי איצט מיר קענען טאָן דרוקן ($ שליסל. ':'. איצט עס ס יטעראַטינג איבער און דרוקן יעדער שליסל און זייַן פארבונדן ווערט. אַן נאָך זאַך מיר קענען טאָן אין פאָרעאַטש לופּס איז איר זאל זען דעם סינטאַקס. אַמפּערסאַנדס איידער בייַטעוודיק נעמען טענד צו זייַן ווי פפּ טוט באַווייַזן. ווו באַווייַזן זענען זייער ענלעך צו פּוינטערז, איר טאָן ניט האָבן פּוינטערז, אַזוי איר קיינמאָל האַנדלען מיט זכּרון גלייַך. אבער איר טאָן האָבן באַווייַזן ווו 1 בייַטעוודיק רעפערס צו די זעלבע זאַך ווי אן אנדער בייַטעוודיק. ין פון דאָ לאָזן ס טאָן $ נומער. זאל ס גיין צוריק צו 1, 10. זאל ס טאָן $ נומער + +; אַז נאָך יגזיסץ אין פפּ. איר קענען נאָך טאָן + +. פפּ.טעסט.פפּ. איך האָבן צו דרוקן עס. פּרינט_ר ($ מענגע); מיר דרוקן 2, 11. אויב איך האט נאָר געטאן פאָרעאַטש ($ מענגע ווי $ נומער) דעריבער נומער וועט זייַן די ווערט 1 דער ערשטער צייַט דורך די שלייף. עס וועט ינקראַמאַנט 1-2 און דעמאָלט מיר רע געטאן. אַזוי דעמאָלט עס וועט גיין דורך די רגע פאָרן פון די שלייף און אַז נומער איז 10. עס ינגקראַמאַנץ פּונקט צו 11, און דעריבער אַז ס נאָר ארלנגעווארפן אַוועק. דעמאָלט מיר פּרינט_ר ($ מענגע); און לאָזן ס זען אַז דאָס איז נאָר 1, 10. אַזוי די ינקראַמאַנט מיר האט איז געווען פאַרפאַלן. אבער פאָרעאַטש ($ מענגע ווי & $ נומער) איצט דעם נומער איז די זעלבע נומער ווי דעם רעכט דאָ. עס ס די זעלבע זאַך. אַזוי $ נומער + + איז מאַדאַפייינג מענגע 0. בייסיקלי, איר קענען אויך טאָן $ ק -> $ נומער און איר קענען טאָן $ מענגע [$ ק] + +; אַזוי אנדערן וועג פון טאן אַז, מיר זענען פֿרייַ צו מאָדיפיצירן נומער, אָבער וואָס וועט ניט מאָדיפיצירן אונדזער אָריגינעל מענגע. אבער אויב מיר נוצן ק, וואָס איז אונדזער שליסל, דעמאָלט מיר קענען נאָר אינדעקס אין אונדזער מענגע ניצן אַז שליסל און ינקראַמאַנט אַז. דאס מער גלייַך מאַדאַפייז אונדזער אָריגינעל מענגע. איר קענען אַפֿילו טאָן אַז אויב פֿאַר עטלעכע סיבה איר געוואלט די פיייקייַט צו מאָדיפיצירן - פאקטיש, דאָס איז בישליימעס גלייַך. איר האט נישט וועלן צו האָבן צו שרייַבן $ מענגע [$ ק] + +, איר נאָר געוואלט צו שרייַבן $ נומער + + אָבער איר נאָך געוואלט צו זאָגן אויב ($ ק === 'אַ') דעמאָלט ינקראַמאַנט נומער און דעמאָלט דרוק אונדזער מענגע. אַזוי איצט וואָס טאָן מיר דערוואַרטן פּרינט_ר צו טאָן? וואָס וואַלועס זאָל זייַן געדרוקט? [תּלמיד] 2 און 10. >> [באָוודען] בלויז אויב דער שליסל איז געווען 'אַ' טאָן מיר פאקטיש דרוקן אַז. איר מיסטאָמע זייער ראַרעלי, אויב אלץ, וועט דאַרפֿן צו דעפינירן פאַנגקשאַנז אין פפּ, אָבער איר זאל זען עפּעס ענלעך ווו איר דעפינירן אַ פונקציאָנירן ווי פונקציאָנירן וועלכער. יוזשאַוואַלי איר וואָלט זאָגן ($ פו, $ באַר) און דעמאָלט דעפינירן עס צו זייַן וועלכער. אבער אויב איך טאָן דאָס, דעמאָלט אַז מיטל אַז וועלכער רופט וועלכער, וועלכער רופט באַז, אַזוי דער ערשטער אַרגומענט דורכגעגאנגען צו באַז קענען זייַן געביטן. זאל ס טאָן $ פו + +; און ין פון דאָ לאָזן ס טאָן באַז ($ נומער); איצט מיר זענען פאַך אַ פֿונקציע. דער אַרגומענט איז גענומען דורך דערמאָנען, וואָס מיטל אַז אויב מיר מאָדיפיצירן עס מיר רע מאַדאַפייינג די זאַך וואָס איז דורכגעגאנגען ין און דרוק דעם מיר דערוואַרטן - סייַדן איך מעסט זיך סינטאַקס - מיר גאַט 2, 11, אַזוי עס איז פאקטיש ינקרעמענטעד. נאָטיץ מיר דאַרפֿן באַווייַזן אין 2 ערטער. וואָס אויב איך האט דאָס? וואָס טוט דאָס מיינען? [תּלמיד] עס וועט טוישן. >> יאָ. נומער איז נאָר אַ קאָפּיע פון ​​דעם ווערט אין דער מענגע. אַזוי נומער וועט טוישן צו 2, אָבער די מענגע ['אַ'] וועט נאָך זייַן 1. אָדער וואָס אויב איך טאָן דעם? איצט נומער איז געשיקט ווי אַ קאָפּיע צו באַז. אַזוי די קאָפּיע פון ​​דעם אַרגומענט וועט זייַן ינקרעמענטעד צו 2, אָבער נומער זיך איז קיינמאָל ינקרעמענטעד צו 2. און פּונקט איז די זעלבע זאַך ווי מענגע קאַנטיקער וועלכער, אַזוי אַז מענגע איז קיינמאָל ינקרעמענטעד. אַזוי ביידע יענע ערטער דאַרפֿן עס. פפּ איז יוזשאַוואַלי שיין קלוג וועגן דעם. איר זאל טראַכטן איך ווילן צו פאָרן דורך דערמאָנען - דאס איז פאקטיש אַ קשיא אויף איינער פון די פּסעץ. עס איז געווען אַ קוועסטיאָנס.טקסט זאַך ווו עס האט געזאגט, פארוואס זאל איר ווילן צו פאָרן דעם סטרוקט דורך דערמאָנען? וואָס איז געווען די ענטפער צו וואָס? [תּלמיד] אזוי איר טאָן ניט האָבן צו קאָפּיע עפּעס גרויס. >> יאָ. א סטרוקט קענען זייַן אַרביטרעראַלי גרויס, און ווען איר פאָרן די סטרוקט אין ווי אַן אַרגומענט עס דאַרף צו צייכענען אַז גאַנץ סטרוקט צו פאָרן עס צו די פֿונקציע, וועראַז אויב איר נאָר פאָרן די סטרוקט דורך דערמאָנען דעמאָלט עס נאָר דאַרף צו צייכענען אַ 4-ביטע אַדרעס ווי דער אַרגומענט צו די פֿונקציע. פפּ איז אַ קליין ביסל סמאַרטער ווי אַז. אויב איך האָבן עטלעכע פונקציאָנירן און איך פאָרן צו אים אַ מענגע פון ​​1.000 זאכן, טוט וואָס מיינען עס ס געגאנגען צו האָבן צו קאָפּיע אַלע 1.000 פון יענע זאכן צו פאָרן עס אין די פֿונקציע? עס טוט ניט האָבן צו טאָן אַז מיד. אויב ין פון דעם פֿונקציע עס קיינמאָל פאקטיש מאַדאַפייז פו, אַזוי אויב ($ פו === 'העלא') צוריקקומען אמת.; נאָטיץ מיר קיינמאָל פאקטיש געווארן מאדיפיצירט דער אַרגומענט ין פון דעם פֿונקציע, וואָס מיטל אַז וועלכער איז דורכגעגאנגען אין ווי פו קיינמאָל דאַרף צו זייַן קאַפּיד ווייַל עס ס נישט מאַדאַפייינג עס. אַזוי די וועג פפּ אַרבעט איז די טענות זענען שטענדיק דורכגעגאנגען דורך דערמאָנען ביז איר פאקטיש פּרובירן צו מאָדיפיצירן עס. איצט אויב איך זאָגן $ פו + +; עס וועט איצט מאַכן אַ קאָפּיע פון ​​דער אָריגינעל פו און מאָדיפיצירן די קאָפּיע. דאס סאַוועס עטלעכע מאָל. אויב איר ניטאָ קיינמאָל רירנדיק דעם מאַסיוו מענגע, איר קיינמאָל פאקטיש מאָדיפיצירן עס, עס טוט נישט דאַרפֿן צו מאַכן די קאָפּי, וועראַז אויב מיר נאָר שטעלן דעם אַמפּערסאַנד אַז מיטל עס טוט נישט אַפֿילו קאָפּיע עס אַפֿילו אויב איר טאָן מאָדיפיצירן עס. דאס אָפּפירונג איז גערופן קאָפּיע-אויף-שרייַבן. איר וועט זען עס אין אנדערע ערטער, ספּעציעל אויב איר נעמען אַ אַפּערייטינג סיסטעם קורס. קאָפּי-אויף-שרייַבן איז אַ שיין געוויינטלעך מוסטער ווו איר טאָן ניט דאַרפֿן צו מאַכן אַ קאָפּיע פון ​​עפּעס סייַדן עס ס 'פאקטיש טשאַנגינג. יאָ. [תּלמיד] וואָס אויב איר האט די ינקראַמאַנט ין די פּרובירן, אַזוי בלויז 1 עלעמענט אויס פון 1.000 וואָלט דאַרפֿן צו זייַן געביטן? איך בין נישט זיכער. איך טראַכטן עס וואָלט קאָפּיע די גאנצע זאַך, אָבער עס ס מעגלעך עס ס קלוג גענוג אַז - פאקטיש, וואָס איך בין טראכטן איז ימאַדזשאַן מיר געהאט אַ מענגע וואָס קוקט ווי דאָס: $ אַררייַ2 = [ דעמאָלט אינדעקס 'אַ' איז אַ מענגע פון ​​[1 2 3 4], און אינדעקס 'ב' איז אַ מענגע פון ​​וועלכער. איך דאַרפֿן קאָמעס צווישן אַלע פון ​​יענע. ימאַדזשאַן עס זענען קאָמעס. דעמאָלט 'C' איז די ווערט 3. אָוקיי. איצט לאָזן ס זאָגן מיר טאָן $ באַז ($ אַררייַ2); ווו באַז טוט נישט נעמען דעם דורך דערמאָנען. אַזוי $ פו ['C'] + +; דאס איז אַזאַ אַ בייַשפּיל ווו מיר זענען גייט פארביי אַררייַ2 ווי אַן אַרגומענט און דעמאָלט עס איז מאַדאַפייינג אַ ספּעציפיש אינדעקס פון דער מענגע דורך ינקרעמענטינג עס. איך האָנעסטלי האָבן קיין געדאַנק וואָס פפּ איז געגאנגען צו טאָן. עס קענען לייכט מאַכן אַ קאָפּיע פון ​​די גאנצע זאַך, אָבער אויב עס ס קלוג, עס וועט מאַכן אַ קאָפּיע פון ​​די שליסלען ווו דאָס וועט האָבן זייַן בוילעט ווערט אָבער דאָס קענען נאָך פונט צו די זעלבע מענגע 1,2,3,4 און דאָס קענען נאָך פונט צו די זעלבע מענגע. איך וועט יפּאַד עס. מיר פאָרן אין דעם מענגע ווו דעם באָכער פונקטן צו 3, דעם באָכער פונקטן צו [1,2,3,4], דעם באָכער פונקטן צו [34, ...] איצט אַז מיר רע גייט פארביי עס אין צו באַז, מיר זענען מאַדאַפייינג דעם. אויב פפּ איז קלוג, עס קען נאָר טאָן - מיר נאָך האבן צו קאָפּיע עטלעכע זכּרון, אָבער אויב עס זענען געווען די ריזיק נעסטעד סובאַררייַס מיר האט ניט דאַרפֿן צו קאָפּיע יענע. איך טאָן ניט וויסן אויב אַז ס וואָס עס טוט, אָבער איך קענען ימאַדזשאַן עס טאן וואָס. דאס איז אויך אַ שיין גרויס מייַלע פון ​​C איבער פפּ. פפּ מאכט לעבן אַזוי פיל גרינגער פֿאַר אַ פּלאַץ פון זאכן, אָבער איר מין פון האָבן לעגאַמרע קיין געדאַנק ווי גוט עס וועט דורכפירן ווייַל איך האָבן קיין געדאַנק ונטער דער קאַפּטער ווען עס ס מאַקינג די קאפיעס פון זאכן, אָה, איז אַז געגאנגען צו זייַן אַ קעסיידערדיק צייַט קאָפּיע, איז עס נאָר געגאנגען צו טוישן 1 טייַטל, איז עס געגאנגען צו זייַן אַ ראַדיקיאַלאַסלי שווער לינעאַר קאָפּי? וואָס אויב עס קענען ניט געפֿינען פּלאַץ? טוט עס דעמאָלט דאַרפֿן צו לויפן מיסט זאַמלונג צו באַקומען עטלעכע מער פּלאַץ? און מיסט זאַמלונג קענען נעמען אַרביטרעראַלי לאַנג. אין C איר טאָן ניט האָבן צו זאָרג וועגן די זאכן. יעדער איין שורה איר שרייַבן איר קענען שיין פיל סיבה וועגן ווי עס ס געגאנגען צו דורכפירן. זאל ס קוק צוריק בייַ די. ווי פייַן איז עס וואָס איר טאָן ניט האָבן צו האַנדלען מיט האַש פאַנגקשאַנז, לינגקט רשימות, אָדער עפּעס ווי וואָס? זינט ארבעטן מיט האַש טישן איז אַזוי גרינג איצט, דאָ ס אַ שפּאַס רעטעניש צו אַרבעטן אויף. עפענען זיך אַ טעקע גערופן וניקווע.פפּ און אין עס שרייַבן אַ פפּ פּראָגראַם (אויך באקאנט ווי אַ "שריפט"). מיר טענד צו רופן זיי סקריפּס אויב זיי ניטאָ קורץ זאכן וואָס איר לויפן אין די באַפֿעל שורה. בייסיקלי, קיין שפּראַך אַז איר טאָן נישט צונויפנעמען אָבער איר ניטאָ געגאנגען צו לויפן די עקסעקוטאַבלע בייַ די באַפֿעל שורה, איר קענען רופן אַז עקסעקוטאַבלע שריפט. איך קען נאָר ווי גוט שרייַבן אַ C פּראָגראַם וואָס טוט דאָס, אָבער איך טאָן ניט רופן עס אַ שריפט זינט איך ערשטער צונויפנעמען עס און דעמאָלט לויפן די ביינערי. אבער דעם פפּ פּראָגראַם מיר רע געגאנגען צו רופן אַ שריפט. אָדער אויב מיר געשריבן עס אין פּיטהאָן אָדער פּערל אָדער נאָדע.דזשס אָדער קיין פון יענע זאכן, מיר 'ד רופן זיי אַלע סקריפּס ווייַל איר לויפן זיי בייַ די באַפֿעל שורה אָבער מיר טאָן נישט צונויפנעמען זיי. מיר קען טאָן דעם שיין געשווינד. מיר זענען נישט געגאנגען צו נוצן אַרגוו. זאל ס נאָר קלאַפּ דורך דעם. רוף עס יינציק, שרייַבן אַ פּראָגראַם. איר קענען יבערנעמען אַז די אַרייַנשרייַב וועט אַנטהאַלטן איין וואָרט פּער שורה. פאקטיש, אַרגוו וועט זייַן שיין נישטיק צו נוצן. וניקווע.פפּ. ערשטער זאַך ערשטער, מיר ווילן צו טשעק אויב מיר האָבן שוין דורכגעגאנגען 1 באַפֿעל-שורה אַרגומענט. פּונקט ווי איר וואָלט דערוואַרטן אַרגק און אַרגוו אין C, מיר נאָך האָבן יענע אין פפּ. אַזוי אויב ($ אַרגק! == 2) דעריבער איך וועט ניט האַנדלען מיט דרוקן אַ אָנזאָג אָדער עפּעס. איך וועט נאָר אַרויסגאַנג, טעות קאָד פון 1. איך קען אויך צוריקקומען 1. ראַרעלי אין פפּ זענט איר אין דעם שטאַט ווו מיר ניטאָ בייַ - יוזשאַוואַלי איר ניטאָ אין אַ פֿונקציע גערופן דורך אַ פֿונקציע גערופן דורך אַ פֿונקציע גערופן דורך אַ פֿונקציע. און אויב עפּעס גייט פאַלש און איר נאָר ווילן צו אַרויסגאַנג אַלץ לעגאַמרע, אַרויסגאַנג נאָר ענדס די פּראָגראַם. דאס אויך יגזיסץ אין סי אויב איר ניטאָ אין אַ פונקציאָנירן אין אַ פונקציאָנירן אין אַ פונקציאָנירן אין אַ פֿונקציע און איר ווילן צו נאָר טייטן די פּראָגראַם, איר קענען רופן אַרויסגאַנג, און עס וועט נאָר אַרויסגאַנג. אבער אין פפּ עס ס אַפֿילו מער זעלטן אַז מיר זענען אין דעם שפּיץ מדרגה. יוזשאַוואַלי מיר רע ין עטלעכע סאָרט פון פונקציאָנירן, אַזוי מיר רופן אַרויסגאַנג אַזוי אַז מיר טאָן ניט האָבן צו צוריקקומען אַרויף 1 זאַך וואָס דעמאָלט ריאַלייזיז דאָרט ס 'אַ טעות אַזוי אַז קערט זיך אויב וואָס אנערקענט עס איז געווען אַ טעות. מיר טאָן נישט וועלן צו האַנדלען מיט וואָס, אַזוי אַרויסגאַנג (1); צוריקקומען (1); אין דעם פאַל וואָלט זייַן עקוויוואַלענט. דעמאָלט וואָס מיר ווילן צו עפענען מיר ווילן צו פאָפּען. די טענות זענען געגאנגען צו קוקן שיין ענלעך. מיר ווילן צו פאָפּען ($ אַרגוו [1], און מיר ווילן צו עפענען עס פֿאַר לייענען. וואָס קערט אַ מיטל וואָס מיר רע געגאנגען צו רופן F. דאס קוקט שיין ענלעך צו ווי C טוט עס חוץ מיר טאָן ניט האָבן צו זאָגן טעקע *. אַנשטאָט מיר נאָר זאָגן $ F. אָוקיי. פאקטיש, איך טראַכטן דעם אַפֿילו גיט אונדז אַ אָנצוהערעניש ווי צו פפּ פונקציאָנירן גערופן טעקע. פפּ טעקע. וואָס דאָס איז געגאנגען צו טאָן איז לייענען אַ גאנצע טעקע אין אַ מענגע. איר טאָן ניט אַפֿילו דאַרפֿן צו פאָפּען עס. עס ס געגאנגען צו טאָן אַז פֿאַר איר. אַזוי $ שורות = טעקע ($ אַרגוו [1]); איצט אַלע פון ​​די שורות פון דער טעקע זענען אין שורות. איצט מיר ווילן צו סאָרט די שורות. ווי קענען מיר סאָרט די שורות? מיר סאָרט די שורות. און איצט מיר קענען דרוקן זיי אָדער וועלכער. מיסטאָמע די יזיאַסט וועג איז פאָרעאַטש ($ שורות ווי $ שורה) ווידערקאָל $ שורה; [תּלמיד] וואָלט נישט מיר אַפֿילו קרייַז שורות דורך רעפעראַנסינג עפּעס אין סאָרט? דאס איז ווו סאָרט וואָלט זייַן דיפיינד ווי פונקציאָנירן סאָרט (& $ מענגע). ווען איר רופן די פֿונקציע איר טאָן ניט פאָרן עס דורך דערמאָנען. עס ס די פֿונקציע אַז דיפיינז עס ווי גענומען עס ווי דערמאָנען. דאס איז פאקטיש פּונקט וואָס געגאנגען אומרעכט ווען מיר שטעלן אַלץ צו אונדזער סערווערס ווען מיר געגאנגען 5.3-5.4. אַרויף ביז 5.4, דאָס איז געווען בישליימעס גלייַך. א פֿונקציע טוט ניט דערוואַרטן צו נעמען עס ווי דערמאָנען, אָבער איר קענען פאָרן עס ווי דערמאָנען אַזוי אויב דער פֿונקציע טוט פּאַסירן צו מאָדיפיצירן עס, עס ס נאָך מאַדאַפייד. ווי פון 5.4, איר ניטאָ ניט געמיינט צו טאָן דעם. אַזוי איצט די בלויז וועג איר פאָרן דורך דערמאָנען איז אויב די פֿונקציע בפירוש טוט עס. אויב איר טאָן ניט ווילן עס צו מאָדיפיצירן עס, דעריבער איר דאַרפֿן צו טאָן $ קאָפּיע = $ שורות און פאָרן קאָפּיע. אַזוי איצט שורות וועט זייַן אפגעהיט און קאָפּיע וועט זייַן געביטן. פפּ.וניקווע.פפּ. איך זאל האָבן מעסט עפּעס אַרויף. אומגעריכט 'סאָרט'. עס ס געגאנגען צו זייַן עפּעס וואָס טוט דאָס פֿאַר אונדז. עס ס נישט אַפֿילו דאָרט. נאָטיץ ווען איר לייענען דעם מאַנואַל אַז דער ערשטער אַרגומענט איז דערוואַרט צו זייַן אַ מענגע און עס ס גענומען דורך דערמאָנען. פארוואס איז דאָס קאַמפּליינינג צו מיר? ווייַל איך האָבן דעם פֿונקציע סאָרט נאָך אין דאָ אַז איך טאָן ניט ווילן. אָוקיי, פפּ.וניקווע.פפּ. איך האט ניט פאָרן עס אַן אַרגומענט ווייַל איך טאָן ניט האָבן אַ טעקע. עס ס פפּ.וניקווע.פפּ אויף טעסט.פפּ. דאָ איז טעסט.פפּ אַלע געדרוקט אויס אין אַ פייַן אויסגעשטעלט סדר. נאָטיץ אַז אויסגעשטעלט סדר איז מין פון טשודנע פֿאַר אַ קאָד טעקע ווייַל אַלע פון ​​אונדזער ליידיק שורות זענען געגאנגען צו קומען ערשטער דעמאָלט זענען געגאנגען צו קומען אַלע פון ​​אונדזער 1 מדרגה ינדענטאַטיאָנס דעמאָלט קומען אַלע פון ​​אונדזער קיין ינדענטאַטיאָנס. יאָ. >> [תּלמיד] אזוי פֿאַר די מקור קאָד עס איז נישט דורכגעגאנגען דורך דערמאָנען? איז אַז בכלל דורכגעגאנגען דורך ווערט? [באָוודען] ווען איר רופן אַ פֿונקציע, עס קיינמאָל דאַטערמאַנז צי עס איז דורכגעגאנגען דורך דערמאָנען. עס ס די פֿונקציע דעפֿיניציע וואָס דאַטערמאַנז צי עס איז דורכגעגאנגען דורך דערמאָנען. און קוקן בייַ די פֿונקציע דעפֿיניציע פון ​​סאָרט אָדער נאָר קוקן אין דעם, עס נעמט די אַרגומענט דורך דערמאָנען. אַזוי ראַגאַרדלאַס פון צי איר ווילן עס צו נעמען עס דורך דערמאָנען, עס טוט נעמען עס דורך דערמאָנען. עס מאַדאַפייז די מענגע אין פּלאַץ. דאס איז נאָר נישט ערלויבט. איר רע נישט ערלויבט צו טאָן דעם. >> [תּלמיד] אָה, אָוקיי. [באָוודען] דאס, סאָרט איז געגאנגען צו נעמען שורות דורך דערמאָנען און מאָדיפיצירן עס. און ווידער, אויב איר האט ניט ווילן עס צו טאָן וואָס, איר קען מאַכן אַ קאָפּיע פון ​​סאָרט. אפילו אין דעם פאַל, קאָפּיע איז נישט פאקטיש אַ קאָפּיע פון ​​שורות. עס נאָר ווייזט צו די זעלבע זאַך ביז עס ערשטער געץ מאַדאַפייד, ווו עס ס ערשטער געגאנגען צו באַקומען געווארן מאדיפיצירט אין די סאָרט פֿונקציע, ווו, ווייַל עס ס קאָפּיע-אויף-שרייַבן, איצט אַ קאָפּיע פון ​​קאָפּיע איז געגאנגען צו זייַן געמאכט. איר קענען אויך טאָן דעם. אַז ס די אנדערע אָרט איר קענען זען אַמפּערסאַנד. איר זען עס אין פאָרעאַטש לופּס, איר זען עס אין פונקציאָנירן דעקלעריישאַנז, און איר זען עס ווען נאָר אַסיינינג וועריאַבאַלז. איצט מיר האָבן פארענדיקט גאָרנישט דורך טאן דעם ווייַל קאָפּיע און שורות זענען ממש די זעלבע זאַך. איר קענען נוצן שורות און קאָפּיע ינטערטשיינדזשאַבלי. איר קענען טאָן אַנסעט ($ קאָפּיע); און וואָס טוט ניט אַנסעט שורות, איר נאָר פאַרלירן דיין דערמאָנען צו די זעלבע זאַך. אַזוי ווי פון דעם פונט, איצט שורות איז דער בלויז וועג איר קענען צוטריט שורות. שאלות? יאָ. [תּלמיד] קאַמפּליטלי אַוועק טעמע, אָבער איר טאָן ניט האָבן צו נאָענט פפּ מיט די - >> איר טאָן ניט. אָוקיי. [באָוודען] איך וואָלט גיין ווי ווייַט ווי צו זאָגן עס ס שלעכט פיר צו נאָענט זיי. אַז ס מיסטאָמע אַ גוזמע, ספּעציעל אין אַ שריפט, אָבער לאָזן ס זען וואָס כאַפּאַנז אויב איך טאָן דעם. וואָס האט גאָרנישט. וואָס אויב איך געוואלט - [סייז] איך דאַרפֿן צו פאָרן אַן אַרגומענט. דרייען. איך גערופן עס פאַלש. אַזוי פפּ.וניקווע.פפּ מיט אַן אַרגומענט. איצט איך טאָן ניט אַפֿילו דאַרפֿן דאָס. איך וועט פאָרן עס אַ גילטיק אַרגומענט. דאס געדרוקט וועלכער עס ס דרוקן. איך בין דרוקן קאָפּיע און קאָפּיע טוט נישט עקזיסטירן. אַזוי שורות. עס געדרוקט אַלץ, און דעמאָלט באַמערקן אַלע דעם אָפּפאַל אַראָפּ דאָ, ווייַל אין פפּ עפּעס וואָס איז אַרויס פון פפּ Tags איז נאָר געגאנגען צו זייַן געדרוקט ממש. אַז ס וואָס HTML, עס ס אַזוי פייַן אַז איך קענען טאָן דיוו בלאַ, בלאַ, בלאַ קלאַס אָדער וועלכער, בלאַ, בלאַ, בלאַ און דעמאָלט טאָן עטלעכע פפּ קאָד און דעמאָלט טאָן סוף דיוו. און איצט דרוקן דעם איך באַקומען מיין פייַן דיוו אַרויף שפּיץ, אַלץ אַז פפּ געדרוקט, דיוו בייַ דנאָ. דיסאַסטראָוס ווען עפּעס ווי דעם כאַפּאַנז, וואָס איז שיין פּראָסט, נאָר אַ בלאָנדזשען נעוולינע בייַ די דנאָ פון טעקע. איר וואָלט נישט טראַכטן עס וואָלט זייַן אַז גרויס פון אַ האַנדלען ביז איר באַטראַכטן די פאַקט אַז מיט בראַוזערז - ווי רעדירעקץ אַרבעט אָדער בייסיקלי קיין כעדערז אַרבעט, ווען איר מאַכן דיין קשר צו אַ וועבזייַטל און עס סענדז צוריק אַלע די כעדערז און זאכן ווי ענטפער 200 אָדער ענטפער רידערעקט אָדער וועלכער, כעדערז זענען בלויז גילטיק ביז דער ערשטער ביטע פון ​​דאַטן איז געשיקט. איר קענען רידערעקט טויזנטער פון מאל, אָבער ווי באַלד ווי דער ערשטער ביטע פון ​​דאַטן איז געשיקט איר ניטאָ ניט געמיינט צו רידערעקט ווידער. אויב איר האָבן אַ בלאָנדזשען נעוולינע בייַ די דנאָ פון אַ טעקע און לאָזן 'ס זאָגן אַז איר נוצן דעם פֿונקציע און דאַן איר ווילן צו - זאל ס זאָגן עס ס אן אנדער טעקע אַז ס ינדעקס.פפּ און איר רעקווירע_אָנסע עפּעס - איך קען נישט טראַכטן פון אַ גוטע בייַשפּיל פון עס. די אַרויסגעבן כאַפּאַנז ווען דעם שורה אין די דנאָ געץ עקאָוד. איר טאָן ניט ווילן עפּעס צו האָבן געווען עקאָוד נאָך. אפילו כאָטש איר האט ניט אויסן אויף עפּעס געטינג עקאָוד, עפּעס האט באַקומען עקאָוד און אַזוי איצט איר ניטאָ ניט געמיינט צו שיקן קיין מער כעדערז און איר ניטאָ געגאנגען צו באַקומען טענות. איר נאָר טאָן ניט דאַרפֿן יענע קלאָוזינג טאַגס. אויב איר פּלאַן אויף טאן עפּעס מיט HTML - און עס ס בישליימעס גלייַך צו טאָן אַראָפּ דאָ דיוו וועלכער און דעמאָלט בייַ דעם פונט איר קענען אָדער איר קענען ניט אַרייַננעמען זיי. עס טוט ניט טאַקע ענין. אבער אין פפּ סקריפּס עס ס 'זעלטן צו נאָענט עס. ווען אַלץ איז פפּ, לעגאַמרע אַלץ, איר טאָן ניט טאַקע דאַרפֿן צו נאָענט עס / איר זאָל ניט נאָענט עס. דילינג מיט סטרינגס איז פיל ניסער ווי אין סי אין פפּ איר קענען ספּעציפיצירן אַ שטריקל מיט איין אָדער טאָפּל קוואָטעס. מיט איין קוואָטעס איר קענען ניט נוצן "אַנטלויפן" סיקוואַנסיז. קעסיידער אַנטלויפן, בלאַ, בלאַ, בלאַ. אַזוי פּרינטף איז זייער זעלטן אין פפּ. איך טרעפן איך וואָלט נוצן פּרינטף אויב איך געוואלט צו טאָן אַ סאָרט פון זאַך - אין פּסעט 5 איר געניצט ספּרינטף אָדער וועלכער. אבער איר ווילן צו טאָן 001.דזשפּג און 002.דזשפּג. אַזוי פֿאַר אַז סאָרט פון זאַך ווו איך פאקטיש ווילן צו פֿאָרמאַט די טעקסט איך וואָלט נוצן פּרינטף. אבער אַנדערש איך וואָלט נאָר נוצן שטריקל קאַנקאַטאַניישאַן. איך קיינמאָל טאַקע נוצן פּרינטף. מיר רע נאָר דיפערענטשיייטינג די פרטים צווישן איין קוואָטעס און טאָפּל קוואָטעס. די ביגאַסט חילוק איז אַז איין קוואָטעס, עס וועט זייַן געדרוקט ממש. עס איז קיין טשאַר דאַטן טיפּ אין פפּ, ניט ענלעך C, אַזוי דאָס איז עקוויוואַלענט צו דעם. זיי ניטאָ ביידע סטרינגס. און די פייַן זאַך וועגן איין ציטירן סטרינגס איז איך קען זאָגן 'העלא וועלט!' בלאַ, בלאַ, בלאַ, $ $ וואָאָאָ. וואָס כאַפּאַנז ווען איך דרוק דעם איז עס וועלן דרוקן עס ממש. זאל ס באַקומען באַפרייַען פון אַלע פון ​​אונדזער שטאָפּן. אַזוי ווידערקאָל $ סטר1; עס ממש געדרוקט אַלע פון ​​יענע זאכן: דאָללאַר וואונדער, באַקסלאַש ען, וואָס איר וואָלט טראַכטן וואָלט זייַן נעוולינעס - אַלע פון ​​יענע זאכן עס פּרינץ ממש. דער בלויז זאַך איר דאַרפֿן צו אַנטלויפן זענען איין קוואָטעס ווייַל אַנדערש עס וואָלט טראַכטן עס ס קלאָוזינג די איין קוואָטעס. טאָפּל קוואָטעס, גאָר אַנדערש. מיר שוין זען די סינטאַקס כיילייטינג איז קלוינג אונדז אויף צו וואָס ס וועגן צו גיין טעראַבלי פאַלש. פפּ.וניקווע. ונדעפינעד בייַטעוודיק: וואָאָאָ ווייַל דאָס איז ינטערפּראַטאַד ווי אַ בייַטעוודיק גערופן וואָאָאָ. טאָפּל קוואָטעס לאָזן איר אַרייַנלייגן וועריאַבאַלז אין - זאל ס זאָגן $ נאָמען = "ראָב"; אַזוי ווידערקאָל "הי, מיין נאָמען איז $ נאָמען!!"; עס אנערקענט דעם ווי אַ בייַטעוודיק. ווען איך לויפן וואָס - און איך וועל אַרייַנלייגן אַ נעוולינע - הי, מיין נאָמען איז ראָב!! און העלא וועלט!! דאס איז ווייַל איך קיינמאָל אַוועקגענומען די דרוק פון וואָאָאָ אויבן. עס איז 1 ווייַטער שריט איר קענען טאָן. $ מענגע = [1, 2, 3]; וואָס אויב איך ווילן צו דרוקן די ערשטער אינדעקס פון מענגע? איר טאָן $ מענגע [0]. די סינטאַקס כיילייטינג איז אַ קלו. וואָס איז דאָס געגאנגען צו טאָן? פפּ.וניקווע. הי, מיין נאָמען איז 1!! וואָס איז ניט וואָס איך געוואלט. סינטאַקס כיילייטינג לייד צו מיר. זאל ס 'פּרובירן' אַ '-> 1,' ב '-> 2. אַז ס ווי איך וואָלט האָבן צו שרייַבן עס. אומגעריכט איין ציטירן (ט_ענקאַפּסעד בלאַ, בלאַ, בלאַ, בלאַ, בלאַ). דער געדאַנק איז אַז עס ס נישט רעקאַגנייזינג דעם ווי טייל פון די מענגע. עס ס נישט רעקאַגנייזינג דעם ווי מענגע ינדעקסט דורך בריוו אַ. איר ווילן צו טאָן אַז סעראַונדאַד דורך געגרייַזלט ברייסאַז, און איצט וועלכער איז אין דעם געגרייַזלט בראַסע וועט זייַן יטערפּאַלייטיד, וואָס איז די וואָרט מיר נוצן פֿאַר מאַדזשיקאַלי ינסערטינג די וועריאַבאַלז אין די רעכט ערטער. איצט טאן דעם, פפּ.וניקווע, און הי, מיין נאָמען איז 1!! ווי דערוואַרט אָדער הי, מיין נאָמען איז ראָב!! איין זאַך אַז ס מין פון פייַן וועגן איין קוואָטעס איז וואָס - עס ס עטלעכע פּרייַז צו ינטערפּאָלאַטינג. אויב איר נוצן טאָפּל קוואָטעס, די יבערזעצער האט צו גיין איבער דאָס שטריקל, מאכן זיכער אַז ", אָה, דאָ ס אַ בייַטעוודיק. איצט איך דאַרפֿן צו גיין באַקומען אַז בייַטעוודיק און אַרייַנלייגן עס דאָ." אפילו אויב איר טאָן נישט נוצן קיין וועריאַבאַלז, גאָרנישט ין פון די טאָפּל קוואָטעס דאַרף צו זייַן יטערפּאַלייטיד, אָבער עס וועט נאָך זייַן סלאָוער ווייַל עס דאַרף צו גיין איבער די טאָפּל קוואָטעס קוקן פֿאַר זאכן וואָס דאַרפֿן צו זייַן יטערפּאַלייטיד. אַזוי איין קוואָטעס קענען זייַן אַ ביסל פאַסטער אויב גאָרנישט דאַרף צו זייַן יטערפּאַלייטיד, און איך טענד צו אַפֿילו נוצן איין קוואָטעס פֿאַר, 'הי, מיין נאָמען איז'. $ מענגע ['אַ'] סייַ ווי סייַ. אַז ס 'געגאנגען צו זייַן עקוויוואַלענט צו וואָס מיר האבן פריער. אבער עס ס אַ ענין פון ייבערהאַנט. אויב איר ניטאָ ניצן פפּ, איר מיסטאָמע טאָן ניט זאָרגן וועגן די גיכקייַט חילוק. עס איז נישט גענוג צו סיבה זיי אויס צו אָנהייבן מיט. קיין לעצט שאלות? מיר פאקטיש האט נישט אַפֿילו באַקומען דורך אַלע פון ​​אים, אָבער דעם שטאָפּן איז געווען נודנע. די לעצטע זאַך וואָס ס מין פון פייַן אין פפּ איז ווען איר ניטאָ דילינג מיט HTML, איר וועט נוצן עס אַ ביסל, אַזוי די פייַן דורכוועג סינטאַקס פֿאַר דרוקן אַ בייַטעוודיק. אָן פּאַטינג פפּ דאָ, דאָס איז גערופן קורץ טאַגס. אַפישאַלי ווי פון פפּ 5.4, דאָס איז דעפּראַקייטאַד. איר זענט רעקאַמענדיד צו שטעלן פפּ. דאס איז נאָך געשטיצט, אַזוי קורץ טאַגס מיט די