Programmieren – die neusten Beiträge

Was bringt der Einsatz von Setter und Getter in JavaScript?

Kurz: Ich verstehe nicht, was der Einsatz von set und get mir in der Praxis bringt. Ich weiß, dass er was mit Zugriffseigenschaften zu tun hat, aber ich vermische das glaube ich mit der Datenkapselung und der Privatisierung der Eigenschaften und Methoden über # (oder auch nicht, ich bin verwirrt).

Folgendes Beispiel sei gegeben, was genau macht hier den Unterschied? Egal ob ich nun den Abschnitt mit set und get niederschreibe oder nicht, an den Ausgabebefehlen und Ergebnissen ändert sich nichts. Ich kann auch problemlos die einzelnen Werte der Objektinstanz "fish". Ich wäre froh, wenn mir das jemand (möglichst einfach) erklären könnte. Soll der Zugriff von außen verhindert werden? Aber dafür habe ich ja #.



//Gegeben sei Klasse Animal
class Animal {
    
    _name = "";
    _color = "";
    _age = "";


    
    
    constructor(name, color, age) {                     
        this._name = name ? name : this._name;          
        this._color = color ? color : this._color;      
        this._age = age ? age : this._age;              
    }


    //Getter und Setter
    get name() {
        return this._name;
    }


    set name(name) {
        this._name = name;
    }


    get color() {
        return this._color;
    }


    set color(color) {
        this._color = color;
    }


    get age() {
        return this._age;
    }


    set age(age) {
        this._age = age;
    }


    //Ein paar Methoden
    eat(food) {
        console.log(`Mhh, ${food}`);
    }


    
    drink(drink) {
        console.log(`Schlürf, ${drink}`);
    }


    
    toString() {
        return `${this.name}, ${this.color}, ${this.age}`;
    }


}



//Erzeugung neuer Objektinstanz
const fish = new Animal("Fischi", "Grün", 2);               



console.log(fish.name);             //Ausgabe Fischi



fish.name = "Flipper";             //Neue Wertzuweisung
console.log(fish.name);            //Ergebnis Flipper
programmieren, JavaScript

jetpack compose - wie starte ich eine neue Activity?

Hallo zusammen

Ich habe folgendes Composable in meinem Code:

@Composable
fun Toolbar() {

    // Create a boolean variable
    // to store the display menu state
    var mDisplayMenu by remember { mutableStateOf(false) }

    // fetching local context
    val mContext = LocalContext.current

    // Creating a Top bar
    TopAppBar(
        title = { Text(stringResource(R.string.app_name)) },backgroundColor = Color(0xFFFFFFFF),
                actions = {

                    // would create a Toast message
                    IconButton(onClick = {
                        val intent = Intent(this, LockScreenActivity::class.java)
                        startActivity(intent)
                        Toast.makeText(mContext, "Lock app...", Toast.LENGTH_SHORT).show() }) {
                        Icon(Icons.Outlined.Lock, "")

Nun möchte ich gerne, dass wenn man auf das lock icon klickt, die dazugehörige Activity "LockScreenActivity" gestartet wird. Folgende Fehlermeldung erhalte ich jedoch bei "val intent = Intent"

None of the following functions can be called with the arguments supplied.
<init>(Context!, Class<*>!) defined in android.content.Intent
<init>(String!, Uri!) defined in android.content.Intent

Ich weiss nicht genau, warum diese Fehlermeldung auftritt bzw. warum es nun noch ein Argument benötigt. Könnte mir bitte Jemand helfen?

Eine Zeile weiter unten bestätigt sich nochmals mein Fehler mit der Meldung No value passed for parameter 'intent'

No value passed for parameter 'intent'

Vielen Dank für jede Hilfe.

programmieren, Android, Code, compose, Android Studio, Kotlin

Maximale Pfadlänge in Windows und VBA umgehen?

Hallo,

ich benutze folgenden Code in Excel VBA um mir Dateipfad und Dateiname eines Ordners und allen darin enthaltenen Unterordnern aufzulisten.
(Ihr könnt es testen, den Code einfach in ein Modul kopieren, "MainList" ausführen und einen Ordner eurer Wahl auswählen)

Ich habe jetzt das Problem, dass dieser Code alle Dateien überspringt, deren Pfadlänge über 255 Zeichen lang ist. Einige Dateien überschreiten nämlich die 255 Zeichen mit dem angehängten Dateinamen.
Sie liegen aber dennoch ab. Nur liest VBA diese nicht aus. Kann man da was dran machen?

Sub MainList()
'Updateby Extendoffice
Set Folder = Application.FileDialog(msoFileDialogFolderPicker)
If Folder.Show <> -1 Then Exit Sub
xDir = Folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files
  Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Path
  Application.ActiveSheet.Cells(rowIndex, 2).Formula = xFile.Name
  rowIndex = rowIndex + 1
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub

Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function
Computer, Windows, Microsoft, Datei, Microsoft Excel, programmieren, VBA

Meistgelesene Beiträge zum Thema Programmieren