Was ist der Unterschied zwischen einer Funktion und einer Methode? Ich habe die Geschichte mitgehört. Also beschloss ich, meine Anerkennung erneut zu bestätigen und aufzuschreiben. Ich hoffe auch, dass es für diejenigen hilfreich sein wird, die gerade mit der Systementwicklung begonnen haben und mit diesem Bereich nicht vertraut sind. Warum Java? Das liegt daran, dass es anscheinend viele Benutzer gibt, und wie ich später erläutern werde, werden auch funktionsähnliche Dinge auf dem Mechanismus der Methode liegen, so dass ich dachte, es wäre schwierig zu unterscheiden.
Über die Definition einer Funktion nachdenken "Erhält einen Wert (Argument) und gibt den Ergebniswert (Rückgabewert) zurück, der den Katalog verarbeitet." Ich denke, das wird der Fall sein. Und wenn es um eine reinere Funktion geht, ergeben sich folgende Bedingungen. -Es wird von nichts anderem als dem Argument beeinflusst.
Mit anderen Worten, das folgende Muster ist keine reine Funktion. ** - Abrufen und Verwenden der aktuellen Uhrzeit mit Datum, Kalender, LocalDate usw. ** → Die Ergebnisse variieren je nach Ausführungszeit ** - Werte aus Dateien und DBs abrufen und verwenden ** → Wenn sich der erfasste Inhalt vor einiger Zeit geändert hat, ist das Ergebnis anders. ** - Aktualisieren von Dateien und DB ** → Andere Arbeiten ausführen als Werte zurückgeben (Nebenwirkungen verursachen) ** ・ Etwas wird von System.out.println usw. ausgegeben. ** → Standardausgabe ist auch eine Art Nebeneffekt ** - Zugriff auf ein Feld in der Klasse ** → Das Ändern des Feldwerts ist ein Nebeneffekt, und das Ändern des Feldwerts ändert das Ergebnis.
Es ist auch ein subtiles Gefühl, aber dies ist auch ein Nebeneffekt.
final public void someMethod(final List<String> list, final String text){
list.add(text); //Beeinflusst die Anruferliste
}
Andererseits können Dinge wie ↓ als reine Funktionen bezeichnet werden.
final public String twice(final String text){
return text + text; // text ==Wenn es null ist, denken Sie jetzt nicht darüber nach
}
Unabhängig davon, wie oft Sie es aufrufen, wird dasselbe Ergebnis zurückgegeben, wenn die Argumentzeichenfolgen identisch sind.
In Java ist es nicht möglich, einen Katalog einer solchen Verarbeitung außerhalb der Klasse zu platzieren. Daher wird die Funktion unter Verwendung des oben beschriebenen Verfahrens ausgedrückt. (Für Java 8 oder höher gibt es eine Möglichkeit, eine Implementierung einer funktionalen Schnittstelle zu erstellen, jedoch ohne diese)
Bisher haben wir uns überlegt, was eine Funktion ist, insbesondere eine reine Funktion. Und in Java werden solche "funktionalen Methoden" als Funktionen verwendet. Funktionale Methoden gehören zu einer Klasse, sind jedoch funktional und beeinträchtigen die Felder dieser Klasse nicht. Das gleiche Ergebnis (ABCABC) wird für das 1., 2., 2. und 3. Mal der folgenden Verarbeitung ausgegeben.
final public class Sample {
public static void main(String args[]){
//Erstes Mal
final TextSomething obj1 = new TextSomething();
System.out.println(obj1.twice("ABC"));
//Zweites Mal
final TextSomething obj2 = new TextSomething();
System.out.println(obj2.twice("ABC"));
//Zweites Mal'
System.out.println(obj2.twice("ABC"));
//Drittes Mal
final TextSomething obj3 = new TextSomething();
System.out.println(obj3.twice("ABC"));
}
}
final public class TextSomething {
//Funktionsmethode
final public String twice(final String text){
return text + text;
}
}
Wenn Sie jedoch darüber nachdenken, können Sie zweimal von jeder Instanz von obj1, obj2, obj3 beliebig oft aufgerufen werden. Es gibt unabhängig von seinem internen Datenstatus das gleiche Ergebnis zurück. In diesem Fall müssen Sie keine neue Instanz erstellen, um sie zu verwenden. Deklarieren Sie also eine funktionale Methode statisch. Und es werden häufig Klassen erstellt, die ähnliche Linien funktionaler und statischer Methoden konsolidieren. Dies wird als ** Utility-Klasse ** bezeichnet.
final public class TextUtil {
final public static String twice(final String text){
return text + text;
}
final public static String twice2(final String text){
return text.toUpperCase() + text.toLowerCase();
}
}
final public class Sample2 {
public static void main(String args[]){
System.out.println(TextUtil.twice("aBc")); // aBcaBc
System.out.println(TextUtil.twice2("aBc")); // ABCabc
}
}
Wenn es sich um eine statische Methode handelt, führt der Zugriff auf die Feldvariablen in der Klasse zu einem Kompilierungsfehler und ist nicht möglich.
Methoden werden oft als "Klassenverhalten" bezeichnet. Ich persönlich halte diesen Ausdruck jedoch für subtil. Das Verhalten der Ausdrucksklasse ist eine Klassenperspektive. Klasse A kann dies und das, Klasse B kann dies und das ... Es fühlt sich an wie eine anthropomorphe Klasse, aber wir sind keine Klasse. Systementwicklung Wir sind stehende Programmierer, die Klassen verwenden, um die Entwicklung voranzutreiben. Das Wort Methode ist auch eine wörtliche Übersetzung von "Methode", daher ist es einfacher, sich dies als ** "wie man Klassen manipuliert" vorzustellen. Die Methode ist ** "Objekt (Instanz) Betriebssystem" **. Was Sie tun, sind im Grunde die Feldvariablen, die die Instanz hat. Beispielsweise gibt es eine solche Methode, mit der als privat deklarierte Variablen bearbeitet werden.
final public class DataClass {
private Integer bet;
//Operation, um den Wert der variablen Wette zu erhalten
final public Integer getBet() {
return bet;
}
//Operation zum Ändern des Werts der variablen Wette
final public void setBet(Integer bet) {
this.bet = bet;
}
}
Getter und Setter, sogenannte Accessor-Methoden. Es kann andere Methoden geben, die den Einsatzwert mit 10 multiplizieren oder halbieren. Abhängig von der Klasse werden die Datenbankverbindungseinstellungen (Servername, Benutzername, Kennwort usw.) von Setzern übergeben. Möglicherweise verfügen Sie über eine Methode namens public void dbConnect (), die eine DB-Verbindung basierend auf diesen Informationen herstellt und den Verbindungsstatus als interne Daten enthält.
Wenn Sie also für eine reine Funktion an eine "reine Methode" denken, scheint sie ein Katalysator für die Verarbeitung zu sein, die den Status der Instanz beeinflusst oder ihm gegeben wird.
Wenn nun die ursprüngliche Form der objektorientierten Methoden von Java das Betriebssystem für Objekte ist, Ist eine funktionelle statische Methode ohne Nebenwirkungen eine korrekte Methode? Ist die Utility-Klasse, die nur statische Methoden und daher keine Felder (Zustände) hat (sie ist nicht neu), in erster Linie in Bezug auf die Objektorientierung korrekt? Dies ist eine problematische Geschichte über objektorientiert, daher lasse ich sie beiseite, aber wenn Sie die Utility-Klasse früher objektorientiert neu erstellen (funktionale → ursprüngliche Methode), sieht sie folgendermaßen aus. Normalerweise schreibe ich nicht auf diese Weise, daher ist es schwierig, ob dies in Ordnung ist. Wie wär es damit?
final public class TextObject {
private String text;
final public void setText(String text){
this.text = text;
}
final public String twice(){
return text + text;
}
final public String twice2(){
return text.toUpperCase() + text.toLowerCase();
}
}
final public class Sample3 {
public static void main(String args[]){
final TextObject obj = new TextObject();
obj.setText("aBc");
System.out.println(obj.twice()); // aBcaBc
System.out.println(obj.twice2()); // ABCabc
}
}
Ich persönlich denke, es ist schneller, mit Utility-Klassen (in Java) zu schreiben. Die Theorie, die besser ist, ist nicht das Hauptthema, also lassen wir es ...
** Was ist eine Methode ** So ändern Sie den internen Status eines Objekts oder rufen den internen Status ab ** "So bedienen Sie ein Objekt" **. Der interne Zustand ist ungefähr der Wert einer Variablen eines Objekts (einer Instanz). (Oder etwas, das Funktionen wie die Ausgabe in eine Datei und die Aktualisierung auf DB entzündet)
** Was ist eine Funktion ** ** "Ein Prozess, der ein oder mehrere Argumente akzeptiert und das Ergebnis einer Berechnung als Rückgabewert zurückgibt" **. In Java werden Funktionen basierend auf dem Mechanismus von Methoden geschrieben.
Recommended Posts